Hello there, ('ω')ノ
ゼロクリックアカウントの乗っ取りの話を。
脆弱性:
アカウントの乗っ取り
IDOR
記事:
https://medium.com/pentesternepal/a-tale-of-zero-click-account-takeover-56b51fdbd7ae
初期偵察:
いつものように、サブドメインの発見から始めて、それを調査し始めて。
スコープがワイルドカード*.target.comであったため。
このターゲットにもっと興味があって。
サブドメインのスキャン中に、異常なサブドメインや興味深いサブドメインに。
遭遇することはなかったので、メインドメインを探し始めることに。
メインドメインの機能をいじった後、アクセス制御が壊れていたので。
任意のユーザの個人情報を表示できて。
一意のuserIDを渡すことで、emailID、住所、電話番号、生年月日などの。
個人情報を表示できて。
エンドポイント:
/api/Customer/GetAdditional?customerId=
数日後、同じサイトでBurpでサイトを閲覧しているときに。
BAppStoreから入手できるJS Link Finderによって。
発見されたjavascriptファイルに出くわして。
コードをローカルに保存してから、JSコードの分析に数時間を費やした後。
下記のエンドポイントに到達して。
/api/AdditionalCustomerFields
これは、最新のすべての顧客のUserIDを開示していて。
今度は、JSコードが興味深いことがわかったので、さらに深く掘り下げることに。
リクエスト後と同じUserIDパラメータを取得し。
応答でpasswordHashやresetTokenなどの重要な情報を返す。
下記のエンドポイントに出くわしまして。
/api/PushToken
幸いなことに、アクセス制御が不足しすぎていて。
なので、任意のユーザの一意のUserIDを渡すことで、リセットトークンを取得できて。
サイト上のすべてのユーザのuserIDを持っていたので。
古い検索結果とチェーンすることができて。
パスワードを忘れて、下記のエンドポイントから取得できるリカバリートークンを。
使用するだけで済んで。
/api/PushToken
サイト上のすべてのユーザのアカウント乗っ取りを再現する手順は次のとおり。
1.下記へリクエストを送信すると。
すべてのユーザに一意のユーザIDが付与されて。
/api/AdditionalCustomerFields
2.UserIDを使用して下記へリクエストを送信すると。
メールアドレスが開示され。
/api/Customer/GetAdditional?customerId=
3.手順2で取得したユーザのパスワードをリセットして。
4.本文に一意のユーザーIDを指定して/api/PushTokenにPOSTリクエストを。
送信すると、手順3でリクエストされたリカバリコードが表示されて。
このようにして、サイト上の誰かのアカウントを簡単に乗っ取ることができて。
要点:
決してあきらめないで(良いことには時間がかかるので)。
サイトを理解し、すべての機能を試してみて。
JSファイルを分析することを忘れないで。
JSファイルには多くの機密情報や隠されたエンドポイントが。
含まれている可能性があって。
JSファイルを利用して非表示のエンドポイントと機密情報を見つける方法は。
https://www.bugbountyhunter.com/guides/?type=javascript_files
Best regards, (^^ゞ