
Laboratorio contenedorizado de tres niveles que reproduce la fuga de cookies de urllib3 CVE-2023-43804 mediante redirecciones de origen cruzado, con script de explotación y verificación del parche.
El repositorio incluye un entorno de laboratorio completamente contenerizado de tres niveles, destinado a demostrar, aprovechar y verificar las correcciones para CVE-2023-43804 (la fuga de cookies de urllib3 que ocurre durante redirecciones de origen cruzado).
El laboratorio se orquesta mediante Docker Compose y consta de tres servicios aislados que se comunican a través de una red bridge interna:
victim_client: Contenedor basado en Python que ejecuta el script de reproducción y explotación (exploit.py).target_app: Aplicación web Flask que simula un servidor objetivo vulnerable que desencadena una redirección de origen cruzado HTTP 302 hacia un origen externo.attacker_app: Servidor de registro Flask diseñado para capturar solicitudes HTTP entrantes y extraer encabezados filtrados.git clone [https://github.com/deepanshu-khurana/cve-2023-43804-lab.git](https://github.com/deepanshu-khurana/cve-2023-43804-lab.git)
cd cve-2023-43804-lab
docker compose up -d --build
docker compose up -d
docker compose down --volumes
CVE-2023-43804)urllib3< 1.26.17 o < 2.0.5urllib3 no eliminaba los encabezados de autenticación sensibles (como Cookie) al seguir redirecciones HTTP 302 entre diferentes orígenes, lo que permitía que los puntos de redirección no confiables interceptaran tokens de sesión sensibles.urllib3 esté instalada dentro del contenedor cliente:docker exec -it victim_client pip install urllib3==1.26.16
docker exec -it victim_client python3 -u /lab/exploit.py
"status": "EXFILTRATED" junto con el token de sesión filtrado.docker logs attacker_app muestra el encabezado de cookie sensible capturado.Para verificar el parche después de observar la explotación:
urllib3 dentro del contenedor cliente a la versión parcheada:docker exec -it victim_client pip install urllib3==1.26.17
docker exec -it victim_client python3 -u /lab/exploit.py
"status": "SECURE", "stolen_cookie": "None / Stripped".attacker_app confirman que la solicitud entrante contiene Leaked Cookie Header: None.requirements.txt para forzar versiones seguras:urllib3>=1.26.17
remove_headers_on_redirect en configuraciones personalizadas de Retry si se mantienen tiempos de ejecución heredados.victim_client, target_app, attacker_app) tal como los asigna Docker Compose. Use docker ps para verificar los nombres de contenedores activos.5000 y 5001 no estén ocupados por otros servicios locales antes de lanzar el stack de Docker.Al ejecutar el laboratorio con urllib3==1.26.16 vulnerable, la cookie de autenticación sensible es interceptada a través de redirecciones de origen cruzado y registrada exitosamente por el servidor atacante.
exploit.py mostrando "status": "EXFILTRATED" junto con el token de sesión filtrado, verificado por la salida del registro de attacker_app.Después de actualizar urllib3 a la versión parcheada (1.26.17), la biblioteca elimina automáticamente el encabezado Cookie sensible durante las redirecciones de origen cruzado.
Actualización del Paquete a la Versión Parcheada:

urllib3 dentro de victim_client mediante pip install urllib3==1.26.17.Salida Segura del Cliente y Registros Eliminados:

exploit.py devolviendo "status": "SECURE" con "stolen_cookie": "None / Stripped", confirmado por el registro del servidor que muestra Leaked Cookie Header: None.