MS11-099 Internet Explorer 用の累積的なセキュリティ更新プログラム で修正されたXSSの話

マイクロソフト セキュリティ情報 MS11-099 - 重要 : Internet Explorer 用の累積的なセキュリティ更新プログラム (2618444) で修正された「Content-Disposition の情報漏えいの脆弱性 - CVE-2011-3404」について書いておきます。

Content-Disposition: attachment をHTTPレスポンスヘッダに指定すると、一般的なブラウザではコンテンツをブラウザ内でいきなり開くのではなく、ローカルディスクへダウンロードすることになります。ところが、MS11-099にて修正された脆弱性を使用すると、罠ページを経由することで Content-Disposition: attachment のついたhtmlを強制的にInternet Explorer内で開くことができたため、例えば Wiki や Web メールの添付ファイルなどを経由することでXSSを発生させることができました。

攻撃者は以下のような罠ページを作って、iframe にて Content-Disposition: attachment つきのリソースを指定しておきます。

<iframe src="http://target.example.com/attachment.cgi" id="ifr"></iframe>
<script>
</script>
function f2(){
    document.getElementById("ifr").history.back();
}

function f1(){
    document.getElementById("ifr").location = "trap2.html";
}

setTimeout( 'f1()', 1000 );

最初は Content-Disposition 付きのコンテンツが iframe の src に指定されており、IEでこの罠ページを開いたときにはダウンロード指令つきのコンテンツをブロックした旨が情報バーにて表示されます。

ただし、1秒後にはsetTimeout の結果 iframe の src は 攻撃者が作成した trap2.html へと変わります。trap2.html の内容は以下の1行です。

<script>history.back();</script>

この結果、iframe の src は再び Content-Disposition つきのコンテンツとなりますが、このとき Content-Disposition は無視され、iframe 内にてコンテンツがいきなり開かれてしまい、攻撃者はXSSを成功させることができます。

Content-Disposition の情報漏えいの脆弱性 - CVE-2011-3404」の「Content-Disposition の情報漏えいの脆弱性」のよく寄せられる質問 - CVE-2011-3404 には


このセキュリティ情報の公開時に、この脆弱性は一般に知られていましたか?
いいえ。マイクロソフトは協調的な脆弱性の公開を通して、この脆弱性に関する情報を受けました。
とあるのですが、2007年夏ごろすでに詳細がWeb上に公開されていました。そのため、Microsoftに対して本件を脆弱性として把握しているかの連絡をとったのですが、修正までに4年を要したようです。
本件が修正前に公知であったことを確認できるリソースとしては、「ウェブアプリケーションセキュリティ」(書籍,いわゆる「金床本」)や「BK通信 - ブラウザのバッドノウハウ コンテンツ編」などがあります。とくに金床本では上記と同様のPoCつきで丁寧に解説されています。