by David Clow

Facebookではログイン用パスワードを忘れた人のために、登録したメールアドレス宛に6ケタのコードを送付してパスワードを再設定するという仕組みを設けていますが、この部分に脆弱性があり、他人のパスワードを再設定しアカウントにフルアクセス可能な状況になっていたことが明らかになりました。すでに脆弱性は修正済みですが、指摘した人がどういう脆弱性だったかがわかるムービーを公開しています。

Anand Prakash : [Responsible disclosure] How I could have hacked all Facebook accounts

http://www.anandpraka.sh/2016/03/how-i-could-have-hacked-your-facebook.html



脆弱性を発見したのはインド・バンガロール在住のAnand Prakashさん。2月22日に脆弱性についての報告をFacebookに行い、2月23日には修正が行われたとのこと。この脆弱性発見で、Prakashさんは1万5000ドル(約170万円)の報奨金を受け取っています。

その仕組みは、こんな感じでした。

Facebook Account takeover - YouTube

Prakashさんが用いたのは、脆弱性診断でよく用いられているツールである「Burp Suite」のProfessional Edition。



BurpをHTTPプロキシとして設定することで、リクエスト内容を好きなように編集してからサーバーに送信することができます。



Facebookのパスワードリセット画面。設定されたメールアドレス宛に6ケタの数字が送られているので、それを入力することでパスワードの再設定ができるのですが、今回はその6ケタを知らない状態から突破しようというわけです。なお、用いられているのは「beta.facebook.com」ですが、通常のFacebookと同じように動作します。



たとえば「154000」と入力します。



サーバーに向けて「n=154000」と、6ケタの数字が送信されていることがわかります。



この6ケタを……



「154000」から1刻みで数字を流し込む総当たり攻撃を行うわけです。



総当たりがスタート。Status欄に「200」が並んでいるのは、リクエスト送信が成功していることを示します。ただし、数字自体は間違っているので、ログインはできていません。



2分以上の試行の末、「154898」のときにStatusが「302」になりました。これでログインページに遷移します。



ブラウザ上の表示だとこんな感じ。新しいパスワードの入力画面になったので、パスワードを入力すると……



パスワード変更に成功。あとは、古いパスワードでログイン中のデバイスを「Log out of other devices」で追い出せば……



このアカウントにログインできるのは自分だけ。



Prakashさんは「他人のアカウントに危害を加えない」というFacebookの規約に則り、自分のアカウントでこの脆弱性を確認。すでにこの脆弱性は対応が行われているので、同種の攻撃でアカウントに勝手にログインされる恐れはありませんが、こんな手口でログインできていたというのが恐ろしい……。