
XenForo 2.3.13 より前のバージョンでは、別のユーザーが所有するパスキーを使用して、あるユーザーの2段階ログインを完了させることができます。
パスキーマネージャーは、アサーションで提供された認証情報IDを使用してグローバル検索を実行し、その認証情報のWebAuthn署名が正しいことを検証します。その後、TFAプロバイダーは、認証情報の所有者がパスワードログインが保留中のユーザーと一致するかどうかを確認せずに、結果をブール値に変換します。
ターゲットの正しいパスワードを知っている攻撃者は、ターゲットのパスキーチャレンジに対して、攻撃者自身が登録したパスキーで応答できます。ログインはターゲットとして完了します。この共有フローは、ターゲットが管理者である場合のACPログインにも影響しました。
これは、第一要素の侵害後のMFAバイパスであり、パスワードレス乗っ取りではありません。攻撃者には、自身の有効なパスキー、ターゲットのパスワード、およびパスキーTFA用に設定されたターゲットアカウントが必要です。
私はXenForo 2.3.12(ビルド2031270)で公開フローとACPフローの両方を再現しました。XenForo 2.3.13には修正が含まれています。
2つの依存関係をインストールし、使い捨ての攻撃者/ターゲットユーザーと攻撃者所有のテスト認証情報を準備してから、以下を実行します:
python -m pip install -r requirements.txt
python poc.py https://xenforo.example TARGET_USERNAME ATTACKER_CREDENTIAL_ID attacker-private-key.pem
ターゲットのパスワードは非表示のプロンプトで読み取られます。このスクリプトは、ユーザーのプロビジョニング、パスキー行の変更、パスワードの出力、または証拠ファイルの書き込みを行いません。その出力には、HTTPステータスと最終的なブール値のみが含まれます。
発見者: Marco Paciaroni (BomboBombone)。