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

すでに1年近く経っていますが、Microsoft Security Bulletin MS10-090 - Critical : Internet Explorer 用の累積的なセキュリティ更新プログラム (2416400) に含まれる「クロス ドメインの情報の漏えいの脆弱性」- CVE-2010-3348 について書いておきます。発見者は @okomekiさん。

ISO-2022-JPで作成されたWebページにおいて、HTML先頭から4096バイト目付近にエスケープシーケンスが置かれた場合、正しく文字集合を切り替えることができないというバグがありました。
例えば、

(1) : 0x1B 0x28 0x49 0x27 (ここが4096バイト目)0x1B ...
http://utf-8.jp/PoC/50221-1.html

という場合にはバイト列中の0x27は半角カタカナ(JIS X 0201片仮名用図形文字集合)として取り扱われXSSは発生しませんが、

(2) : 0x1B 0x28 0x49 (ここが4096バイト目)0x27 0x1B ...
http://utf-8.jp/PoC/50221-2.html

という場合にはバイト列中の0x27がASCII(またはJIS X 0201ラテン文字用図形文字集合かもしれないけれどどちらなのかは未確認)として取り扱われるためXSSが発生することがありました。

攻撃者は、うまく文字数を調整することで、ISO-2022-JPで書かれたWebページにおいてXSSを発生させることが可能でした。