Path traversal in aiohttp (CVE-2024-23334)
aiohttp es un framework HTTP asíncrono para Python. Cuando se usa como servidor web y se configuran rutas estáticas (add_static), se indica el directorio raíz desde el que servir ficheros. La opción follow_symlinks=True controla si se siguen enlaces simbólicos fuera de ese directorio, pero en las versiones afectadas no valida que el fichero leído siga dentro de la raíz. El resultado es un path traversal: anteponiendo suficientes ../ a la ruta estática se sale del directorio y se lee cualquier fichero del sistema al alcance del proceso, aunque no haya symlinks.
La CVE-2024-23334 afecta a aiohttp < 3.9.2. El abuso es trivial con curl --path-as-is (para que no normalice los ../ antes de enviarlos):
curl --path-as-is "http://127.0.0.1:8080/assets/../../../../etc/passwd"Dos detalles prácticos. Primero, el prefijo correcto es el de la ruta estática real del servidor (puede ser /static/, /assets/, etc.): se descubre enumerando con un fuzzer de directorios. Segundo, si el servicio solo escucha en 127.0.0.1 (caso típico de un servicio interno), hay que alcanzarlo con un reenvío de puerto por SSH antes de atacarlo.
A partir de ahí se leen ficheros sensibles: /etc/passwd, /etc/shadow, una flag (/root/root.txt) o, mejor aún, la clave SSH privada de root (/root/.ssh/id_rsa), que permite entrar directamente como root por SSH.
Cómo detectarlo. En el log de acceso de aiohttp aparecen peticiones a la ruta estática (/static/, /assets/...) seguidas de ../../ sin normalizar y de rutas absolutas conocidas (/etc/passwd, /root/.ssh/id_rsa). Como un cliente legítimo nunca envía ../ crudos hacia una ruta estática, su presencia es la firma; un mismo origen probando distintas profundidades o varios ficheros sensibles delata el barrido. Un proxy inverso que canonicalice las rutas convertiría esas peticiones en 404, así que verlas llegar al backend indica que no hay tal protección.
Defensa. Actualizar aiohttp a 3.9.2 o superior; desactivar follow_symlinks; y poner un proxy inverso delante que canonicalice y filtre las rutas.
Máquinas donde se aplica
- ChemistryHackTheBox