続報:IE:新手法CSSXSS、Google Desktopの情報が盗まれる恐れ…というかGoogleばかりでないです、ヤバイのは、こりゃ【さらに】参りましたね。

2006/02/02追記

以前書いた下記にてJavaScript切っておけば大丈夫では?と希望的観測を書きましたが、それだけでは危険だという予測もあります。ActiveX control を併せてオフにするべきです。詳しくは、http://d.hatena.ne.jp/hoshikuzu/20051204/ で。

追記終わり

12/9追記:【重要】です。cleemyさんによる検証で凄いことがわかりました。UNICODE系列とANSI系列とのアレにちょい似ていたりする感想を持ちました。引用させて頂きます。

cleemy
多分 { がキモっぽいですね。{ が全く無いテキストは読み出せませんでした。 あと、少なくともローカルにおいたHTMLでは、@import したローカルのファイルが cssTextで読み出せてしまうので、圧縮したzipファイルとしてHTMLを配布するような場合とかだと、ローカルの任意のファイルを抜き取る事が可能ですね。抜きたいファイルのファイル名が分かってるのと、ファイルの中に { がある必要がありますが。 あとHTMLメールとか、やばそうです。
ごめんなさい、訂正します。攻撃用HTMLがUTF-8で記述されてて @import先がShift_JISの場合は、 { が全く無いテキストでも、「ボ」や「マ」などの 7B, 7D を含む文字があれば読み出せてしまいました。Shift_JISでページを吐くようなサイトはさらにヤバそうです
t_trace
cleemyさん、大変ありがとうございます。しかしよく気づきますね。感服します。 CMSサニタイズルール変更で回避しようと思ってたのに……orz

引用元は、Taiyo@hatenaさんのところです。Underconstruction by Taiyo@hatena (2005-12-04)

つうかIE駄目じゃね?守る方法はサーバ側にはほとんどないし。JavaScriptの恩恵を受けたいWindowsユーザはIEを使ってはいけないことが決定的です。

Taiyo@hatenaさん(=id:t_traceさん)には、原報告者のMATAN GILLON氏のアドバイザリーを(御家族との時間を削りながら)和訳して下さる予定があるとか。期待しております。今ふと思いましたがWinMEとかレガシーなOS上のIEは駄目なんじゃね?Microsoft社からサポートされないっぽいし。なお、基本的にウイルス対策ソフトは絶対に無力です。文脈において不正なCSSXSSと正しいimportを区別することが異様に難しいからです。いくらでも偽装する方法を思いつきそうです(ある意味私の恥かも)。


addimportや@importでなくてもlink要素で出来るじゃん…とほほ。MS02-023 で対策されたはずの GM#004-IE (注:スタイルシート以外でも読めてたのだった)の系だったのね、今回のCSSXSSは。なるほど、前回のMS02-023ではリモートからローカルにだけ手出し出来ないようにしていたのかも。うーん。

<!-- saved from url=(0014)about:internet -->
<link id="oFile" rel="stylesheet" href="【TARGETURL】" disabled>
<script language="jscript">
onload=function () {
    alert(document.styleSheets.oFile.cssText || "Could not extract any text from file.");
}
</script> 

もう一度GM#004-IEを振り返ってみると、以下の性質があったわけです。

  1. HTMLファイルでもってリモートからローカル、リモートからリモート、ローカルからローカル、のスタイルシートを読み込むことが出来る
  2. 本物のスタイルシートでなくとも読み込むことが出来、JavaScriptでその内容をハンドリング可能

対策としての MS02-023 は、リモートからローカルのスタイルシートの読み込みを禁止した、と考えてよいと思われます。もうひとつ対策したかも知れないのですが、読み込んだ内容がある程度スタイルシートに似ていることを要求したかと思われます。({を含むなど。)

従ってリモートからリモート、ローカルからローカルのスタイルシートの読み込みは禁止されませんでした。禁止されると大変困りますが。また、本物のスタイルシートでなくとも読み込むことが出来るという性質は、残ったままだったのです。Validな部分だけを解釈して取り込めれば良かったのですがねえ、なにかカスケードな部分の解釈の実装方法でソース上での記述の順番がどうしても必要だったのでしょうか?わかりません。少なくとも、styleSheetsのcssTextでもって、UNKNOWN{情報漏えいになる宣言}の部分は不可視であるべきでしょう。これならばパッチの実現は簡単だと思います。といいますか、UNKNOWN{情報漏えいになる宣言}は絶対にレンダリング時点で不要ですので取り除いても安心して良いと思います。こういうパッチなら早く作れそうな気が致しますがいかがでしょうか。そもそもGM#004-IEの時に、そういうパッチが出れば良かったのですけれどねえ…

ありがとうございました。コメント欄で児童小銃のrna様に教えていただきましたので上記はdelしています。う〜ん。


12/12追記。例のはまちちゃん作者が公然とHATENAユーザのIDを抜いてはまちちゃんサーバのログに記録するという公開デモをしています。デモの性質が悪性にならないという保証はありませんのでリンクはいたしません。ていうかこの事実はソーシャルブックマークで発見しました。う〜ん。バタンキュー(死語)

はてなユーザに限らず、あなただけが権限を持つようなないしょのページを持っているような人、あるいはあなた自身のみがあなたのIDでもって情報を発信するようなをページをアクセスする人は、JavaScriptを作動可能な設定のIEで、信頼できないページにアクセスしないという自衛策を行うことを強くお勧めいたします。ログイン中にやたらなページをアクセスしてはいけません。ほんの一例ですがWebメールでそんなことをすればどうなるかについては容易に想像できるというものです。オンラインゲームとかでもね。日記なりサイトなりの管理者がアクセスログを見たりとか…あうあうあう