HTTPヘッダインジェクションを使用したXSSの可能性について考える

恐らく、現時点でMIcrosoftがサポートを継続しているIEでは不可能です

HTMLの属性値として埋め込まれるスクリプト(onXXXX 系のイベントハンドリング用の属性値)は、metaもしくはHTTPヘッダの Content-Script-Type で記述言語を指定する(デフォルトはJavaScript)ということになっています。

そこで、HTTPヘッダインジェクションでページの作者の意図したものと違う記述言語を指定した Content-Script-Type 指定を注入してやると、

のような状態に陥れることが出来るかもしれません。

そこで2つの言語のエンジンの実装の相違を突くと、
任意のスクリプトを実行させることが可能になるような感じがします。

実際のところ

  • レスポンス自体を分割して2つめのレスポンスでやりたい放題
  • Content-typeヘッダのcharsetをUTF-7やUS-ASCIIに指定したものを注入して文字化けによるXSSを狙う

といった攻撃のほうが簡単なのでわざわざこんな手の込んだ攻撃をする人は多分いないでしょう。

試してみた

  • 手元のIE8はContent-Script-Typeを無視してJavaScriptとして実行しているようだ
  • Windows2000上のIE6SP1もContent-Script-Type無視っぽい

重複削除

手違いで更新にするべきところを新規に公開しまったので古い方(12/18分)は削除しました