他人のドメインのGoogleAppsが取得できてしまうんだが(汗

前エントリ(中古ドメインでGoogleAppsを使ったら)でGoogleAppsネタを書いている最中に更に思いついてしまったネタがあって、試してみたら出来ちゃったので追加でネタにしてみます。
なんとGoogleAppsで、自分所有でないドメインで「ドメインの所有権の確認」もクリアした上での取得が出来てしまいました(^^;


これは脆弱性の発見だと思います。ただし、後述するように厳密にはGoogleApps脆弱性ではなく、ドメインのWEBサイトの問題だと思います。もしくは「htmlアップロードに寄るサイト所有者の確認という手法」に関する脆弱性かもしれません。

取得が成功する条件はhttp://example.jp/googlehostedservice.htmlのページを編集できること」だけです。
なんだ普通は出来ないから平気でしょ?と思いましたよね。僕もそう思いました。ですが偶にありますよね?

  • 第3者が自由にページ作成が出来てしまうWiki等のシステムを / で公開しちゃっているサイト
  • http://example.jp/UserName というURLでユーザのプロフィール等が表示できるサイト

こんなサイトは危険です。


GoogleAppsの場合はドメインの所有権の確認は http://example.jp/googlehostedservice.htmlGoogleから示されたランダムな文字列を埋め込むことで行います。これはそのページ内にその文字が含まれているかをチェックするだけなので、そのページ内に装飾があっても構いません。Wikiシステムの場合はページコンテンツ部分に書き込めればそれで十分です。
例えば脆弱なサイトの例では↓こんな表示が出来てしまえばOKです。

また、Wikiほどオープンじゃなくても偶然そのURLにページが存在して第3者がコメントを書き込める場合でも攻略可能です。
それに最近多くのサイトで採用されている /UserName というURLでユーザのページが表示できるサイトも危険です。
有名どころでは、はてなTwitterとかヤバイと思いました。ですが幸いなことにGoogleAppsの所有権の確認フローに関しては、はてなTwitterも偶然ですが大丈夫なようです。

  • はてなの場合は /UserName にアクセスすると /UserName/ にリダイレクトされますが、Googleの場合ステータス200以外ははじくようなので大丈夫ぽいです。
  • Twitterの場合は /UserName でアクセス可能ですが、たまたまユーザ名にピリオドを含められないので googlehostedservice.html というユーザが作れず大丈夫でした。
  • http://bit.ly などのURL転送サービスでshortnameが自分で設定できる系のところも危険かもしれません(GoogleAppsに関しては301や302は無視されるので大丈夫ですが)

誰でも編集できるWikiを / で公開しているようなサイトは自業自得という気もしますが、/UserNameでプロフィールを表示できるサイトとかだと結構盲点でどこにでも起こりうることだと思います。

他人のドメインGoogleAppsで出来ること

逆に出来ないことですが、

  • そのドメインのメールを受信することはできません。gmailでメール受信するにはMXの変更が必要だからです。
  • そのドメインサブドメインでのDocs、Calendar、Sites、AppEngineのホスティングは出来ません。それらを行うにはCNAMEの設定が必要だからです。

メールが受信できないのはまぁ当然で不幸中の幸いですが、それでもそのドメインのアカウントでgmailからメール送信出来たり、gtalkが使えちゃったり、googleドメインですがURLにドメイン名が含まれた状態で他サービスが使えちゃったりするので、フィッシング詐欺などへの利用は十分に考えられると思います。
最初にも言ったとおり、コレはGoogleAppsもしくは「ファイル作成によるサイト所有者の確認という手法」の問題だと思いますが、任意のファイル(ページ)の書き込みが可能なサイトはこういうリスクもあるんだと再認識した方がよいですね。

既存GoogleAppsの管理アカウントの取得はできませんでした

管理者パスワードのリセットをする画面には↓こんな文言が書いてあったのを覚えています。新規取得ならまだしも、これが既存のAppsの管理アカウントの取得でも出来たら凄くやばいんじゃないか!?と思ったので確認してみました。

ドメインの予備のメールアドレスにアクセスできない場合は、別の方法でパスワードをリセットできます。HTML ファイルか CNAME レコードを作成できれば、ドメイン名の所有者であることが確認されます。ドメインを確認し管理者パスワードをリセット

そしたら、この画面には「HTMLファイルか」と確かに書いてあるんですが、実際に管理者パスワードの再発行画面に進んでみるとCNAMEの設定しか手段は無く、HTMLファイルの作成による管理者アカウントの再発行は出来なくなっているようです。
殆ど同じ確認フローと画面なのに、新規のときはHTMLファイルの作成が使えて、管理者パスワードの再発行では使えなくなっている。ということはやはりGoogleもこの手法によるドメイン所有権の確認手法はヤバイと認識しているってことな気がします。
その前の画面では「HTMLファイルか」という文言が残っていることから昔は管理者パスワードの再発行も出来てしまっていたけど、誰かの指摘で今ではこっそり無効にされたのかもしれませんね…。



色々な議論に派生しそうなネタだけど、全部をここで書いてるといつまでもエントリが書き終わらないのでここでお終いです。
これがまたホットエントリー入りしたらきっと他の誰かが書いてくれる気がしますので(^ー^