水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > CSRFとCSSXSSは分けて議論したい

CSRFとCSSXSSは分けて議論したい

2006年4月3日(月曜日)

CSRFとCSSXSSは分けて議論したい

スラッシュドットに「正しいCSRF対策、してますか? (slashdot.jp)」というトピックが立っているようですが、議論がかなり混乱しているように思います。「hiddenにセッションIDをセットする CSRF 対策は、CSSXSS があるので危険」という話なのですが、CSRF といわゆる CSSXSS は別の問題ですので、分けて議論したいですね。

簡単に言うと、

ということになります。

ということです。注意したいのは、いわゆる CSSXSS の問題は CSRF に限った話ではないということです。秘密情報は何であれ、CSSXSS 対策をする必要がある (たとえば、GET で得られる HTML の中に出力しないようにする) という話になります。「セッションID」や「CSRF対策のためのワンタイムトークン」などはもちろん、個人情報の編集画面であるとか、Webメールの画面であるとか、そういった画面もすべて問題になるはずです。CSRF 問題のないサイトだから CSSXSS は関係なさそうだ、と思ってしまったりしないように気をつけたいところです。

※ただ、実際には CSSXSS によって取得できるものは限定されていて、何でも取れるわけではありません。基本的には MSIE が CSS の宣言ブロックの中身であるとみなしたものだけが取れるので、たとえば Webメールの画面の本文全体を取る、といったことができるかというと難しいところです。ただ、攻撃者が {} を挿入することができる余地、多バイト文字の一部が {} に解釈される余地などを考えると、あまり安心できなかったりもします。

個人的には、いわゆる CSSXSS は CSRF とは別の問題としてきちんと議論して欲しいし、もっとクローズアップされても良いと思います。まあ、今回の話で十分に注目されていると思うので、それはそれで良いような気もしますけれど。

ちなみに、CSSXSS に対しては利用者側でできる対策があります。それは、

ということです。現在知られている CSSXSS の攻撃手法では、攻撃者のサイト上でスクリプトを介して cssText プロパティの値にアクセスすることになります。ですから、スクリプトを無効にしておけば CSSXSS の攻撃は受けません。もちろん、MSIE 必須かつスクリプト必須のサイトは利用できませんので、それについてはパッチ待ちとなります (まあ、そんなサイトそうそうありませんが)。

関連する話題: セキュリティ / CSRF / CSSXSS

最近の日記

関わった本など