
Laboratório prático demonstrando a vulnerabilidade CVE-2024-38819 de path traversal do Spring Framework com implantações Spring Boot vulneráveis e corrigidas para educação em segurança.
Este é um demo Spring Boot preparado para Cloud Foundry para o CVE-2024-38819, uma vulnerabilidade de path traversal no Spring Framework no tratamento funcional de recursos estáticos.
O CVE-2024-38819 é corrigido no Spring Framework, não diretamente no Spring Boot.
O Spring Boot ainda é importante no demo porque gerencia as versões das dependências do Spring Framework usadas pela aplicação. Em outras palavras, uma versão de manutenção do Spring Boot pode trazer a versão corrigida do Framework para você, mas o caminho de código vulnerável e a correção de segurança estão no tratamento funcional de recursos estáticos do WebFlux/WebMvc do Spring Framework.
A aplicação apresenta uma pequena interface de cofre de documentos do cliente. Documentos públicos são servidos a partir de /files/** usando RouterFunctions.resources(...) do WebFlux.fn com um FileSystemResource, que corresponde às condições vulneráveis no advisory da Spring. Na inicialização, a aplicação cria:
O segredo é gerado pela aplicação e não contém credenciais reais.
| Modo | Spring Boot | Spring Framework | Artefato |
|---|---|---|---|
| Vulnerável | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Corrigido | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |
O perfil Maven patched define:
<spring-framework.version>6.1.14</spring-framework.version>
Sem esse perfil, o Spring Boot 3.3.4 gerencia o Spring Framework 6.1.13, que é a versão vulnerável usada no demo.
Construa ambos os artefatos do demo:
scripts/build-artifacts.sh
Isso cria dois jars implantáveis distintos:
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Abra:
http://127.0.0.1:8080
Execute a prova restrita:
python3 scripts/prove-secret-exposure.py --expect vulnerable
Resultado vulnerável esperado:
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Execute o modo corrigido:
mvn -Ppatched spring-boot:run
Depois:
python3 scripts/prove-secret-exposure.py --expect patched
Envie o vulnerável:
scripts/cf-push-vulnerable.sh
Isso implanta target/cve-2024-38819-vulnerable.jar como patch-your-spring-vulnerable.
Execute a prova contra a rota da sua aplicação:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-VULNERABLE-ROUTE \
--allow-remote-demo \
--expect vulnerable
Envie o corrigido:
scripts/cf-push-patched.sh
Isso implanta target/cve-2024-38819-patched.jar como patch-your-spring-patched.
Execute a mesma prova:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-PATCHED-ROUTE \
--allow-remote-demo \
--expect patched
Limpeza:
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r