web-dev-qa-db-ja.com

img / scriptタグを使用して機密情報を読み取ることで、ある種のCSRFは可能ですか

https://mysite/api/getSensitiveDataに次のようなAPIがあるとします。

  • GETを使用
  • Cookie認証で保護
  • 一部の機密データを含むJSONを返します

悪者はサーバーにイメージタグを持つサイトを作成します。

<img src="https://mysite/api/getSensitiveData"><img>

これでブラウザがこのリクエストを実行してCookieを送信し、データがロードされます(少なくとも私の知る限り)。その後、画像ではないため、何も表示されません。

しかし、リクエストは悪者がJavaScriptを制御しているサイトで実行されました。画像、リクエストのインターセプト、またはその他のメソッドからレスポンスを読み取る方法はありますか?

追伸多分他のいくつかの同様の可能性があり、必ずしもimgタグではありませんか?

4

画像タグのみ-いいえ。攻撃者がAPIエンドポイントからデータを収集して自分に返すことができるようにするには、ページのJavaScriptを自分の制御下に置く必要があります。 javascript/ajax要求を使用しても、ブラウザーは引き続きCookieを渡すため、要求を認証し、潜在的に応答を受信して​​新しいサーバーに送信できるようにします。

ただし、これを実行しようとすると、ブラウザで同じOriginポリシーに違反します。これは、スクリプトが異なるホスト、ポート、またはプロトコルのサイトからドキュメントをリクエストした場合、宛先サイトによって明示的に承認されない限り、スクリプトからの応答は拒否されることを示しています。クロスドメインリクエストを承認する最も一般的な方法は、CORSを使用することです。その結果、攻撃者がエンドポイントからの応答を実際に読み取ってデータを取得できる唯一の方法は、ユーザー(ドメイン所有者)が明示的にCORSに資格情報を許可するように指示し、悪意のあるドメイン名をホワイトリストに登録した場合です。 JavaScriptが実行されています。

この制限を回避するには、攻撃者は独自のJavaScriptをドメインで実行する必要がありますが、その時点ではXSS攻撃について話しているため、かなりうんざりしています。適切に構成されたCSPヘッダーを使用してXSS攻撃が成功した場合でも、データが攻撃者に返されないようにする方法はいくつかありますが、CSPヘッダーは適切に取得するのが難しく、まだ幅広いブラウザーサポート(特にIE)を備えていません)。

あなたが話していることに最も近いアナログは、XSSI/JSONハイジャックです。これらは、ブラウザーで同じ発生元ポリシーの制限を回避するためのさまざまな手法です。

http://www.thespanner.co.uk/2011/05/30/json-hijacking/

ただし、これらの制限の回避を可能にする手法は主に最新のブラウザーでパッチが適用されており、脆弱性の関連性ははるかに低くなっています。

https://stackoverflow.com/q/16289894/1921979

このような弱点が将来さらに見つかる可能性は常にあります。その場合、XSSI(h/t Xavier59)から保護するいくつかの手法があります。

https://security.stackexchange.com/a/110552/1101

6
Conor Mancone