7月2日の「はてなカウンター日記」に、このように報告されていた。
プライベートモードのカウンターにおいて、
- リンク元レポートページ
- 検索語レポートページ
- ドメインレポートページ
のそれぞれのURLに、直接アクセスを行うことで、プライベートモードであるにも関わらず、第三者がレポートを閲覧可能となる不具合がございました。
この問題を本日修正しました。(略)
これは気付かなかった。というか調べようとしていなかった。まさか、はてなにこういう基礎的な部分の脆弱性があるとは思わなかったので。意外にこの脆弱性は見落とされがちなのかもしれない。
この種の脆弱性の存在は次の手順で誰でも調べられる。
はてなのように、ユーザを識別するIDがURL中に含まれるサービス(公開モードも存在するため、こうなっている)では、ログインしていない状態でのアクセスでもユーザは指定されることになるため、画面の表示を司るプログラムには、ログイン状態であるかどうか(そしてログインしているユーザが画面の所有者と一致するか)をチェックするコードを意図的に入れることが必要となる。
それに対し、ショッピングサイトのように、URLなどにユーザIDを含めることが必要でないサービスでは、セッションIDからアクセス者のユーザIDを検索してきて処理することになるので、その場合、ログイン中であることのチェックを怠ることは普通は起こらない。なぜなら、ログイン中でなければセッションIDを得られないか、得られてもそこからユーザIDを得られないからだ。
はてなのような形態のサービスを構築する際には、チェックコードの入れ忘れが起きる可能性があるので、うっかりミスがないか、必要な画面のすべてについて検査をすることが重要となる。
上に挙げた検査の手順は、誰でも手軽にできるが、たくさんの画面について繰り返すのは面倒となる。先に、他人には見えてはならないはずの画面の全部のURLをメモしておいて、ログアウト後にそれらへのアクセスを試すという方法がある。あるいは、別の種類のブラウザを起動しておいて、ログインしているブラウザのURLを、ログインしていないブラウザにコピーしてアクセスして確認するという方法もある。
さらには、ログイン中に、ログイン状態であることを示しているであろうcookieを削除する操作をして、リロードして検査し、再びcookieを元に戻して続けるという方法もある。localhost上で動かした特殊なプロキシサーバ上で、アクセス毎にリクエストを編集して送信するという方法を使い、cookieを一時的に削除するということもできる。
こうした作業を自動化したのが、「Vulnagra」(別名「Moroyowa」)だ。
Vulnagraはプロキシサーバとして動作し、ユーザのアクセスのリクエストとレスポンスを監視する。ユーザに検査対象のサイトにログインさせ、サイトを適当にうろうろさせることにより、セッション追跡がどのパラメタで行われているかを推定する。はてなであれば、「rk」という名前のcookieであることがすぐにわかる。そして、他人に見えてはならないはずの画面を、自動的にあるいはユーザの指示によって登録して、後の検証コースで、そのパラメタ「rk」を欠落させて同じ画面にアクセスし、結果に問題のある情報が含まれていないかを調べることで、この脆弱性がないかを自動的に検出する。
ログイン状態を示すパラメタが、cookieに限らず、POSTアクションのhiddenパラメタになっているサイトであっても、同様に動作するので、検査は素人でも簡単にできる。
クレジットカードの有効期限が切れたため新しいカードが送られてきていた。そこには、ご利用案内の冊子とは別に挟み込まれた、「《重要》更新カード発行時のEdyのお取扱いについて」という紙が入っていた。そこには次のような注意書きがある。
- 旧カードのEdy残高は更新カードへ移行されません。
※旧カードは、Edy残高を使い切った後、ハサミを入れて廃棄いただくようお願いいたします。- 有効期限経過後の旧カードへのEdy入金はできません。
(略)- 更新にあたり、カード番号は変更されませんが、Edy番号は変更されます。
- インターネットでのチャージ(入金)をご希望の場合は、今回お送りいたしました「更新カード」にて、改めて「サービス登録」をお願いいたします。
これは気付かなかった。なるほどたしかにそういうことにならざるを得ない。面倒くさい。こんなの、おばちゃんとかには理解困難ではないだろうか。
有効期限の切れたクレジットカードは、そう、ハサミで切り刻んで捨てることになっているのは常識だ。ボーっとしていると、Edyに入金済みの数万円をドブに捨てることになる。 クレジットカードを無視して単なるEdyカードとして使い続けようとしても、入金ができないようになっているそうで((やらないでくれというだけで、本当は可能なのでは?))、しばらく使い切るまで両方のカードを持ち歩き、古いほうを使うことを意識し続けないといけない。面倒くさい。
そしてもう一つ、意外だった重大めの面倒くささがある。
Edyカードは(というより、FeliCaは)、単なる電子マネーとしての機能だけでなく、個人認証カードとしても機能するものだ。INTERNET Watchの7月7日の記事の表にあるように、「会員証」としての役割も果たす場合がある。その場合、ユニーク番号である Edy No.が会員番号となるだろう。
たとえば、2月29日の日記で書いたように、IC CARD WORLD 2004では、登録入場者の入場管理にEdyカードを使うという試みが実施されている。登録から入場までの間にクレジットカードの有効期限が切れたらどうするのか。その他の様々なサービスで、クレジットカード一体型Edyを、個人認証用として登録していた場合、全部変更しなくちゃならない。面倒くさい。
そもそも変更できないサービスもあるのではないか? 「club ap」なんかは、「ご登録情報の変更」の画面に行ってみると、変更できないようになっている。Edy No.が club apの会員番号なのだ。「am/pm発行のEdyはもちろん、他のEdyでもご登録いただけます!!」とあるのにだ。まぬけだ。
さて、club apの利用(というよりは、am/pmの利用)については、以前から書かねばと気になっていた、興味深い注意点がある。「ユビキタス社会」のひとつの落とし穴の典型例とも言える。これについては、am/pmへ問い合わせをして回答を待ってから書くことにする。