といった問題が指摘されているところだが、それ以前の話があるので書いておかねばならない。
昨年夏の話。
2009年8月初め、はてなブックマーク界隈では、ケータイサイトの「iモードID」などの契約者固有IDを用いた、いわゆる「かんたんログイン」機能の実装が危ういという話題で持ち切りだった。かんたんログイン実装のために必須の、IPアドレス制限*1を突破できてしまうのではないかという話だ。
「実際に動いてすぐ使える」などと無責任なライブラリを出した ke-tai.org の著者に対して、「絶望的にわかってない」といったコメントが寄せられていた。
この一連の流れを読んで、私はやっと理解した。ここで指摘されていた方法で突破されてしまう実装は少ないのではないかと思ったのと同時に、何がいけないのかを理解し、ここには出てこなかったもっと別の方法(X)で、IPアドレス制限を突破できてしまう駄目な実装があり得ると思った。ならば、その実例を探して(修正を促した後)、それを広く周知すればよいと、そう考えたのだった。
まず最初に調べたのは「ポケットはてな」だった。最も身近なサイトであるのと同時に、「はてなならやりかねない」と、そう思ったからだ。
さっそく、その方法(X)で接続し、ポケットはてなの「かんたんログイン」ボタンに、携帯電話からではなく、通常のインターネット回線経由でパソコンから telnet でアクセスした。事前に、自分の携帯電話でポケットはてなに「かんたんログイン」の設定をしておき、自分の携帯電話の契約者固有IDを、HTTPリクエストのヘッダとして、telnet で手作業で送信した。
すると、思った通り、突破できてしまった。ログイン済みとして紐付けられたセッションIDが発行され、そのセッションIDでアクセスすれば、私のアカウント HiromitsuTakagi でのログイン状態となった。
ところが、テストしているうちに、何だかおかしいことに気づいた。(X)の方法を使っていないときでも、ログインできているようなのだ……。
半信半疑ながら、検査手順を整理して改めてテストしてみると、やっぱりログイン状態になる。つまり、なんと、ポケットはてなは、はじめっからIPアドレス制限なんぞ、まったくしていなかったのだ。
これにはぶったまげた。いくらなんでもそれはないわ。あれだけ度々、はてなブックマークのセキュリティタグ界隈で、契約者固有IDによる「かんたんログイン」の危うさが話題にのぼっていたのに、はてなの人らは、見てないのか?
急ぎ、脆弱性報告書を作成し、はてなに送付すると同時に、IPAの脆弱性届出窓口に通報した。はてなに送付した文面は以下の通りである(一部伏せ字)。
株式会社はてな 情報セキュリティ対応係 御中
2009年8月9日(第2版)
はてなの「かんたんログイン」が何の対策もされておらず
どこからでもなりすましログインされる欠陥について携帯電話向けWebアプリケーションの「かんたんログイン」方式の危険性について調査する過程で、はてなの「かんたんログイン」機能を調べたところ、何ら、なりすまし対策がなされておらず、どこのIPアドレスからでもいつでも誰にでもなりすまして不正ログインされてしまうという、致命的でこれ以上なく初歩的な欠陥があることに、ついさきほど気づきましたので、以下の通り、取り急ぎお知らせします。
1. はてなの「かんたんログイン」機能の挙動
私のはてなアカウント「HiromitsuTakagi」は、「かんたんログイン」機能を有効にする設定を、私の所有するauの携帯電話にて行っています。そして、はてなの「かんたんログイン」機能は、たとえば、http://mobile.hatena.ne.jp/ に「ログイン」というリンクで案内されており、そのリンク先のURLは以下のものになっています。
http://www.hatena.ne.jp/mobile/easylogin?uid=NULLGWDOCOMO&(略)
そこで、以下のHTTPリクエストを、直接 www.hatena.ne.jp の80番ポートにTCP接続することによって、手作業で送信しました。ここで、「X-Up-Subno:」フィールドの値は、私のau携帯電話の契約者固有ID(EZ番号)です。
GET /mobile/easylogin HTTP/1.1
Host: www.hatena.ne.jp
User-Agent: KDDI-ST33 UP.Browser/6.2.0.13.2 (GUI) MMP/2.0
X-Up-Subno: 0500XXXXXXXXXX_mg.ezweb.ne.jpこの接続は通常のインターネット回線から行いましたが、正常に送信することができ、以下のHTTPレスポンスが返ってきました。
HTTP/1.1 302 Found
Date: Sat, 08 Aug 2009 14:11:11 GMT
Server: Apache/2.2.3 (CentOS)
Cache-Control: no-cache
Pragma: no-cache
Location: http://mobile.hatena.ne.jp/?sid=1eaeXXXXXXXXXXXX
(略)ここでリダイレクト先として指定されているURLに、セッションIDらしきものが含まれています。このURLに、初期状態のWebブラウザ(cookieを消去した通常のWebブラウザで、はてなにログインしていない状態)で、通常のインターネット回線からアクセスしてみたところ、「ようこそHiromitsuTakagiさん」と表示され、私のアカウントでログインした状態となりました。つまり、パスワードを入力していないのに、私のアカウントでログインした状態となりました。
2. セキュリティ上の問題点
上記の挙動から、他人の携帯電話の契約者固有IDを知り得る立場の者であれば、「かんたんログイン」設定を有効にしているはてなユーザに対して、なりすまして不正ログインできてしまうと推察されます。
携帯電話の契約者固有ID(EZ番号等)は、Webサイト運営者であえれば誰でも他人のIDを入手することのできるものですから、事実上、誰でもはてなに不正ログインができてしまう、極めて危険な状態にあると考えます。
3. 生じ得る被害
なりすましログインによって、たとえば、はてなダイアリーへ偽の投稿をされたり、既存のダイアリーを改竄される危険性があるようです。その他にも、パスワードなしに操作可能な機能によって、何らかの被害が生じ得るかもしれませんが、確認していません。
以上
この文書を8月10日にはてなにメールで送付した。すぐに「修正対応を検討している」との返事があり、その後、「8月31日に脆弱性への対策を行った」との連絡があった。
当時のテストの様子(不正アクセス行為を伴わない寸止めテスト手法の様子)は、以下の図のとおりである。
私のEZ番号を知っている人なら、誰でも私の日記を改竄等できてしまう状態だった。
正直、げんなりした。これがケータイWeb業界の実情なのか……と。
心配になったので、「かんたんログイン」でWeb検索して、かんたんログインを提供しているサイトを探し、見つかったところから手当たりしだいに、自分用のアカウントを登録して、自分のアカウントでテストしてまわった。
そうしたところ、他に4か所のサイトで同様の事例が見つかった。(そのうち3か所は、同じところが作った同一のWebアプリケーションだった。)これらについて、Webサイト運営者に脆弱性報告書を送付すると同時に、IPAの脆弱性届出窓口に通報して、修正を促した。
ただ、全部を調べたわけではない。数日間しか探さなかったし、アカウントを自由に登録させてもらえないサイトは調査していないし、マイナーすぎるサイトもスキップした。
こんな事態になっているのは、携帯電話会社が、どうやったら「かんたんログイン」なるものが実現できるのか、ちゃんとした実装方法の公式解説を出さないからだろう。もっとも、契約者固有IDを「かんたんログイン」の用途で使えると公式に認めているのは、NTTドコモだけだったかもしれない。
これだけ明確にこの用途を公式に掲げたのだから、NTTドコモの責任で問題解決にあたるべきだろう。*2
はてなは、その後、10月21日に「かんたんログインがよりかんたんになりました」というリニューアルを発表した。リニューアル後の構成についても調べたところ、修正後のポケットはてなの実装では、(X)の手法の影響は受けないものになっていた。
では、(X)の手法の影響を受けるサイトはあったのか。(X)の手法とは何か。これについては、JVNでの公表を待って、近々、公表して注意喚起したい。
*1 携帯電話キャリアのゲートウェイのIPアドレスからのアクセスに限定する処置。
*2 もっとも、それ以前に、iモードID等の契約者固有IDは廃止されるべきなのだが。
はてなのかんたんログインがオッピロゲだった件
ほほう。
契約者固有IDは、結構いろんな携帯サイトで求められて、それが自分認証に..
高木浩光@自宅の日記 - はてなのかんたんログインがオッピロゲだった件