
Reproduce la vulnerabilidad de confusión de ruta CVE-2025-0108 en pilas Nginx/Apache. Incluye un PoC vulnerable y una implementación parcheada que demuestra la mitigación del lado del backend contra la omisión de autenticación doblemente codificada.
Este repositorio contiene un pequeño entorno de laboratorio para reproducir y mitigar el problema CVE-2025-0108 (path confusion / header smuggling entre Nginx y Apache).
El objetivo de la tarea es demostrar cómo las solicitudes doblemente codificadas pueden eludir la autenticación en una pila de varias capas (Nginx -> Flask backend -> Apache/PHP) y mostrar una mitigación en el lado del backend.
Este entorno es solo con fines educativos.
CVE-2025-0108/ — implementación vulnerable (PoC)CVE-2025-0108_fix/ — implementación parcheada (el backend verifica la ruta decodificada)CVE-2025-0108Simular la configuración vulnerable donde una ruta doblemente codificada puede eludir la autenticación debido a una decodificación inconsistente de la ruta entre capas.
Desde el directorio CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Ejecuta estos comandos curl desde tu host:
Prueba 1 — doble codificación (esperado: HTTP 200)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Esta solicitud utiliza doble codificación (%252e%252e == %2e%2e == ..) y demuestra el bypass en la configuración vulnerable. Debería devolver 200 OK.
Prueba 2 — codificación simple (esperado: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Prueba 3 — ruta sin codificar con .. (esperado: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Detener los entornos:
docker compose down
El backend realiza una comprobación adicional de la ruta decodificada antes de permitir el acceso. Esto evita la omisión de la autenticación cuando las solicitudes están doblemente codificadas.
Desde el directorio CVE-2025-0108:
cd CVE-2025-0108
docker compose up --build
Ejecuta estos comandos curl desde tu host:
Desde el directorio CVE-2025-0108_fix:
cd CVE-2025-0108_fix
docker compose up --build
Prueba 1 — doble codificación (esperado: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
El backend corregido detecta el .. decodificado y devuelve 401 No autorizado.
Prueba 2 — codificación simple (esperado: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/%2e%2e/php/ztp_gate.php/PAN_help/x.css"
Prueba 3 — ruta sin codificar con .. (esperado: HTTP 401)
curl -i "http://127.0.0.1:8085/unauth/../php/ztp_gate.php/PAN_help/x.css"
Detener los entornos:
docker compose down