烏合の衆寄り集まりて見れども見えず
CSRF(クロスサイトリクエストフォージェリ)というのが話題になっている。
http://d.hatena.ne.jp/hoshikuzu/20050130#D20050130CSRF
実はXSS(クロスサイトスクリプティング脆弱性)のExploitとして行われることの実質的内容は、大抵これにつきるので特に目新しい概念ではない。が、XSSをいくら説明しても「そんな面倒なことをする奴はいない」だの、「そんな間抜けな罠にひっかかる奴はいない」だの言われ続け、ようやく「フィッシング」という言葉が出てきたとたん一般に知られるようになったのと同様、目新しい言葉でもって一般人の注意を惹き、わかった気にさせるのは無意味なことではないだろう。
ところで、上記エントリで紹介されている、「プログラミング上のCSRF対策」の一覧を見ていて、いや〜な予感がしてきたのである。
そう、mixiは、激烈にやばい雰囲気を放っている。
誰もが知っていることだろうが、このサイトはCookieでセッション管理を行っている。POSTの代わりにGETでアクセスできてしまう処理も多い。CSRFにはもってこいだ。
そして、XSSはすぐに見つかった。
だが、感じたやばさはXSSだのCSRFだのといった単発ものの生易しいものではない。
mixiのような閉じたサービスにおいては、XSSとCSRFの複合効果が悪用されると、ウイルス(正確にはワームと言うべきだろう)の媒介に最適なのだ。XSSを利用したウイルスの可能性は以前から指摘されているし、私もまた言及しているところであるが、意外に知られていない。
こうした閉じたサービスの中でXSS媒介型のワームが流行ると恐らくひとたまりもなく、あっというまにサービス利用者に広がり、システムは壊滅状態になる。誰かがmixi内でクリックするたびに伝染させることも可能だと言えば、その感染力の強さがわかるだろう。
ところで一般のXSSにおいて、悪意あるコードはどこにいるかというと、多くの場合URLの中にいる。URLの中だけに悪意あるコードが収まっている場合には、ウイルスコードとして伝染させるのは難しいと思う(そのような限定された状況でウイルスとして作動させる具体的手法は、私にはわからない)。
悪意あるコードをURL以外のところに蓄積させるとウイルスとして作動させやすくなるのだが、その蓄積場所として最も効果的な場所は、Cookieと掲示板(のような投稿内容が保存されて固定化され、表示されるもの)だろうと思う。
mixiには、悪意あるコードを蓄積可能な場所が実際にあるのだろうか?恐怖におののきながら、簡単にテストしてみたが、幸い私が念頭においている最悪のパターンのものは見つけられなかった。だが、かすっている場所はたくさんあった。
誰の入れ知恵だか知らないが、mixiにはXSS対策が結構施してある。そしてこの対策を実装した人が、XSSを完全につぶすべくかなり努力しただろうと思われる跡が伺える。
だが、残念なことにそのXSS対策は、その基本方針が間違っている。対策方法を教えた奴が無知だったのだ。XSS対策は、ファイヤーウォールの設定と同じで、まず全部の表示をブロックしなければいけない。そして、許可するものを羅列しておき、これにマッチするものだけを通すべきなのだ。mixiは、駄目対策法の典型である「許可しないものリスト」を用いて対策している部分があった。その方法では、必ず対策漏れがでてきてしまうのなのだ。
私は何もペネトレーションテストの技術者ではない。だからXSS対策漏れを完全に見つけられるような技量はとてもない。私のようなへっぽこですら、mixiにこれほどすれすれともいうべき危険なXSSが見つかるのであるから、高度な技術を持った人ならば、おそらく「悪意あるコード」の蓄積場所を見つけてしまうのではないかと推測している。
ところで、mixiにはWASフォーラムmixi支部とかいうのがあるらしい。WASとは「WEBサイトアプリケーションセキュリティ」なのだそうだ。メンバーは132人もいる。管理人は「あの」okdt氏だ。だが、いくら寄り集まったところで、彼らの目は節穴だということなのだ。言わせてもらえば、哀れである。
事故が起こるまで、mixiは直らないだろう。私は報告する気はない。