RubyOnRailsのXSS脆弱性がTwitterとBasecampとぼくの魂を殺した
by tcnikc on 2009年9月4日

you're gonna be ok

わずか3日前にWebのセキュリティの絶望的な状況、中でもとくにクロスサイトスクリプティング(XSS)攻撃を使う新しいベクターについて書いたばかりだが、今日(米国時間9/3)は開発フレームワークRubyOnRailsにXSSに対する脆弱性が見つかったというニュースが入ってきた。TwitterBasecampのような、このフレームワークで構築されているアプリケーションも、当然XSSにやられやすいことになる。

その脆弱性を見つけたのはBrian Masterbrookだ。彼はTwitterでいくつかのUnicode文字を調べてみて脆弱性を発見し、おなじことをBasecampでもやってみてやはり脆弱であることを確認したので、これはRubyOnRailsの問題に間違いないと考えた。彼がやったことの詳細は、彼のサイトのこの優れた記事に書かれている。今実際にどこかでRubyOnRailsを使っている人は、すぐに停止して、この記事と、Railsのデベロッパからのセキュリティ警告を読み、サーバをアップデートしてほしい(パッチはセキュリティ警告に含まれていて、’today or tomorrow’のリリースブランチにある)。

この話にはいくつかの柱がある。最初の柱は、Brianがたまたまいい人で良かったねということ。彼は脆弱性を見つけただけでなく、関係者たちに知らせ、対策をとってもらうという努力を払った。自分でやってみれば、それがものすごくたいへんな作業であることがすぐに分かるだろう。

第二の柱は、Basecampの対応が鈍かったこと。ぼくはBasecampのアカウントを2つ持っていてTechcrunchでの仕事に使っているが、もうやめよう。重大なセキュリティ問題に対する彼らの態度は、ユーザの信頼を一挙に失わせるものだ。ぼくは個人データをBasecampのサーバに置いているから、なおさらやばい(彼らの対応ぶりの詳細はBrianの記事に書かれている)。Twitterはすぐに腰を上げたようだから不満はないが、ご存じのように彼らのセキュリティ履歴はあまりよろしくない〔たとえばこの記事〕。Brianがこの問題を見つけたのはほぼ1か月前だが、今日まで彼はどうやらこの2社とのコミュニケーションに大量の時間を消費していたようだ。

第三の柱は、他人のあやまちから学べ。その第一点は、アプリケーションのベンダは日頃からきちんとした仕事の習慣をつけておくこと。それは、Brianのような人が親切に脆弱性を指摘してくれたとき、“そんなメール見てないよー”で丸一日浪費しないため(Appleさん聞いてるかな、次はあんたのことを書くからね)。‘きちんとした仕事’とは、セキュリティ問題についてコンタクトするための専用のページを作っておくこと、PGPキーを使うこと(サイトの脆弱性が世の中全体に知れ渡るのはまずい)、セキュリティ問題が発見されたときのポリシーを明文化しておくことだ。“それはうちの責任ではありません”は、ポリシーではないよ。

他人のあやまちから学べの第二点は、デベロッパが何を学ぶかということ。RubyOnRailsの連中が送ってきたパッチのコードには必ず、’verify’(検証せよ)という言葉があるはず。問題の本質が、それだ。ほとんどすべてのセキュリティ問題が、それに行き着く。ユーザデータを頭から信じてはいけない。自分のアプリケーションが受け取るデータについて、検証を伴わない想定(〜〜であるはずだ、まあ〜〜だろう)をしてはいけない。ブラックリスト(いけないもののリスト)を使っているアプリケーションが圧倒的に多い。これとこれをチェックせよ、フィルタせよ、ブロックせよ、フィルタせよ、フィルタせよ…。しかし、それよりもっと良いやり方は、どこからやって来るものでも、必ずおかしなものがやって来る、と最初から決めつけることだ。そして、アプリケーションが正しく扱えるもの、期待に合致しているものだけを、入れてあげるのだ。アプリケーションがすべて英語なのに、あなたがとっくに名前をど忘れしたアフリカの部族しか使わないような奇妙なUnicode文字を見つけたら、それはたぶん誰かがあなたを陥れようとしているシルシだ。ブラックリストではなく、ホワイトリスト(よいもののリスト)を使うこと。

今度の事件で、こんなことにも気づいた。RubyOnRailsのセキュリティ警告は、この脆弱性の原因について次のように述べている:

“不正なUnicode文字列を受け付けないか、積極的に掃除するデータベースが多いため。”

えっ、今なんて言ったの? でーたべえすぅ? 今度ぼくがデータベースサーバを選ぶときは、すべてのユーザデータをフィルタしてくれるのを選ぶよう、警告してね(ここらはすべて皮肉だけど、読者がどこかのCIOなら、OracleにXSS検査モジュールを電話で注文して、すぐに電話を切ってみよう…何時間後にどんな返事が返ってくるかな)。責任転嫁は簡単にできる。でもRubyOnRailsの連中のそれは、Microsoft IIS 4.0のチームが、自分たちの製品のバッファオーバフローはすべてDennis Ritchie〔C言語の作者〕のせいだと言ってるようなものだ。

というわけでわれわれは、セキュリティに関しては退化しつつある。今年はもう2009年だが、ベンダはまともに対応しようとしないし、責任逃ればかりしている。ところで今、RubyOnRailsのダウンロードは、ロシアなどからが急激に増えている。その大量の新規ユーザたちは、自分のアプリケーションをこれから作るのはなく、あなたのアプリケーションをこれから乗っ取るのだ。

[原文へ]

(翻訳:iwatani(a.k.a. hiwa))