web-dev-qa-db-ja.com

document.cookieとそのスコープ

私にはいくつかの基本的な混乱があります。

疑いを持たない被害者は、脆弱なWebサイトvulnerable.comにアクセスしてログインします。ログイン後のvulnerable.comは、次のHTTPヘッダーが設定された応答を返します。

Access-Control-Allow-Credentials:True
Access-Control-Allow-Origin:vulnerablesite.com

セッションCookieのスコープは/home.htmlパスのみであり(あまり意味がないかもしれませんが、この説明のためにそう仮定します)、HTTPOnlyフラグが設定されていないとします。

次に、同じブラウザで新しいタブを開いてvulnerablesite.com/some_page.htmlにアクセスします。攻撃者はvulnerablesite.com/some_page.htmlに保存されているXSSを特定し、これを悪用してvulnerable.comのユーザーのセッションCookieにアクセスすることを決定します。

そのため、攻撃者はAJAXスクリプトをvulnerablesite.com/some_page.htmlに挿入します。そのため、被害者がページにアクセスすると、AJAX vulnerable.com/home.html。これで、この要求は確実に成功し(そうしない理由もなく、Access-Control-Allow-Credentialsがtrueだったためもありません)、受信した応答も攻撃者のAJAXスクリプト(Access-Control-Allow-Originvulnerablesite.comに設定されたため、同じOriginポリシー違反がないため)

攻撃者のAJAXスクリプトがxhr.responseを言うとき、この応答オブジェクトは確実に/home.htmlページを保持します。

主な混乱は、Cookieのパスとドメイン属性に関するものです。 質問

  1. したがって、この場合、攻撃者のスクリプトがdocument.cookieを今言ったときに、攻撃者は被害者のセッションCookieを読み取ることができますか?
  2. cookieのスコープは/home.htmlに設定されているため、/home.htmlに対して行われたリクエストには、このCookieが含まれます。しかし、/home.htmlへの応答はset-cookieをまったく実行していないため、攻撃者のajaxがdocument.cookieと言うと、正確に何が読み取られますか?
  3. この場合のCookieのドメイン属性がどうなるか、そしてとにかくそれがCookieの読み取りにどのように影響するかはわかりません。
3
qre0ct

したがって、この場合、攻撃者のスクリプトがdocument.cookieを今言ったときに、攻撃者は被害者のセッションCookieを読み取ることができますか?

いいえ、AJAXリクエストはXSSの欠陥により送信および読み取りできますが、AJAXリクエストからのCookieはできません。document.cookieは最初に悪用されたページ(some_page.html)で利用可能なCookie。

cookieのスコープは/home.htmlであるため、/ home.htmlに対して行われるすべての要求は、このCookieを伴います。しかし、/ home.htmlへの応答はset-cookieをまったく実行していないため、攻撃者のajaxがdocument.cookieと言うと、正確に何が読み取られますか?

この場合も、document.cookiesome_page.htmlvulnerablesite.comのコンテキスト内にあるため、/home.htmlvulnerable.comをスコープとするCookieを読み取ることができません。

home.htmlがCookieを設定している場合でも、 set-cookieヘッダーの取得はほとんどのブラウザーで禁止されています

この場合のCookieのドメイン属性がどうなるか、そしてとにかくそれがCookieの読み取りにどのように影響するかはわかりません。

ドメインは Host-only cookie としてvulnerable.comに設定されます。したがって、たとえば、 foo.vulnerable.com

CORSに関する注意

Originにはプロトコルが必要であることを忘れないでください 。したがって

Access-Control-Allow-Origin: vulnerablesite.com

たとえば、.

Access-Control-Allow-Origin: https://vulnerablesite.com
4
SilverlightFox

ドメインが同じで、Cookieが_http://example.com/home/_に設定されていて、HTTPのみが設定されていない場合、_http://example.com/vulnerable/_にXSSの脆弱性があり、攻撃者はCookieにアクセスできます-ページにiframeを挿入し、document.getElementsByTagName("iframe")[0].contentDocument.cookieに類似したスクリプトを使用してCookieにアクセスできます。

ドメインが異なる場合、質問にあるように見えるので、いいえ、Cookieにアクセスすることはできません。 _Access-Control-Allow-Credentials: true_が行うすべてのことは、リクエストに認証情報(CookieとHTTP Basic Auth)を含めてもよいことをブラウザに通知することです-Webサイトが何らかの理由で詳細を含めない限り、それらの認証情報をリクエスタに公開しません応答内のCookie。これを行う正当な理由はほとんどありません)。

ただし、Cookieの実際の値にアクセスできることは、Cookieを悪用できる必要はありません。攻撃者はユーザーとして認証されたリクエストを作成し、最初のリクエストから返されたHTMLドキュメントからCSRFトークンを読み取ることにより、CSRF(Cross Site Request Forgery)保護をバイパスすることができます。つまり、すべてのエンドポイントが関連するCORSヘッダー(一部のエンドポイントがGETではなくPOSTを必要とする場合は_Access-Control-Allow-Methods_を含む)を返す場合、攻撃者はAJAXを介して同じリクエストを行うことができます_自分のコンピューターでセッションCookieにアクセスできたはずです。

5
JackW