やはりネットサーフィンをしていたらたまたまGoogleのサイトにXSSの脆弱性を見つけたのはまちがっている


Hello everyone. How are you doing?
From now on, You can change language setting when you click the English link.
I wrote this English article without any translation tools.

English Version Article:
http://nootropic.me/blog/en/?p=5

今回から英語でも記事を書きます。
まあ内容はあまり変わりないと思うので普通に日本語が読めるなら、高校時代3年間英語赤点だった人間の書いた英文なんて読まずに普通に日本語の記事を読んだほうが良いと思います。
翻訳ツールより多少はマシ、という程度だと思います。

あまりテレビは見ないんですが、最近毎週欠かさず見ている水曜日のダウンタウンという番組があります。
http://www.tbs.co.jp/suiyobinodowntown/
この番組は、芸能人や視聴者が思う「説」を検証するという番組です。
結構問題のある番組ですがそれだけに面白かったりします。
まあ、毒のないものは面白く無いんだろうなと思います。

さて、今回はGoogleに脆弱性報告した話を書きます。正確には脆弱性の可能性を報告した話です。
この脆弱性は既に修正されています。

経緯としては、セキュリティやITと全く関係ない調べ物をしていた時にたまたまGoogleブックスのサイトを開いた時です。
ふと「そういやGoogleってバグバウンティ制度あったな」と思い、とりあえずそれっぽい文字列を入れて見たところたまたま以下のページを見つけたました。

https://books.google.co.jp/books?id=DdzuBgAAQBAJ&hl=en

いかにも「XSSの調査をしました」といった感じのページでした。しかし重要なのは、その中に気になる出力があったことでした。

一見正しくエスケープ出来ているようですが、onmousedownイベントハンドラの箇所を見て下さい。シングルクォートが'となっています。

ここでもし攻撃者が‘;]);}alert(1)//という文字列を書籍のタイトルに設定できた場合どうなるでしょうか。
何となくこんな感じのhtmlが生成される気がします。はい、あくまで気がするだけです。

ここでリンクをクリックするとalertが出ます。何故なら'によって先にある’(シングルクォート)をbypassすることが出来ているから。
Googleのために作ったデモページがあるので良かったらどうぞ。
http://vuln.moe/web/xss/omd_test.html

つまり、このGoogleのページのこの箇所にもXSSの脆弱性がある可能性があると言えます。

ですがここからが問題でした。
やはり可能性だけでなく実際にconsole.logなり何なり動いた方が報告される側としても理解しやすいし何より説得力があるものです。
しかし、この書籍データを登録する手段がどこを探しても見当たらないのです。
著者向けのサイトを探して見ましたが、この問題を見つけた段階では登録を行うことは出来無さそうでした。(もしあるなら大変申し訳ありません。私の調べ漏れです。)
https://books.google.com/intl/ja/googlebooks/publishers.html
https://play.google.com/books/publish/?re=1

しかし、脆弱性がある可能性は非常に高いと踏んでいた私は、とりあえず可能性として報告してみようという結論に至りました。
初めてのGoogleへの脆弱性情報提供に少し緊張しながらも何とか慣れない英語で報告を行いました。
やがて暫くして「triaged」のメールが送られてきました。
ちなみにこのGoogleセキュリティチームから送られてきたtriagedメールが何故かGmailの迷惑メールフォルダに入っていたのは笑い話です。
メールの中に大量のHTMLコードがあったからなのかな・・・?

それから大体一週間後のことです。
Googleのセキュリティチームからメールが返って来ました。
しかし、内容は「問題のあると指摘された箇所は完全にエスケープされていると思う」とのことでした。
実際にJavaScriptが実行出来ていない以上、Googleのセキュリティチームの反応は正しいものだと思いました。
また私の説明が不足していた感も否めません。

そこで私は実際に自分のサイトに、問題を指摘した箇所に脆弱性が可能性があることを示す簡単なデモページを作成しました。
そして、その箇所は完全にエスケープされていない可能性があることとデモページを作ったので確認してほしいことを併せて再度メールしました。
とはいえGoogleのセキュリティチームにとっては、実際に当該ページでJavaScriptが実行出来ていない以上あるかどうか怪しい脆弱性に時間を割いてはくれないと思っていましたし、そもそも私自身も脆弱性の存在を確認出来ていないわけですから次何らかの返事が来なければ諦めようと考えていました。

しかし、それから数日後こんなメールが。
I’ve filed a bug and will update you once we’ve got more information.
おお、どうやら脆弱性と判定されたようです・・・?
ということはやはり私の睨んだ通り脆弱性が存在したということでしょうか。

そして、その後少ししてなんとGoogleから報奨金を出すというメールが来ました。額は3133.7ドル。
これはNormal Google applicationsにXSSがあった場合の脆弱性報奨金の額であり、私が過去に貰った報奨金の中では最高額です。
https://www.google.com/about/appsecurity/reward-program/
この時、ようやく「やはり脆弱性はあったのか」と確信に至れたのでした。無かったらお金くれるわけないしね。
私としては結構手間をとらせてしまったと感じていたので、そもそも報奨金は出ないかと思っていました。

それからしばらくして、件のページを見てみたところ脆弱性が直っているのを確認しました。

なるほど、これなら大丈夫そうです。

普通の企業だと例え脆弱性報奨金制度をやっていたとしても、今回みたいに脆弱性の可能性を出しただけでは取り合ってくれない場合があります。というか普通一々企業側が調べる余裕があるわけもなく、そっちの方が普通だと思います。
天下のGoogleならではという感じでした。

唯一の心残りはalertが出せなかったことです。「出来ればGoogleのドメインでalert画面を出したかったなぁ。」と。テスト用のアカウントお願いしたらくれたかなぁ・・・?

反省としては、やはりGoogleセキュリティチームの手間をとらせてしまったこと。可能性という曖昧な状態で出してしまったことです。次もしまた偶然見つけた時はちゃんとした形で出せるといいなと考えています。

ありがとうございました。

Timeline:

  • 2016/1/13 脆弱性可能性の報告をする。
  • 2016/1/13 Googleからtriagedメールが送られてくる。
  • 2016/1/20 「問題のあると指摘された箇所は完全にエスケープされていると思う」という返事が来る。
  • 2016/1/20 デモページを作成し、再度Googleのセキュリティチームに脆弱性の可能性を指摘する。
  • 2016/1/30 「I’ve filed a bug and will update you once we’ve got more information.」というメールが来る。
  • 2016/2/3 脆弱性報奨金として3133.7ドルを出すというメールが来る。