
Esta es una demo de Spring Boot preparada para Cloud Foundry de CVE-2024-38819, una vulnerabilidad de path traversal de Spring Framework en el manejo funcional de recursos estáticos.
CVE-2024-38819 está parcheado en Spring Framework, no directamente en Spring Boot.
Spring Boot sigue siendo importante en la demo porque gestiona las versiones de dependencias de Spring Framework que usa la aplicación. En otras palabras, una versión de mantenimiento de Spring Boot puede traer la versión corregida de Framework por ti, pero la ruta de código vulnerable y el parche de seguridad están en el manejo funcional de recursos estáticos de WebFlux/WebMvc de Spring Framework.
La aplicación presenta una pequeña interfaz de bóveda de documentos de clientes. Los documentos públicos se sirven desde /files/** usando WebFlux.fn RouterFunctions.resources(...) con un FileSystemResource, lo que coincide con las condiciones vulnerables del aviso de Spring. Al iniciarse, la aplicación crea:
El secreto es generado por la aplicación y no contiene credenciales reales.
Este laboratorio mantiene intencionalmente Spring Boot en 3.3.4 en ambos modos y solo cambia la versión gestionada de Spring Framework:
| Modo | Spring Boot | Spring Framework |
|---|
El perfil de Maven patched establece:
<spring-framework.version>6.1.14</spring-framework.version>
Sin ese perfil, Spring Boot 3.3.4 gestiona Spring Framework 6.1.13, que es la versión vulnerable usada para la demo.
Compila ambos artefactos de la demo:
scripts/build-artifacts.sh
Esto crea dos jars desplegables distintos:
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Abre:
http://127.0.0.1:8080
Ejecuta la prueba restringida:
python3 scripts/prove-secret-exposure.py --expect vulnerable
Resultado vulnerable esperado:
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Ejecuta el modo parcheado:
mvn -Ppatched spring-boot:run
Luego:
python3 scripts/prove-secret-exposure.py --expect patched
Despliega la versión vulnerable:
scripts/cf-push-vulnerable.sh
Esto despliega target/cve-2024-38819-vulnerable.jar como patch-your-spring-vulnerable.
Ejecuta la prueba contra la ruta de tu aplicación:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-VULNERABLE-ROUTE \
--allow-remote-demo \
--expect vulnerable
Despliega la versión parcheada:
scripts/cf-push-patched.sh
Esto despliega target/cve-2024-38819-patched.jar como patch-your-spring-patched.
Ejecuta la misma prueba:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-PATCHED-ROUTE \
--allow-remote-demo \
--expect patched
Limpieza:
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r
| Artefacto |
|---|
| Vulnerable | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Parcheado | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |