何人かはこの自己完結型XSSと呼ばれる攻撃に精通しているかもしれません。私は最近それについて偶然見つけました this それについての記事。では、現在のDOM要素にアクセスできない場合でも、この種の攻撃はどれほど深刻なのでしょうか。これを野生で見た人はいますか?
これはモバイルブラウザにも影響しますか?
別の便利な link 。
自己完結型のXSSは、XSS自体と同じくらい悪いものです。これは、ペイロードを提供する方法の1つにすぎません。あなたの質問のリンクは2つの異なるベクトルを説明しています:
<iframe>
_とsrc
of data:text/html,<html><script>alert(/xss/)</script></html>
を追加しますが、XSSのデータURLを使用する方法は他にもたくさんあります。 HTML5セキュリティチートシート で_data:
_を検索すると、それらの一部を確認できます。野生で使用されていますか?はい、たとえば Piwik XSS脆弱性 を悪用するために使用しました
with(location)with(hash)eval(substring(1))
ですが、類似したベクトルがたくさんあります。つまり、要約すると、自己完結型のXSSは、別のXSSタイプ(保管されたXSSやDOMベースのXSSのような)ではなく、ペイロードがどのように見えるかの単なる方法です。 XSS自体よりも危険だとは言えません。
これは実際には古い問題です。 data
URIを使用して、任意のメディアタイプをエンコードできます。単一のマークアップファイルに画像を埋め込むために使用するのはごく一般的なことです。
<img src="data:image/png;base64,ABCdefghIjKlmNoPqrSTuvwxyZ01d" />
これが危険な理由は、どのXSS攻撃でも攻撃者がdata
URIを埋め込むことができる可能性があるためです。ユーザーがダウンロードした場合、ユーザーはあらゆる種類のファイルにアクセスしている可能性があります。さらに悪いことに、これは、ユーザーが信頼しているサイトから、ブラウザーまたは基になるレンダリングコンポーネントの他の脆弱性を悪用できるデータを埋め込む方法です。
たとえば、ボブのクレイジーディスカウントスプーンに、画像のsrc
を操作できるXSS攻撃があったとします。
http://bobscrazydiscountspoons.com/foo/bar.php?xss=data:image/png;base64,ABCdefghIjKlmNoPqrSTuvwxyZ01d
ユーザーは、ブラウザのPNGレンダラーの脆弱性を悪用する厄介なペイロードを取得します。希望するクレイジーなディスカウントスプーンではありません。
もちろん、これは画像に限定されません。オブジェクトのソースまたはリンクに挿入できる場所ならどこでも使用できます。この種のデータを完全なHTMLインジェクション攻撃に挿入できることについても同様です。
では、現在のDOM要素にアクセスできない場合でも、この種の攻撃はどれほど深刻なのでしょうか。
リンクされた記事のやや限定された例よりも悪いです:FirefoxとOperaでは、data:
URIdoは同じセキュリティコンテキストで動作しますそれらを含むドキュメントであり、ドメイン内のDOM要素にcanでアクセスできます。これは、Chrome/Safari、またはIE9(意図的にdata:
URIを部分的にのみサポートしている)では発生しません。
HTMLドキュメントを含めることができる場合、これは従来のXSSとまったく同じリスクをもたらします。これは主にフレームとリンクですが、他の攻撃も可能です(*)。
例: http://jsbin.com/ukoqot/2/ -リンクとiframeを作成し、入力したHTMLドキュメントをdata:URLの両方に挿入します。リンクされた/フレーム化されたドキュメント内のコードは、jsbin.comのセキュリティコンテキストを取得し、jsbinインデックスページのソースコードを警告できるようにします。
したがって、data:
URIはjavascript:
URIと同じくらい危険であると見なし、WebアプリケーションがURIの送信を許可しているすべての場所でそれらを禁止する必要があります。 (実際には、http
/https
などの限られた選択に固執するために、既知の適切なURIスキームをホワイトリストに登録するのが最善です。)
(*:例:攻撃者が送信したdata:text/html...
URIを<img src>
に挿入すると、画像は機能しません。ただし、ユーザーが右クリックビュー画像にだまされる可能性がある場合、 dリソースをHTMLとしてロードし、XSSを生成します。