web-dev-qa-db-ja.com

リクエストヘッダーの「Authorization:Bearer」はCSRF攻撃を修正しますか?

CSRF攻撃の修正について読んでいます。一部の調査から、ブラウザがそのようなヘッダーを自動的に送信しないため、 非標準ヘッダーをチェックすることでCSRF攻撃を防ぐことができる と理解しています。

したがって、私はAuthorization:BearerトークンをASP私が現在テストしているアプリケーションに)使用することを推奨することを想定していました。ヘッダー値はブラウザー自体によって送信されません。このアプローチでCSRFの問題が修正されると思います。しかし、私は スタックオーバーフローの質問 に気づき、少し混乱しました。 CSRFトークンを使用します。

したがって、基本的に2つの質問があります。

  1. このアプローチは実際にCSRF攻撃を防ぐために機能しますか?
  2. XSS攻撃に対して脆弱な場合、Cookieが読み取られ、ベアラートークンが盗まれる可能性があります。しかし、挿入されたXSSはAuthorization:Bearerヘッダーを作成し、Cookieから盗まれた値を追加できますか?
5

このアプローチは実際にCSRF攻撃を防ぐために機能しますか?

はい。攻撃者は、正しいベアラートークンを含む認証ヘッダーを含むリクエストをブラウザーに送信させることはできません。これには2つの理由があります。

  • 攻撃者は認証ヘッダーを設定できません。
  • 攻撃者はトークンの正しい値を知らないので、トークンに何を設定するかわかりません。

ただし、これはアプリケーションの変更の影響を受けやすい場合があります。たとえば、誰かが認証システムをCookieベースの何かに変更することを決定した場合、そのことにより、CSRF保護を無効にしていることに気付かない可能性があります。

また、必要なヘッダー値が予測可能な場合は、そのヘッダーの設定を許可するCORSポリシーが問題を引き起こす可能性があります。

リンクされたSO質問については、私が受け入れられた回答を理解しているかどうかはわかりません。しかし、 2番目の回答 を見ると、状況はタイプ2であり、タイプ#1ではありません。

XSS攻撃に対して脆弱である場合、私のCookieが読み取られ、ベアラートークンが盗まれる可能性があります。しかし、挿入されたXSSはAuthorization:Bearerヘッダーを作成し、Cookieから盗んだ値を追加できますか?

ええ、コードを注入できるなら、そうすることができます。

XSSの脆弱性があると、攻撃者はあなたが設定したCSRF保護をバイパスすることができます。したがって、XSSの懸念を実際に使用して、ある形式のCSRF保護を別の形式よりも優先することはできません。XSSに直面しても、それらはすべて無効です。

ここでのわずかな違いは、トークンをヘッダーに入れるためにJSからアクセスする必要があるため、トークンをHTTP専用としてマークできないことです。その結果、XSS攻撃者はそれを盗み、自分のコンピューターからリクエストを簡単に送信できます。認証トークンがHTTPのみの場合、攻撃者は挿入されたコードにリクエストを送信させる必要があります。これは少し面倒ですが不可能ではありません。

8
Anders

機能しますが、XSSはセッションを完全に危険にさらします。

CSRF緩和策の目的は、ユーザーのブラウザーからサーバーにデータを送信して、何かを発生させることができるユーザーの範囲を制限することです。 CSRF攻撃は、通常、すべてのリクエストにCookieを含み、攻撃者がブラウザにリクエストを送信してターゲットURLにリクエストを送信するだけでよいという点で、Webブラウザーの特別なプロパティに依存して機能します。これを緩和するには、ブラウザから送信されたリクエストの一部ではないデータをリクエストに含める(== --- ==)通常ようにします。例えばJavaScriptによって挿入されたカスタムヘッダーまたはフォームフィールド。

Authorizationヘッダーのベアラートークンは、ブラウザーで含まれないため(NTLM/Negoなどを除いて、別のトピックです)、JavaScriptによって追加する必要があります。したがって、それは上記の要件にかなりよく適合します。

ここでのセキュリティ境界がないため、そのページで実行されるJavaScriptは、ヘッダーを追加するコードとまったく同じことを実行できます。これは、任意のコード実行を可能にするあらゆる形式のXSSに縛られていることを意味します。そして実際には、ブラウザの境界の外でトークンを盗んでそれを使って何でもできるため、弱い立場に置かれますが、JavaScriptからアクセスできないため、保護されたCookieは盗まれません。

つまり、XSSを完全に防ぐことができれば安全ですが、これは最良の状況では難しい作業です。とは言っても、XSSがトークンを追加する要求を生成でき、ブラウザーが引き続きCookieを含めるため、Cookieをミックスに追加しても必ずしも効果はありません。

3
Steve