次の日、星野君は引き続き検査の作業に没頭した。会員登録して退会して……という作業を繰り返しているうちにあることに気が付いた。
星野君 「(重複チェックが行われるってことは逆に……)」
星野君は、普段ユーザーとしてさまざまなサービスを利用する際に、すでに登録してあるサービスに重複してユーザー登録をすることはほとんどないため、すぐには気付かなかった。しかし、何度もやっているうちに、メールアドレスの重複チェックを行うという作りは悪用できるのではないかと思いついたのだ。
このWebアプリケーションでは、会員登録の登録情報入力時に入力したメールアドレスが、すでにシステムに登録済みのメールアドレスであった場合、「入力されたメールアドレスはすでに登録済みです」というエラーメッセージが画面上に表示され、登録が完了しない作りになっている。
このエラーメッセージを利用することで、入力したメールアドレスがすでに登録済みか否かを知ることができる。攻撃者は、これを利用し次々とメールアドレスを入力することで、システムに登録されているメールアドレスのリストを作成することが可能になる【注1】。
【注1】
この脆弱性は、「不必要情報(Unnecessary Information)」と呼ばれる。ユーザーに与える必要がない情報、または与えるべきではない情報を不用意に与えてしまうことにより、システムやそのほかの情報が漏えいしてしまう場合がある
もちろん、メールアドレスに利用される文字種や文字長を考えた場合、総当たりでメールアドレスの登録の有無を確認することは現実的ではない。しかし、特定の個人がそのサービスを利用しているかを調べることは容易に可能である。また、特定の個人でなくとも、ドメインの部分を固定にしたうえで、よくありそうなユーザー名、アカウント名などを中心に辞書攻撃を試せば、登録情報を得ることができるだろう。
しかし、そもそも攻撃者がメールアドレスを生成するのだから、登録状態などを確認しなくても手当たり次第にメールを送ればいいという考え方もできるかもしれない(エラーメールが戻ってこなければ、有効なメールアドレスと分かるのだから)。
この脆弱性の場合、有効なメールアドレスのリストを取得できるということだけが問題なのではなく、提供しているサービスの内容から、メールアドレスの所有者の趣味・し好と対応付けられてしまうことが大きな問題となる。攻撃者は、これを利用して趣味・し好に合わせた内容のスパムメールを送信したり、正規のサービスを装ってフィッシングなどを行ったりということが可能になるのだ。
また、攻撃者があらかじめ有効なメールアドレスのリストを所持していた場合、それぞれのメールアドレスをWebアプリケーションに投入することで、どういったサービスに登録しているのかといった情報と簡単に対応付けることが可能となってしまう。
Copyright © ITmedia, Inc. All Rights Reserved.