Hatena::ブログ(Diary)

hoshikuzu | star_dust の書斎 このページをアンテナに追加 RSSフィード Twitter

hoshikuzu|star_dustの日記について

書く内容の方針とかはフラフラしているのです。あまり考えていないかも知れません。面白いなぁと思うこと、大事なことだなぁと思うことを書いています。あんまり悲しいことは書かない主義。

 | 

2006-04-12 このエントリーを含むブックマーク このエントリーのブックマークコメント

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 XPとWindows 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 などとしてアクセスすることができます。これも同一ドメインでは取得できますが、クロスドメインでは取得できません。

CSSXSS対策された模様::えび日記

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

追記終わり

20060414追記

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

追記終わり

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

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

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

comikencomiken 2006/04/12 17:25 6月度、じゃないとおもいますです。

hoshikuzuhoshikuzu 2006/04/12 18:21 _O_

ありがとうございました>comikenさん

cleemycleemy 2006/04/13 16:21 いわゆるCSSXSSですが、MSは直したとは言ってないみたいですし「ふさがった」とするのはまだ早いかもです。
とりあえず、Content-Disposition:attachment;の「開く」問題 (via d:id:hoshikuzu:20060410)との連携で、若干こそばゆい例を発見しました。Win2KのIE6 SP1(6.0.2800.1106)の場合、「開く」で開いたhtmlはキャッシュディレクトリにて開かれるようなので他サイトの内容がindex[1].htmlとかで読み出せる場合がありました。あと Firefox→IEで開かせる場合で、これだとマイコンピュータゾーンで開かれるのでローカルの全ファイルに「リーチ」。(いやこの場合そもそもCSSXSS以外も?)

hoshikuzuhoshikuzu 2006/04/13 16:33 cleemyさん、コメントをありがとうございます。
CVE-2005-4089は、MS06-013の解説をいくら読んでも修正があたっているとは書いてありませんね、確かに。
Content-Disposition:attachment;の「開く」問題は、以外と水面下でもっともっといろんなことがあるのかもしれません。よくわかりませんが…

えむけいえむけい 2006/04/13 22:07 MSが直したと言ってもちょっとやり方を変えたらあっさり貫通したなんてことも、累積パッチの説明のどこにも書かれていない修正をこっそりやったことも何度もありましたし、公式に宣言することにどれだけ意味があるのか疑問ですけどね。MS05-054のときも、実はKill Bitが効かない不具合を直していましたとか後から言い出してましたね。

hoshikuzuhoshikuzu 2006/04/13 22:20 あ・・。そうですね、えむけいさん。安全側に倒せばまだ貫通するかもしれないとMicrosoftさんが思っているかもしれませんし、別のクロスドメインの脆弱性をふさいだ影響でCSSXSSも一見ふさがっているのかもしれません。
思えば…MS02-023…あの時点が鍵だったのでしょう。x64でこうなっていたのですから…CPUが違うだけでこんなに差が出るのかと悩んでおりました。x64 の件、Microsoftさんが気がついていれば、その他のXPsp2等で、もっとはやくに(少なくとも)CSSXSSは、MS02-023を強化する形で提供できたと思うのです。仮にソースレベルでなかなかわからなかったとするならば…CSSXSS脆弱性は実はバッファオーバーフローを内在していた可能性もあったかもしれませんが…CPU面での差異って、恐らく機械語objectレベルで抜けがあったとしか考えられませんし。よっぽど{{{…{{{{{とか入れてみようかと思いましたが検証する能力がないのでやめました。ぶお〜。

hoshikuzuhoshikuzu 2006/04/13 22:23 もっと勉強したいです…私のようなド素人には無理かな(苦笑)

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

hoshikuzuhoshikuzu 2006/04/14 10:28 m(_ _)m 日記本文で目立つように訂正させていただきました。ありがとうございます>えむけいさん。

 | 
最近のコメント