Hello there, ('ω')ノ
登録時のビジネスロジックエラーがSMS検証バイパスにつながるを。
脆弱性:
2FAバイパス
記事:
今回は、基本的にビジネスロジックエラーであり。
登録時にSMS検証をバイパスすることができて。
目標:
今回のターゲットは、金融サービス会社で。
スコープ内の資産はほとんどなくて。
登録/ログインパネルと、機能を備えていないいくつかの静的Webサイトと。
登録パネルだけに機能があるので、簡単にテストして他のプログラムに進むことに。
対象のウェブサイトは「redacted.com」とすることに。
登録フロー:
機能やアプリをテストする際に最初に行うことは、通常のユーザのように使用し。
フローを完全に理解することで。
Burp Suiteを起動し、すべてのリクエストとレスポンスをログに記録しながら。
以下で説明する登録プロセスを実行して。
1.redacted.com/registrationに移動して。
2.ユーザは、自分の名、姓、電子メールアドレス、および電話番号を。
入力するように求められて。
アプリケーションは、ユーザを。
redacted.com/registration/api/email-confirmationに転送して。
3.必要な情報を提供した後、最初に6桁の英数字の確認コードが。
電子メールアドレスに送信されて。
ユーザは確認コードを入力し、別のエンドポイントの。
redacted.com/registration/api/confirm-mobileで次のステップに進んで。
4.このステップでは、6桁の数字の確認コードがSMSで。
ユーザの電話に送信されて。
ユーザがコードを入力すると。
redacted.com/registerration/api/user-credentialsにリダイレクトされて。
5.最後のステップとして、ユーザは自分のユーザー名とパスワードを。
入力するように求められて
ユーザが資格情報を提供すると、登録プロセスが完了して
---------------------
内容を読んでもわかりづらいので上記をまとめてみると。
2.redacted.com/registration
名前、姓、電子メールアドレス、電話番号を入力
⇩
3.edacted.com/registration/api/email-confirmation
メールの6桁の英数字の確認コード
⇩
4.redacted.com/registration/api/confirm-mobile
SMSの6桁の数字の確認コード
⇩
5.redacted.com/registerration/api/user-credentials
ユーザー名とパスワード
⇩
登録プロセス完了
---------------------
搾取:
ステップ3で、ユーザが電子メールに送信された確認コードを入力すると。
POSTリクエストが次のリクエスト本文とともに送信されて。
ステップ3)確認メール
next、step、およびoptionalのパラメータは重要ではなく。
重要なのは、nextとstepだけで。
ステップ4で、SMSで送信されたコードを確認すると。
次の本文で別のPOSTリクエストが開始されて。
ステップ4)SMS確認
実行ステップ:
1.ステップ3で、インターセプトをオンにして。
メールアドレスに送信された確認コードを入力して。
本文では、上の最初の図に示すように。
step(confirmMail,confirm-mail)は電子メールによる確認として指定されていて。
ここで、リクエストを転送する前に、最初の画像で強調表示された領域を。
次の画像で強調表示された領域に置き換えて、リクエストを転送して。
2.ユーザはSMSで送信された確認コードを入力するように求められて。
これは、ユーザが現在ステップ4を実行していることを意味して。
URLは現在、redacted.com/registration/api/confirm-mobileで。
3.SMSコードを入力せずに、redacted.com/registrationに移動すると。
3番目の手順の後、アカウントのユーザ名とパスワードを入力するように。
求められたので、SMS検証を正常にバイパスしたことを示して。
起こった理由:
メール確認リクエストの本文(最初の画像のパラメータ)を。
SMS確認リクエストの本文(2番目の画像のパラメータ)に変更すると。
アプリケーションはメールコードを有効として受け入れて。
ただし、本体パラメータを変更したため、SMS確認も行われたと想定して。
正常に応答して。
URLにredacted.com/registrationを手動で入力すると。
アプリケーションはSMSコードの検証がすでに完了していると想定したため。
ユーザ名とパスワードの入力を求められたページにリダイレクトされて。
まとめ:
プログラムのスコープに特定の機能またはエンドポイントがある場合は。
できる限りそれを試して。
この機能はスコープで直接指定されていたりと。
Best regards, (^^ゞ