Hello there, ('ω')ノ
パスワードなしログイン機能による SSO 認証のバイパスはアカウント乗っ取りにつながるを。
脆弱性:
SSO 認証
記事:
要約:
ブログ記事「Bypassing SSO Authentication from the Login Without Password Feature Lead to Account Takeover」では、パスワードなしでログインする機能を利用してSSO認証をバイパスし、アカウント乗っ取りにつながる脆弱性について説明しています。
著者はバグハンティング中にこの問題を発見しました。
この脆弱性が存在するウェブサイトは、メールアドレスを複数のアカウントにリンクできること、そしてSSOログインがユーザネームのみを使用し、リンクされたメールアドレスを使用しないことをサポートしています。
著者は、同じメールアドレスをリンクした2つの異なるユーザネーム(attacker1とattacker2)を持つ2つのアカウントを例に挙げています。
著者は「パスワードなしでログイン」機能にアクセスし、アカウントのメールアドレスを入力すると、そのメールアドレスにOTP(ワンタイムパスワード)が送信されることを説明しています。
その後、OTPを入力すると、パスワードなしでSSOログインするためのアカウント選択ページが表示されます。
このページでは、同じメールアドレスにリンクされた異なるユーザネームを持つ2つのアカウントが必要です。
1つのアカウントのみの場合、正しいOTPを入力してもアカウント選択ページは表示されず、直接そのアカウントにログインされます。
著者は、パスワードなしでSSOログインするアカウント選択ページでアカウントの1つを選択する際のリクエストをキャッチし、リクエスト内の「username」パラメータの値を被害者のユーザーネームに置き換えることで、被害者のアカウントの最終エンドポイントにSSOがリダイレクトされることを発見しました。
これにより、アカウント乗っ取りの脆弱性を発見しました。
ーーーーーーーーーー
バグハンティングを行ったところ、パスワードなしでログイン機能を発見し。
パスワードなしのログイン機能は、有効なアカウント ユーザがパスワードなしで
ログインするか、有効なアカウント ユーザがリンクされたアカウントの
電子メールに送信された OTP (ワンタイム パスワード) を使用してのみ
ログインできる機能で。
続行する前に、これらの脆弱な Web サイトに関する情報を次の形式で提供して。
Web サイトでは、ログインするために実装されている SSO がユーザ名のみを使用し
リンクされた電子メールは使用しないため、
複数のアカウントでの電子メールの使用がサポートされていて。
ここで、攻撃者である私は、同じ電子メールを使用してリンクされた、
異なるユーザ名を持つ 2 つのアカウントを持っていて。
Username : attacker1
Username : attacker2
次に、パスワードなしでログイン機能を試してみて。
次に、アカウントのメールアドレスを入力し。
以下はスクリーンショットで。
その後、OTP が自分のメールアドレス (attacker@gmail.com) に送信され。
次に、OTP を入力すると、次のようなパスワードなしで SSO ログインするための
アカウント選択ページが表示され。
ノート:
パスワードなしで SSO ログインするためのアカウント選択ページ上の
スクリーンショットから、異なるユーザ名を持つ 2 つのアカウントが
同じ電子メールにリンクされている必要があり。
その電子メールのアカウントが 1 つしかない場合、パスワードなしで
SSO ログイン要求に正しい OTP を入力すると、上記のスクリーンショットのように
パスワードなしの SSO ログイン用のアカウント選択ページは表示されませんが
SSO ログインはすぐにアカウントにリダイレクトされて。
その場合は、パスワードなしで SSO ログインするためのアカウント選択ページで
アカウントの 1 つを選択するときにリクエストをキャッチし。
リクエストは次のとおりで。
POST /api/sso/login-without-password/auth HTTP/2
Host: sso.redacted.com
Cookie: [COOKIE]
User-Agent:
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: https://www.redacted.com/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Content-Length: 226
{“track”:006,”action”:”login-without-password”,”code”:”[OTP]”,”token”:”22123w2DS4543jg23324e35SD==”,”username”:”attacker1"}
以下はリクエストのスクリーンショットで。
そこにはいくつかのパラメータがあることがわかりますが、
username パラメータを見て驚き。
興味があったので、username パラメータの値を被害者のユーザ名に
置き換えてみて。
それは機能し、SSO は被害者アカウントの最終エンドポイントにリダイレクトされ。
ついにここでアカウント乗っ取りの脆弱性が見つかって。
Best regards, (^^ゞ