
Laboratoire pratique démontrant la vulnérabilité de traversée de chemin CVE-2024-38819 du framework Spring avec des déploiements Spring Boot vulnérables et corrigés pour l'éducation à la sécurité.
Ceci est une démo Spring Boot prête pour Cloud Foundry pour CVE-2024-38819, une vulnérabilité de traversée de chemin de Spring Framework dans la gestion fonctionnelle des ressources statiques.
CVE-2024-38819 est corrigé dans Spring Framework, pas directement dans Spring Boot.
Spring Boot reste important dans la démo car il gère les versions des dépendances Spring Framework utilisées par l'application. En d'autres termes, une version de maintenance de Spring Boot peut intégrer la version corrigée du Framework pour vous, mais le chemin de code vulnérable et le correctif de sécurité résident dans la gestion fonctionnelle des ressources statiques WebFlux/WebMvc de Spring Framework.
L'application présente une petite interface utilisateur de coffre-fort de documents clients. Les documents publics sont servis depuis /files/** en utilisant RouterFunctions.resources(...) de WebFlux.fn avec un FileSystemResource, ce qui correspond aux conditions vulnérables décrites dans l'avis Spring. Au démarrage, l'application crée :
Le secret est généré par l'application et ne contient aucun identifiant réel.
Ce laboratoire maintient intentionnellement Spring Boot à 3.3.4 dans les deux modes et ne modifie que la version gérée de Spring Framework :
| Mode | Spring Boot | Spring Framework | Artefact |
|---|---|---|---|
| Vulnérable | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Corrigé | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |
Le profil Maven patched définit :
<spring-framework.version>6.1.14</spring-framework.version>
Sans ce profil, Spring Boot 3.3.4 gère Spring Framework 6.1.13, qui est la version vulnérable utilisée pour la démo.
Construisez les deux artefacts de démo :
scripts/build-artifacts.sh
Ceci crée deux jars déployables distincts :
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Ouvrez :
http://127.0.0.1:8080
Exécutez la preuve contrainte :
python3 scripts/prove-secret-exposure.py --expect vulnerable
Résultat vulnérable attendu :
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Exécutez le mode corrigé :
mvn -Ppatched spring-boot:run
Puis :
python3 scripts/prove-secret-exposure.py --expect patched
Push vulnérable :
scripts/cf-push-vulnerable.sh
Ceci déploie target/cve-2024-38819-vulnerable.jar en tant que patch-your-spring-vulnerable.
Exécutez la preuve contre votre route d'application :
python3 scripts/prove-secret-exposure.py \
--target https://VOTRE-ROUTE-VULNÉRABLE \
--allow-remote-demo \
--expect vulnerable
Push corrigé :
scripts/cf-push-patched.sh
Ceci déploie target/cve-2024-38819-patched.jar en tant que patch-your-spring-patched.
Exécutez la même preuve :
python3 scripts/prove-secret-exposure.py \
--target https://VOTRE-ROUTE-CORRIGÉE \
--allow-remote-demo \
--expect patched
Nettoyage :
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r