
Docker-Lab zur Reproduktion von CVE-2026-53519, einem Pre-Auth-Path-Traversal im Nezha Dashboard, das jwt_secret_key preisgibt und JWT-Fälschung sowie Admin-Übernahme ermöglicht.
Das Lab demonstriert die Schwachstelle Pre-Auth-Path-Traversal via /dashboard..-Präfix-Verwechslung im
Nezha Dashboard, die zum Leak des jwt_secret_key führt -> JWT-Forgery -> Übernahme der Admin-Rechte.
Docker-Umgebung, A/B-Trennung nach Version zum Vergleich verwundbar vs. gepatcht.
| Image | URL (Loopback) | Erwartetes Ergebnis |
|---|
| Verwundbar | ghcr.io/nezhahq/nezha:v2.0.12 | http://127.0.0.1:9090 | Leak von config.yaml, Admin-Übernahme |
| Gepatcht | ghcr.io/nezhahq/nezha:v2.0.13 | http://127.0.0.1:9091 | blockiert (404) |
Beide binden nur an 127.0.0.1, kein Expose ins LAN. Standard-Admin-Login: admin / admin.
python) - zum Parsen der geleakten sqlite.db (Fallback vorhanden, falls nicht verfügbar)# 1. Seed data + up 2 container (vuln 8080, patched 8081)
.\lab.ps1 reset
# 2. Schneller Smoke-Check
.\lab.ps1 validate
# 3. Vollständige Exploit-Kette auf VULN
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1
# 4. Gegenprobe auf PATCHED (erwartet: blockiert)
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1 -Patched
# 5. Negative Controls (warum nur diese Variante leakt)
powershell -ExecutionPolicy Bypass -File .\poc\negative-controls.ps1
Verwaltungsbefehle:
.\lab.ps1 start | stop | status | logs [vuln|patched]
GET /dashboard../data/config.yaml -> Leak von jwt_secret_key.
GET /dashboard../data/sqlite.db -> Admin-User-ID abrufen (id=1).{user_id:"1", ip:"", exp:<future>} mit geleaktem Secret -> Authorization: Bearer <token>
-> GET /api/v1/profile (Authentifizierung) und GET /api/v1/user (Admin-only-Endpoint) -> Admin-Übernahme.Details zur Root Cause: siehe analysis/ROOT_CAUSE.md und
analysis/vuln-vs-patch.diff.
Vollständiger Bericht: REPORT_CVE_2026_53519.md.
docker-compose.yml # A/B vuln (8080) vs patched (8081)
seed/config.yaml # seed jwt_secret_key fest (deterministisch)
seed/lab_canary.txt # Canary zur Veranschaulichung des File-Read
lab.ps1 / lab-common.ps1 # Verwaltung + Helper (raw HTTP, forge JWT HS256)
poc/poc-cve-2026-53519.ps1 # vollständige Exploit-Kette
poc/negative-controls.ps1 # Gegenprobe blockierter Varianten
poc/parse_users.py # parse sqlite.db leak -> Admin-User-ID
analysis/ROOT_CAUSE.md # Analyse + Patch
analysis/vuln-vs-patch.diff # diff controller.go v2.0.12 -> v2.0.13
evidence/ # Output jedes Durchlaufs (leaked-config, token, userlist...)
Das Lab dient ausschließlich Forschungs-/Bildungszwecken in einer lokalen Umgebung. Der jwt_secret_key in seed/config.yaml
ist ein Fake-Wert, nur für Demo-Zwecke. Verwende dieses Image/diese Version mit dieser Schwachstelle nicht in der Produktion.