web-dev-qa-db-ja.com

二重送信Cookieの脆弱性

Double Submit Cookies メカニズムは [〜#〜] xss [〜#〜] および サブドメイン攻撃

すべてのCSRF保護メカニズムはXSSに対して脆弱であるため、新しいことは何もありません。すべてのサブドメインを確実に制御している限り、このメカニズムに安全に依存できるかどうか疑問に思っています。

注:この質問は、 ログインCSRFから保護する方法のスピンオフです

18
Gili

Blackhat 2013で公開された paper によると、独自のサブドメイン(secure.Host.comなど)にDouble-Submit Cookieを実装するだけでは不十分です。あなたは本当にallサブドメインを制御する必要があります:

2.1.1ナイーブダブルサブミット

二重送信CookieのCSRF緩和策は一般的であり、実装はさまざまです。スケーラブルで実装が簡単なソリューションは魅力的です。最も一般的なバリエーションの1つはナイーブです。

if (cookievalue != postvalue) 
 throw CSRFCheckError 

ナイーブダブルサブミットを使用すると、攻撃者がCookieを作成できる場合、明らかに保護を無効にすることができます。繰り返しになりますが、Cookieの書き込みは読み取りよりもはるかに簡単です。

Cookieを書き込むことができるという事実は、多くの人が理解するのは困難です。結局のところ、同じOriginポリシーでは、あるドメインが別のドメインのCookieにアクセスできないように指定していませんか?ただし、ドメイン間でCookieを書き込むことが可能な一般的なシナリオが2つあります。

1)同じOriginポリシーのために、hellokitty.marketing.example.comがcookieを読み取ったり、secure.example.comからDOMにアクセスしたりできないのは事実ですが、hellokitty.marketing.example.comは親ドメイン(例。 com)、そしてこれらのcookieは、secure.example.comによって消費されます(secure.example.comには、cookieを設定したサイトを区別する良い方法がありません)。

さらに、secure.example.comが常に最初にcookieを受け入れるように強制する方法があります。つまり、hellokitty.marketing.example.comのXSSは、secure.example.comのCookieを上書きできます。

次に、このアプローチは中間者攻撃に対して脆弱です。

2)攻撃者が中間にいる場合、通常、HTTPを介して同じドメインにリクエストを強制できます。アプリケーションが https://secure.example.com でホストされている場合、cookieにセキュアフラグが設定されていても、中間の人が http:/に強制的に接続できます。 /secure.example.com そして、任意のCookieを設定(上書き)します(セキュアフラグが攻撃者によるこれらのCookieの読み取りを防ぐ場合でも)。

HSTSヘッダーがサーバーに設定されていて、サイトにアクセスするブラウザーがHSTSをサポートしている場合でも(これにより、中間にいる人がプレーンテキストのHTTPリクエストを強制するのを防ぐことができます)、HSTSヘッダーがすべてのサブドメインを含む方法で設定されていない限り、真ん中は、リクエストを別のサブドメインに強制し、1と同様のCookieを上書きすることができます。つまり、 http://hellokitty.marketing.example.com がhttpsを強制しない限り、攻撃者は、example.comサブドメインのCookieを上書きできます。

要約すれば:

  1. すべてのサブドメインを制御する必要があります。
  2. CookieがHTTPS経由でのみ送信されるようにするには、Secureフラグを設定する必要があります。
  3. MiTM attack に関心がある場合は、ウェブサイト全体をHTTPSに移行し、 [〜#〜] hsts [〜#〜] ヘッダーを設定して、それを確認する必要があります すべてのサブドメインを含む 。現時点では、ブラウザーの58%のみ HSTSをサポート (注目すべき例外はInternet Explorerです)。これは、今後1年間で 変更される予定です です。

値を生成するために必要なトークンの長さとRNGのタイプについては、 https://security.stackexchange.com/a/61041/5002 を参照してください。

19
Gili

すべてのXSS攻撃はCSRF保護よりも優先されますが、攻撃者とは異なる取り組みが必要です。トークンなどの単純な保護は、攻撃者がDOMからトークン値を読み取るだけで、後続のフォーム送信でそれを使用できるため、XSS攻撃を介して簡単に取得できます。パスワードまたはOTP再認証を必要とする機密フォームは、ユーザー資格情報またはOTPを何らかの方法で取得するために攻撃を仕掛ける必要があるため、攻撃するのが難しくなります。ただし、DOMを完全に制御することで、ログインページを模倣して、ユーザーをだましてログアウトしたと思わせ、ユーザーが資格情報を入力するのを待つことができます。この場合、被害者として直接ログインできます。 CSRF攻撃のみを実行する代わりに。また、この攻撃はサイトに目に見える混乱を引き起こします。つまり、エキスパートユーザーは何かが間違っていると疑い、攻撃者のフォームへのログインを拒否する可能性があります。

サブドメインでは、Cookieの二重送信には2つのリスクがあります。 Cookie値を読み取るサブドメインの攻撃者。例えば Host-only cookie 以外がexample.comレベルで設定されている場合、foo.example.comを制御する攻撃者がCookieの値を読み取ることができます。ホストオンリーCookieを設定すると、この攻撃に対抗できます。

攻撃者がCookieを作成する際のもう1つのリスク。 Same Origin Policy は、他のDOMよりもCookieの方が緩いです。これは、foo.example.comを制御する攻撃者が、被害者がexample.comまたはbar.example.comにアクセスしたときに読み取られるCookieを設定できることを意味します。彼らは単にexample.comレベルでのみ非ホストを設定します。サイトが攻撃を受けている場合でも、bar.example.comはHTTPSを介してホストのみのCookieを設定し、 secure flag を設定してプレーンHTTP経由での漏洩を防ぎます。攻撃者がプレーンHTTP Cookieを設定すると、 Cookieをbar.example.comで読み取るように設定できます。その理由は、サーバーが実際のドメインにそれを設定したことを通知できず、安全なフラグ自体を照会できないためです。

Cookieの二重送信は HTTPSトラフィック以外のすべてを傍受して変更できる中間者攻撃 に対しても脆弱です。ターゲットサイトexample.comがプレーンhttp(つまり、ポート443はTLSに対してのみオープン)でリッスンしない場合でも、攻撃者はanyプレーンHTTPリクエストをHTTP 3xxでリダイレクトできます(例:http://example.com)、次にその要求をインターセプトし、example.comに設定された汚染されたCSRF Coo​​kieを使用して応答を送信します。サーバーはセキュアフラグを持つCookieではないことを確認する方法がないため、サーバーはその値を取得します。これも、Cookieの同じ発信元ポリシーが緩いためです。

これに対するすべての解決策は HTTP Strict Transport Security を実装し、すべてのサブドメインを制御することです。サポートされているブラウザーでは、これにより、HSTSレコードの存続期間中(おそらく数年)にブラウザーによるプレーンなHTTP接続がまったく行われなくなり、Cookieが攻撃者によって設定されるのを防ぎます。 HSTSエントリは、ビルドに含めるためにブラウザーベンダーに送信することもできます。これは、HSTSレコードを設定するために、ユーザーが少なくとも一度はサイトにアクセスする必要がないことを意味します。 HSTS Preload を参照してください。

8
SilverlightFox