
phpMyAdmin 5.2.3 - High - リモート - 2FAスキップ - WebAuthnセレモニーをスキップ可能
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-webauthn
分類: 2FA バイパス 到達範囲: リモート
phpMyAdmin 5.2.3 (タグ RELEASE_5_2_3)。デフォルトの tarball。web-auth/webauthn-lib は suggest / require-dev。composer install --no-dev ではインストールされない。したがって createServer は CustomServer を使用する。このクラスは response.signature をパースし (フィールドが存在しデコードできる必要がある)、COSE 検証を一切行わない。保存された credentialPublicKey を一切使用しない。製品自身の CustomServerTest は公開鍵なしのアサーションを受け入れる。
構造的チェックは本物である: allowCredentials 内の credential id、clientData.type == webauthn.get、セッションと一致する challenge、origin host、rpIdHash、user-present。署名はパースされ無視される。MySQL パスワードの後、それらのフィールドに一致するガベージな WebAuthn 署名で完全な phpMyAdmin セッションが得られる。それがデータベースである。もし実際に web-auth/webauthn-lib をインストールしているなら、WebauthnLibServer を使用しており、このバグの対象ではない。
| ID | CVE 未割当 |
| 分類 | 2FA バイパス / 署名検証の欠落 |
| 到達範囲 | リモート (cookie ログイン後、WebAuthn がスキップされる) |
| CWE | CWE-347, CWE-287 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| 製品 | phpMyAdmin |
| 影響を受けるバージョン | 5.2.3 タグ RELEASE_5_2_3。デフォルト tarball / composer install --no-dev |
| 認証 | Cookie ログイン (MySQL パスワード)、その後 WebAuthn がスキップされる |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18080 のみ |
依然として MySQL パスワード (cookie ログイン) が必要である。そのパスワードの後、一致する challenge、origin host、rpIdHash、user-present、登録済み credential id、およびガベージな署名を含む webauthn_request_response を POST する。通常の UI に到達する。2FA は消滅する。それはデータベース (SQL、ユーザー、エクスポート) であり、ホスト上の PHP シェルではない。
もし実際に web-auth/webauthn-lib をインストールしているなら、WebauthnLibServer を使用しており、このバグの対象ではない。
| 権限 | メソッド / パス | ラボで実証済みまたは推測 |
|---|---|---|
| 認証器なしで WebAuthn 2FA を完了 (第二要素の完全性) | パスワード後に POST webauthn_request_response、ガベージ署名 | ラボで実証済み。still_2fa=False landed=True |
| その MySQL ユーザーとして完全な PMA (SQL ボックスの完全性 + 偵察) | 同一セッション | ラボで実証済み。ホーム UI マーカーが存在 |
| MySQL パスワードをスキップ | 未認証 POST | ラボで実証済み、クローズ。ログイン画面に留まる |
web-auth/webauthn-lib インストール済みでの同一バイパス | WebauthnLibServer | クローズ。この残存物ではない |
| OS RCE / リバースシェル | この残存物 | クローズ |
この残存物でクローズ: 未認証 PMA、ホスト上の PHP シェル、および実際に web-auth/webauthn-lib をインストールした tarball をこのバグとして扱うこと。
createServer を読み、次に parseAndValidateAssertionResponse を読み、次に公開鍵を渡さないユニットテストを読んだ。構造的チェックは本物である。署名はパースされ無視される。
誤った方向: 事前のパスワードセッションなしで WebAuthn JSON を POST すること; 構造的チェックに失敗する署名; Webauthn\Server が依然として存在 (誤ったサーバークラス); このセッション由来でない challenge; origin host の不一致; user-present フラグがクリア; allowCredentials にない credential id。
ラボの Dockerfile は 5.2.3 をコピーし、composer install --no-dev を実行し、その後 vendor/web-auth を削除するため、CustomServer が使用される。最後の php -r は Webauthn\Server が存在すれば 1 で終了する。init.sql はハードウェアキーなしで appuser に WebAuthn 2FA を登録する。PoC は署名 not-a-real-signature-PMA-WEBAUTHN-BYPASS を POST する。
Dockerfile の隣にピンをクローンし、次を実行:
cd lab
git clone --depth 1 --branch RELEASE_5_2_3 https://github.com/phpmyadmin/phpmyadmin.git src
./run.sh
またはそのクローン後に pack ルートから:
python3 phpmyadmin-webauthn-Abraxas-Labs.py
ループバックのみ: http://127.0.0.1:18080。Compose プロジェクト pma-webauthn-lab。ピン RELEASE_5_2_3。src/ を出荷しないこと。ウィットネス PMA-WEBAUTHN-BYPASS。
SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature
保存された COSE 公開鍵で authenticatorData || SHA-256(clientDataJSON) を検証すること; userHandle をバインドすること; signCount を強制すること。web-auth/webauthn-lib を実際の依存関係にし、CustomServer を削除するか、ライブラリが欠落している場合はフェイルクローズすること。それまでは、WebAuthn 2FA を無効にするか、この phpMyAdmin を公開しないこと。
Plugins\TwoFactor\WebAuthn::createServerCustomServer::parseAndValidateAssertionResponseGNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。