Google Docsスプレッドシートの最初のセルにHTMLを書いてCSVで保存すると…

Google Docsには今のところワードプロセッサ、スプレッドシート、プレゼンテーションの3つのアプリケーションが用意されているわけだが、うちスプレッドシートアプリケーションにIEに関連した興味深い脆弱性があることが発覚した。これはセキュリティエンジニアのBilly Rios氏によって発見されたもの。すでに同脆弱性は修正されているが、Gmailのクロスサイトリクエスト偽装のときのように注意しておくべき内容だ。

この脆弱性(クロスサイトスクリプティング)を利用された場合、攻撃者はGoogleが提供しているGmailやGoogle Code、Google Docsのほかのサービスなど許可されていないサービスへのアクセスが原理的に可能になる。これはIEがContent-Typesの指定されたコンテンツの解釈における微妙な違いをついたものだ。

Google DocsスプレッドシートのデータをCSV形式で保存(ダウンロード)する場合、Content-Typeが"text/plain"に設定される。この設定によってユーザの使っているWebブラウザは保存されるデータを通常のテキストファイルとして扱うようになる。しかし、CSVの最初にHTMLタグが含まれている場合、IEはこれをテキストデータではなくHTMLデータとして処理すべきコンテンツであると判断して処理を実施する。

テキストデータ(CSVデータ)として保存したものがHTMLとしても処理可能ということは、原理的に言えばデータを保存する段階で任意のJavaScriptコードがGoogle Docsのサイトで実行可能ということだ。脆弱性の内容を理解していないユーザが送られてきたデータをGoogle Docsで開いてCSVデータとして保存する、またはそれと同等のことをさせるというのが現実的な内容かどうかは検討する必要があるが、結果としてユーザのセッションクッキーを取得できる脆弱性があったということになる。Googleはすでに同脆弱性に対処しており、また同脆弱性による被害報告はないとしている。

Google Docsの想定が甘かったのかIEの推論がお節介だったのかはわからないが、Webアプリケーションには常にこういった脆弱性が発生する可能性があるということは常に知っておいた方がいい。