Tinderアカウントをハックして6250ドル稼いだ話


残念ながら私のことではありません。

GizmodeにTinder、電話番号だけで乗っ取りが可能になっていたという記事があります。
以下はその元ネタである、バグハンター・ホワイトハッカーとして有名なAnand Prakash氏による手記、How I hacked Tinder accounts using Facebook’s Account Kit and earned $6,250 in bountiesの日本語訳です。

なおTinderはワールドワイド出会い系アプリ、Facebook's Account Kitは電話番号だけで各サービスにログインできるモバイルアプリ向けSDKです。

How I hacked Tinder accounts using Facebook’s Account Kit and earned $6,250 in bounties

この記事は責任ある開示ポリシーに則り、Facebookの許可を得て公開されています。

このブログ記事に記載されている脆弱性は、FacebookとTinderの開発チームによって迅速に修正されています。

この投稿は、私がTinderアプリで発見したアカウント引き継ぎの脆弱性に関するものです。
この脆弱性を利用することにより、攻撃者は電話番号でログインしているユーザのTinderアカウントにアクセスできた可能性があります。

これは、最近Facebookが公開したFacebook's Account Kitの脆弱性を悪用したものです。

TinderはWebアプリとモバイルアプリの両方において、携帯電話番号を使ってサービスにログインすることができます。
ログイン機能は、Facebook's Account Kitによって提供される機能です。

ユーザがtinder.comで電話番号を入力してログインボタンをクリックすると、ログインのためにaccountkit.comにリダイレクトされます。
認証に成功すると、Account Kitはログイン用のアクセストークンをTinderに渡します。

興味深いことに、TinderはAccount Kitから返ってきたトークンのクライアントIDをチェックしていませんでした。

これにより、攻撃者はAccount Kitが発行する他のアプリケーション用のトークンを用いて、Tinderに実在するユーザアカウントにログインすることが可能になっていました。

Vulnerability Description

Account KitはFacebook製で、パスワードを必要とせず電話番号かメールアドレスだけで、ユーザ登録やログインが可能になります。
信頼性が高く、使いやすく、ユーザはログイン方法を選択することができます。

Tinderは、新しい相手を探し出して出会うための位置情報ベースのモバイルアプリです。
ユーザは他のユーザに好き嫌いの評価を付けることができ、その後二人が右にスワイプするとチャットすることができます。

Account Kitには、電話番号を指定するだけでどのアカウントにもログインすることができるという脆弱性が存在しました。
Account KitにログインするとCookieに対象ユーザのアクセストークンが入ってくるため、攻撃者は被害者のアクセストークンを取得することができました。

その後、攻撃者はそのアクセストークンを使い、脆弱なAPIを使ってTinderにログインすることができます。

How my exploit worked step-by-step

Step #1

最初に、攻撃者はリクエストパラメータnew_phone_numberに被害者の電話番号を入れ、以下のAPIリクエストを送信します。
これによって被害者のAccount Kitアカウントにログインすることができます。

Account Kitはワンタイムパスワードの認証に電話番号を使っていません。
そのため、攻撃者は電話番号に好きな値を入れるだけで、対象のAccount Kitアカウントにログインできてしまいます。

ログインするとCookieに"aks"パラメータがセットされるので、攻撃者はこのパラメータを取得します。

The vulnerable Account Kit API

POST /update/async/phone/confirm/?dpr=2 HTTP/1.1
Host: www.accountkit.com
new_phone_number=[被害者電話番号]&update_request_code=[攻撃者が用意]&confirmation_code=[攻撃者が用意]&__user=0&__a=1&__dyn=&__req=6&__be=-1&__pc=PHASED%3ADEFAULT&__rev=3496767&fb_dtsg=&jazoest=

Step #2

攻撃者は、取得したアクセストークン"aks"を使って、以下のTinder APIにリクエストを投げます。

以上で、攻撃者は被害者のTinderアカウントにログインすることができました。
攻撃者は基本的に、被害者のTinderアカウントを完全に制御できることになります。
プライベートチャットや個人情報を読み取ったり、他利用者のプロフィールを左右にスワイプしたり、です。

Vulnerable Tinder API

POST /v2/auth/login/accountkit?locale=en HTTP/1.1
Host: api.gotinder.com
Connection: close
Content-Length: 185
Origin: https://tinder.com
app-version: 1000000
platform: web
User-Agent: Mozilla/5.0 (Macintosh)
content-type: application/json
Accept: */*
Referer: https://tinder.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
{"token”:"トークン","id":""}

Video Proof of Concept

Timeline

上記の脆弱性はいずれも、TinderとFacebookによって迅速に修正されました。
そしてFacebookからは5000ドル、Tinderからは1250ドルの報奨金が支払われました。


私はAppSecureの創設者です。
AppSecureは熟達したスキルを所有している、サイバーセキュリティ専門の会社です。
私達は、オンラインおよびオフラインでの脅威や脆弱性から、お客様のビジネスや重要なデータを守るために働きます。
[email protected]、もしくは[email protected]までご連絡ください。

感想

元記事はFacebookの許可を得て公開されていますが、この翻訳は許可を得ていません。
後日消えていたらそういうことだと思ってください。

上記内容を見る限りでは、まずAccount Kitの実装が不味い状態だったようです。
正確には異なりますが、簡単に言うと『相手の電話番号と自分のパスワードで、相手アカウントのアクセストークンを取得できる』状態。
天下のFacebookがそんな実装してしまうとは。
これ気付いたけど黙って悪用してた人、絶対他にもいるだろ。

次いでTinder側。
Account Kitが発行したアクセストークンは、どのアプリに対して発行されたかという情報を持っています。
本来はリクエストでやってきたトークンのアプリIDが、Tinderの持っているアプリIDと一致するかを確認しないといけないのですが、それをすっ飛ばしてしまっていたようです。
それによって『別のアプリで発行したトークンでTinderにログイン可能』という状態になっていました。

結果として、以上2つの脆弱性の合わせ技で『電話番号を知られるだけでTinderを乗っ取られてしまう』という脆弱な状態になっていた、ということになります。
実際はAccount KitもTinder APIも使ったことないから本当にそうなのかは知らないんだけどね。

ちなみに私も国内企業の脆弱性(主にXSS)を幾つか見付けたことがありますが、報奨金どころか問い合わせへの回答すらなく完全無視という塩対応が大半です。
まあネットを止められたり訴えられたりしないだけマシかもしれませんが。

やはり狙うなら米企業だな。
バグハンターとしてだらだら食っていきたい。