
Laboratorio basado en Docker para Apache CVE-2021-41773: path traversal y explotación de RCE con script de explotación en Python, demostrando análisis de vulnerabilidad y estrategias de mitigación.
Este repositorio reproduce una vulnerabilidad divulgada públicamente y parcheada en un entorno controlado de laboratorio Docker con fines educativos y de investigación.
El entorno es intencionalmente vulnerable y solo debe desplegarse en entornos de prueba aislados. No intentes explotar sistemas sin autorización explícita.
El objetivo de este proyecto es demostrar análisis de vulnerabilidades, explotación y estrategias de mitigación.
Recorrido de Rutas y Ejecución Remota de Código
# Navigate to the project folder
cd Apache-CVE-2021-41773
# Validate compose syntax
docker compose config
# Start the lab
docker compose up -d --build
# Check that everything is running
docker compose ps
Apache 2.4.49 introdujo un error en la normalización de rutas URL. Las secuencias codificadas como .%2e (equivalente a ..) no se sanitizan correctamente, lo que permite a un atacante recorrer el árbol de directorios más allá del DocumentRoot.
Si mod_cgi está habilitado y el directorio raíz (/) está configurado con Require all granted, un atacante puede:
/bin/sh (RCE)exploit.py)Sin dependencias externas — solo usa la biblioteca estándar de Python.
Auto python exploit.py Comprueba vulnerabilidad + ejecuta id como demostración
Read file python exploit.py -f /etc/shadow Lee cualquier archivo mediante RCE
RCE python exploit.py -c "whoami" Ejecuta un solo comando
Shell python exploit.py -i Pseudo-shell interactiva
Custom target python exploit.py -u http://target:8888 Apunta a un host remoto
Primero, verificamos que el entorno es vulnerable
Como era de esperar, el comando devuelve el id uid=0(root) gid=0(root) groups=0(root)
Creemos un shell inverso:
Estamos logueados como root
Como puedes ver, hay una mala configuración en /proc/1/environ, obtuvimos la contraseña de SQL Esto revela secretos expuestos causados por una configuración insegura del contenedor
Usando las credenciales extraídas, nos conectamos a la base de datos MySQL e imprimimos los datos almacenados

Nunca reproduzcas estas configuraciones en un entorno de producción.