Metabase の POST /api/session/reset_password を介した認証なしSQLインジェクション。
CVSS 10.0、CISA KEV カタログ掲載、実環境で悪用が確認されています。
パスワードリセットリクエストボディ内の未宣言フィールドが、検証済み識別子ではなく HoneySQL 構造としてアプリケーションデータベースのユーザー検索に到達します。
JSONオブジェクトのキーは Clojure のキーワードになるため、{"raw": "<SQL>"} は HoneySQL の :raw 句にコンパイルされ、出力されます — Metabase アプリケーションデータベースに対する任意のSQLが、認証なしで実行可能です。
このリポジトリには、検出器(ブラインド型・時間ベースの判定ツール)と、ベンダーパッチから導出した根本原因分析が含まれています。防御側が自社の曝露状況を検証するため、またセキュリティ研究者がこのバグを研究するために意図されています。データの窃取や、武器化された管理者乗っ取りエクスプロイトの提供は行いません。
cve-2026-72898.py — バージョンゲート付き・フェイルクローズ型検出器(VULN / SAFE / UNTESTED)TECHNICAL.md — v0.63.2 → v0.63.15 パッチ差分からの完全な根本原因分析lab/docker-compose.yml — 再現用の脆弱版+パッチ適用版インスタンス検出器は影響を受けるインスタンスに対して VULN、パッチ適用済みインスタンスに対して SAFE を報告します — また、リクエストがスロットリング、キャッシュ、またはアプリに到達しなかった場合は UNTESTED(決して誤った SAFE は返しません)を報告します。録画は asciinema cast としても提供されています。
| ブランチ | 脆弱 | 修正済み |
|---|---|---|
| 0.58 / 1.58 | < 0.58.24 | 0.58.24 |
| 0.59 / 1.59 | < 0.59.21 | 0.59.21 |
| 0.60 / 1.60 | < 0.60.17 | 0.60.17 |
| 0.61 / 1.61 | < 0.61.11 | 0.61.11 |
| 0.62 / 1.62 | < 0.62.9 | 0.62.9 |
| 0.63 / 1.63 | < 0.63.5 | 0.63.5 |
アドバイザリ: GHSA-vwf4-m7j8-wcjf。 影響を受けるバージョンを実行している場合は、今すぐアップグレードしてください — これは実環境で悪用されています。
POST /api/session/reset_password HTTP/1.1
Content-Type: application/json
{"token":"1_00000000-0000-0000-0000-000000000000",
"password":"Placeholder1!",
"user-id":{"raw":"<ARBITRARY SQL>"}}
アプリケーションデータベースでは、次のようになります:
SELECT id, ... FROM core_user WHERE id = (<ARBITRARY SQL>)
このバグはブラインド型です — リセットフローはSQLエラーを飲み込み、すべてのケースで同一の
400 {"errors":{"password":"Invalid reset token"}} を返します — そのため検出器は
タイミングオラクルを使用します。完全なデータフローとパッチ差分については TECHNICAL.md を参照してください。
python3 cve-2026-72898.py https://metabase.example.com # H2 app db (デフォルト)
python3 cve-2026-72898.py https://metabase.example.com --engine postgres # pg_sleep オラクル
python3 cve-2026-72898.py https://metabase.example.com --json --trials 5
終了コード 0 = VULN、1 = SAFE または UNTESTED。
判定は VULN / SAFE / UNTESTED — 「おそらく問題なし」はありません。このツールは:
--force で意図的に上書き可能;X-Forwarded-For をローテーションします;SYSTEM_RANGE 上の sum(x))を使用し、遅延が絶対的な下限とコントロール自身のタイミングばらつきの両方をクリアすることを要求します;SAFE ではなく UNTESTED に分類します。cd lab
docker compose up -d # 3300 = 脆弱 v0.63.2, 3301 = 修正済み v0.63.15
# 初回DB初期化に約90秒待機
python3 ../cve-2026-72898.py http://127.0.0.1:3300 # -> VULN
python3 ../cve-2026-72898.py http://127.0.0.1:3301 --force # -> SAFE
検証済み: v0.63.2 はペイロードの行数に比例して線形にスケールする8秒以上の差分を示します(5M→0.85秒、10M→1.96秒、20M→4.61秒、40M→7.97秒); v0.63.15 は差分を示しません。
所有しているシステム、または明示的に評価を許可されたシステムのみをテストしてください。コンピュータシステムへの不正アクセスは、ほとんどの法域で違法です。このツールは良性のタイミングプローブで脆弱性を検出し、データの読み取り、変更、窃取を意図的に行いません。
MIT — LICENSE を参照してください。