最近、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には本当にこの脆弱性がありますか?これを修正するためにフラッシュにパッチが適用されていますか?問題を緩和する要素はありますか?この種の攻撃を防ぐためのサーバー側の防御策はありますか?
つまり、ユーザーがアップロードしたコンテンツを提供する際の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には同様の問題があります。
Content-typeはセキュリティを提供するためのものではありません。これは、他の情報がない場合にWebページをどのように解釈すべきかについてのブラウザへの提案にすぎません。
Webページ(Flashオブジェクトの一部など)が、好きなコンテンツタイプで装飾されたページコンテンツをロードし、それを別のものとして解釈するのを妨げるものは何もありません。これは、フラッシュオブジェクト、またはXmlHttpRequestなどのシステムを介して発生する可能性があります。 (XHRクエリを実行して結果をeval
するか、結果をページに盲目的に挿入すると、トーストと同じになります)
言い換えると、コンテンツタイプは、コンテンツの一部を提供するための基本的な動作をブラウザに指示します。 JavaScript、Flashなどのクライアントコードが何か別のことをするように言っている場合、その別の何かが起こります。
X-Content-Type-Options:nosniffはあなたの友達かもしれません。これは、ブラウザにコンテンツタイプを推測せずに、サーバーの発言に忠実であるように指示します。