単一ページアプリケーションをテストしたところ、RESTエンドポイントがクロスドメインアクセスを許可するCORSヘッダーを返すことがわかりました。
access-control-allow-credentials: true
access-control-allow-methods: GET, POST, DELETE, PUT
access-control-allow-Origin: *
これらのエンドポイントは機密データを処理するため、これに対する私の最初の反応は、リスクの高い脆弱性を提起することです。
しかし、私がこの問題を悪用しようとしたとき、私は見つけることができませんでした。サイトは、セッションCookieの代わりに認証ヘッダーでベアラートークンを使用します。クロスドメインリクエストを行うことは可能ですが、必要なヘッダーを添付することはできません。
このモデルのリスクは何ですか?これは物事を行うための賢明な方法ですか?
悪用される可能性が低いことを意味するいくつかの事柄があります。
で開始する
access-control-allow-credentials: true
access-control-allow-Origin: *
無効な組み合わせ :
重要な注意:認証されたリクエストに応答する場合、サーバーはドメインを指定する必要があり、ワイルドカードを使用できません。ヘッダーがAccess-Control-Allow-Origin:*のようにワイルドカード化されている場合、上記の例は失敗します。 Access-Control-Allow-Originが
http://foo.example
、認証情報を認識するコンテンツが、呼び出し元のWebコンテンツに返されます。
もう1つのことは、 認証ヘッダーは単純なヘッダーではない であるため、 Access-Control-Allow-Headers
そのヘッダーを返す応答。これを返さないサーバーは、プリフライトがそれをブロックするため、CSRF攻撃も防止します。
ヘッダーを許可しない限り、特定のブラウザーで動作するために使用された Flashでエクスプロイトを試行する でない限り、通常はカスタムヘッダークロスドメインを追加できません。
このモデルのリスクは何ですか?これは物事を行うための賢明な方法ですか?
このヘッダーの組み合わせを指定することは無効であるため、実際にはこれは賢明な方法ではありません。それを可能にする奇妙なブラウザがそこにあり、サイトは脆弱です(潜在的な被害者がそれを使用している場合)。すべてのオリジンを許可し、認証されていないリクエストを許可すると、他の方法ではアクセスできないリソースに到達するために 犠牲ブラウザを一種のプロキシとして使用できます が許可されます。ただし、ベアラーヘッダーは(Flashエクスプロイトなしでは)添付できず、Access-Control-Allow-Headers
、これはリスクが高いとは言えません。さらに、攻撃者は被害者のベアラートークンを持っていないため、行われるすべてのクロスドメインリクエストは、被害者のセッションではなく攻撃者のセッションの下になります。
CORSヘッダーが彼らの意図と一致していることを彼らがレビューすべきであるという助言項目としておそらく私はそれを指摘するでしょう。