web-dev-qa-db-ja.com

FlashはContent-Typeヘッダーを無視し、XSSを許可しますか?

最近、Flashプラグインが特定の状況でContent-Typeヘッダーを無視することを読みました。特に、FlashにURLを指定すると、FlashプラグインはそのURLのコンテンツを問題なくフェッチし、SWFファイルとして受信したものをすべてロードします。コンテンツのロード元のサイトの権限を使用して、たとえ応答があったとしてもContent-Type: text/plainヘッダー(またはその他のContent-Typeを使用)。 Content-Typeヘッダーは、これがSWFファイルではないことを示している可能性があり、Flashは引き続きこれをFlashファイルとしてロードします。ロードされるコンテンツは、有効なSWFファイルでなくてもかまいません。有効なSWFファイルで開始する必要があります。Flashプラグインは、後続の余分な情報を無視します。

この主張の出典: http://50.56.33.56/blog/?p=242

これが本当なら、これは良くありません。これは、攻撃者がページの開始を制御できるページがある場合、私のサイトはXSSに対して脆弱であることを意味します。つまり、Content-Typeヘッダーをどこにでも正しく設定しても、サイトが脆弱になる可能性があります。つまり、ユーザーがアップロードしたコンテンツを提供する際のXSSに対する標準的な防御では不十分です。

たとえば、ユーザーが任意のテキストファイルをアップロードして、それを要求するすべてのユーザーに提供できるようにする場合、標準的なアプローチは、応答にContent-Type: text/plainを設定することです。これで安全であると広く信じられています。私がこの脆弱性を正しく理解している場合、この習慣は安全ではありません。悪意のあるユーザーがSWFファイルのコンテンツを含む悪意のあるテキストファイルをアップロードし、Flashプラグインによって実行されるようにして、XSSの脆弱性と同等の道徳的なものを作成することができます。サイトで。

これは私に少しゴブスマックを持っています。本当ですか? Flashには本当にこの脆弱性がありますか?これを修正するためにフラッシュにパッチが適用されていますか?問題を緩和する要素はありますか?この種の攻撃を防ぐためのサーバー側の防御策はありますか?

4
D.W.

つまり、ユーザーがアップロードしたコンテンツを提供する際のXSSに対する標準的な防御では不十分です。

ユーザーがアップロードしたコンテンツを提供する際のXSSに対する標準的な防御策は、異なるアドレスから提供することです(理想的には完全に異なるドメインとIPアドレスですが、サブドメインは少なくともsome攻撃を阻止します)。つまり、XSSの犠牲​​になることを許可しますが、そのような妥協がメインサイトに害を与えないように、XSSを分離します。

たとえば、ユーザーが任意のテキストファイルをアップロードして、要求した人にそれを提供できるようにする場合、標準的なアプローチは、応答にContent-Type:text/plainを設定することです。これは安全で十分であると広く信じられています

完全に偽りである多くのことが広く信じられています。

_Content-Type_/_Content-Disposition_は、(ブラウザとプラグインの両方から)タイプスニッフィングに直面しても、十分な防御にはなりませんでした。 _text/plain_は最悪の場合です。Apacheにデフォルトで_Content-Type_として(不可避的に)含まれていたため、ほとんどのブラウザーは、ファイルの先頭からマジックワードをスニッフィングすることを優先して、その型を完全に示します。

これを修正するためにフラッシュにパッチが適用されていますか?

いいえ。ただし、_crossdomain.xml_構文が他のファイルタイプの内部に埋め込まれ、getPolicy()を介して読み込まれる、やや緩和された悪いものがあります。

問題を緩和する要素はありますか?

Same Origin Policyの独自のバリアントの下でFlashから許可される種類の対話は、必ずしもJavaScript Originへの完全なスクリプトを許可するわけではありません。しかし、ええ、それはかなり悪いです。

JavaとSilverlightには同様の問題があります。

3
bobince

Content-typeはセキュリティを提供するためのものではありません。これは、他の情報がない場合にWebページをどのように解釈すべきかについてのブラウザへの提案にすぎません。

Webページ(Flashオブジェクトの一部など)が、好きなコンテンツタイプで装飾されたページコンテンツをロードし、それを別のものとして解釈するのを妨げるものは何もありません。これは、フラッシュオブジェクト、またはXmlHttpRequestなどのシステムを介して発生する可能性があります。 (XHRクエリを実行して結果をevalするか、結果をページに盲目的に挿入すると、トーストと同じになります)

言い換えると、コンテンツタイプは、コンテンツの一部を提供するための基本的な動作をブラウザに指示します。 JavaScript、Flashなどのクライアントコードが何か別のことをするように言っている場合、その別の何かが起こります。

0
Billy ONeal

X-Content-Type-Options:nosniffはあなたの友達かもしれません。これは、ブラウザにコンテンツタイプを推測せずに、サーバーの発言に忠実であるように指示します。

0
Erlend