MS06-013 と Microsoft Internet Explorer アドレスバー偽装に関して

今月のWindowsUpdateにはMS06-013[緊急]:Internet Explorer 用の累積的なセキュリティ更新プログラムがあります。このセキュリティ更新プログラムには「アドレス バーの偽装の脆弱性 - CVE-2006-1192」への修正が含まれています。

しかし、この「CVE-2006-1192」は、つい最近になって各種情報が発表されたFlashとのロードのレースコンディションによる「アドレスバーの偽装の脆弱性」とは異なるようです。SecuniaによるInternet Explorer Window Loading Race Condition Address Bar Spoofingに割り当てられた CVE は、「CAN-2006-1626」です。また、「MS06-013」適用後も、Secuniaによるデモは有効でした。

また、当日記の2060130で触れた別の偽装方法も、今もって有効のようです。

いわゆるCSSXSS脆弱性と4月度のセキュリティ更新プログラムについて

WindowsUpdateの4月度のセキュリティ更新プログラムを適用することで、いわゆるCSSXSS脆弱性の穴がふさがっているかのようにみえます。一見朗報かと思ったのですが、副作用があるようです。この副作用があるおかげで、現時点で、IEは、Firefoxに比べて機能面で劣っていると考えても良いでしょう。

20060414追記

なお、この副作用を回避する方法が14日にわかりました。また、回避することでCSSXSS脆弱性が復活することもわかりました。いっけんCSSXSS脆弱性対策のようにみえた副作用ですが…

CVE-2005-4089( AKA CSSXSS )対策がMS06-013に含まれているとはMicrosoft社は公式発表していません。まだふさがっていないのだという認識のほうが安全です。

追記終わり

副作用は以下のような形で発生します。

サイトAの正当なコンテンツ管理者が自分のHTML等のコンテンツの修飾の為に、サイトBに保持されたスタイルシートを利用したとします。 この時に、期待通りスタイルは適用されます。

しかしながら、上の場合で、cssTextを使って、正当に読み込まれたスタイルシートの内容をアクセスしようとしても、出来なくなりました。従来出来ていたものです。

以上が副作用です。

Webコンテンツの製造や維持において困る場合がありえますから、Microsoft社としては、事前にアドバイザリーを出すべきでしょう。

本来であるならば、正当なスタイルシートの内容はcssTextにて読み出すことが可能であるべきです。HTMLファイル、JSファイル、その他の、非スタイルシートの内容がクロスドメインでcssTextで読まれれば困る、というのがCSSXSSの本質ですが、ミソ(スタイルシート)もクソ(非スタイルシート)も一緒にcssTextでのアクセスを禁止してしまうのはどうなのでしょうか。疑問です。

取り込んだスタイルシート記述の中で正当なスタイル宣言だけをフィルターして取り込み、cssTextでアクセス可能にすればよいのですから、それほど難しいとも思わないのですがね。CSSのValidationはそんなに困難ではないと思います。

…改善策として、media型が text/css であった場合には、クロスドメインでも、cssTextでハンドリング可能になっていれば良いですね。それなら、Webサイトコンテンツ提供側で、なんとか出来るかもしれませんから。今回のパッチでひょっとしたら既に実装されているかもしれませんが、アドバイザリーが出て、そのむね謳ってあればと願います。

クロスブラウズのことを考えると、cssTextってあまり使われていなくて、さして問題ではないという判断だったのかなぁ…

以上は、えむけいさんから頂いた、以下のHTMLソースでもって確かめました。

<style type="text/css">
@import url(http://【サイトB】/style.css);
</style>
<textarea rows=10 cols=80 id="a"></textarea>
<script language="jscript">
    document.getElementById('a').value=document.styleSheets(0).imports(0).cssText;
</script>

適切なstyle.cssをサイトBに用意します。そして上記を、サイトAとサイトBとにアップします。サイトA側のHTMLを開くとjavascriptでエラーが発生し、サイトB側のHTMLを開くとエラーにはなりません。

エラー発生箇所は、cssTextをハンドリングしている行です。

#なお、非常に興味深いお話を以前、えむけいさんから頂いています。x64 なWindowsXP では、もともとCSSXSS脆弱性はなかった。というものです。手元に x64 な環境がありませんので、確認は出来ませんが、丁度、今回のパッチでCSSXSS脆弱性がFixされた後の副作用つきの状況と、以前伺った、えむけいさんのお手元の x64 な環境で発生していた症状が酷似しています。CPUが違っただけでCSSXSS脆弱性が起きていたのだとすると、ちょっと不思議な気持ちがいたします。どういうプログラムソースだったんだろうと…

20060414追記:えむけいさんから御教示を頂きましたので、私の日記本文の一部をDELしました。えむけいさんからの御教示は以下の通りです。

なんかこのままだとずっと誤解されたままになりそうなので一応補足しておきます。OSはXP x64ですが、確認したのはWOW64で動く32bit版のIEです。したがってCPUの違いとかオブジェクトコードレベルの違いが原因であるとはまず考えられません。 どちらかというと、Windows XPWindows Server 2003の(ベースとしているソースコードの)違いだと思います。XP x64はXPと名前が付いていますが、コードベース的にはむしろWindows Server 2003に近いです。ってこれ一度書いたはずですが。』

追記終わり

20060412追記:ばけらさんのえび日記を拝見いたしました。

いやぁ私の勉強不足かつ検証不足がバレますね、まさかと思いました。FirefoxがあそこまでスタイルシートのValidationをしていたので当然クロスドメインスタイルシートをいかにして安全に持ち込めるのかを考えているのかと思い込んでいました。Validationは必要だという信仰がありますし、その信仰はまだあります。

本日のパッチによって、いわゆる CSSXSS の対策がなされたようです。同一ドメイン上の CSS の内容は読めますが、他ドメインCSS に対して cssText プロパティを参照しようとすると、「アクセスが拒否されました」と言われて失敗します。

これにより、他ドメインの任意のコンテンツにアクセスできてしまうといったことはなくなったはずです。端的に言うと、Firefox と同様になったということですね。

※ちなみに Firefox の場合は DOM2-style (www.w3.org) 準拠で、document.styleSheets[0].cssRules[0].cssText などとしてアクセスすることができます。これも同一ドメインでは取得できますが、クロスドメインでは取得できません。

知りませんでした。製作者サイドが汎用のスタイルシートを使えるのが当然だと思っていたのですが…現状のブラウザの実装状態を見ればDOM2-style準拠は納得できます。

追記終わり

20060414追記

クロスドメインな場所にある正当な内容のスタイルシートが、cssTextによって読みだせるケースがありました。本日記本項において触れていた副作用を回避する手段があるということになります。現在、このことがCSSXSS脆弱性に関連するかどうか調べています。【調べ終わりました】結局のところ、4月度のセキュリティ更新プログラムを適用してもCSSXSS脆弱性はFIXされていません。詳しくは20040414の日記で報告致します。

追記終わり

MS06-013には未発表の危険な脆弱性のFixが含まれているようだ

ざっとみなのですが。制限付きサイトゾーン、あるいはセキュリティーゾーンの設定が「高」のゾーンにおいてでさえ、リモートから任意のコードが実行可能な穴が、いくつかFixされているようですね。未発表のものでしょう。

例の特許でActiveX コントロールのワンクリック増加周辺のおはなしで、MS06-013の適用を待っちゃっているのは危険なのでしょうね、きっと。