私にはいくつかの基本的な混乱があります。
疑いを持たない被害者は、脆弱な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-Origin
がvulnerablesite.com
に設定されたため、同じOriginポリシー違反がないため)
攻撃者のAJAXスクリプトがxhr.responseを言うとき、この応答オブジェクトは確実に/home.html
ページを保持します。
主な混乱は、Cookieのパスとドメイン属性に関するものです。 質問
/home.html
に設定されているため、/home.html
に対して行われたリクエストには、このCookieが含まれます。しかし、/home.html
への応答はset-cookieをまったく実行していないため、攻撃者のajaxがdocument.cookieと言うと、正確に何が読み取られますか?したがって、この場合、攻撃者のスクリプトが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.cookie
はsome_page.html
のvulnerablesite.com
のコンテキスト内にあるため、/home.html
のvulnerable.com
をスコープとするCookieを読み取ることができません。
home.html
がCookieを設定している場合でも、 set-cookie
ヘッダーの取得はほとんどのブラウザーで禁止されています 。
この場合のCookieのドメイン属性がどうなるか、そしてとにかくそれがCookieの読み取りにどのように影響するかはわかりません。
ドメインは Host-only cookie としてvulnerable.com
に設定されます。したがって、たとえば、 foo.vulnerable.com
。
Originにはプロトコルが必要であることを忘れないでください 。したがって
Access-Control-Allow-Origin: vulnerablesite.com
たとえば、.
Access-Control-Allow-Origin: https://vulnerablesite.com
ドメインが同じで、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にアクセスできたはずです。