
Praktisches Labor, das die Pfad-Traversal-Schwachstelle CVE-2024-38819 im Spring Framework mit anfälligen und gepatchten Spring Boot-Bereitstellungen für die Sicherheitsschulung demonstriert.
Dies ist eine Cloud Foundry-fähige Spring-Boot-Demo für CVE-2024-38819, eine Path-Traversal-Schwachstelle im Spring Framework bei der funktionalen Verarbeitung statischer Ressourcen.
CVE-2024-38819 wird in Spring Framework gepatcht, nicht direkt in Spring Boot.
Spring Boot ist in der Demo trotzdem wichtig, weil es die Spring-Framework-Abhängigkeitsversionen verwaltet, die von der Anwendung verwendet werden. Mit anderen Worten: Ein Spring-Boot-Maintenance-Release kann die korrigierte Framework-Version für Sie nachziehen, aber der anfällige Codepfad und der Sicherheitsfix liegen in der funktionalen Verarbeitung statischer Ressourcen von WebFlux/WebMvc im Spring Framework.
Die App bietet eine kleine Benutzeroberfläche für einen Kundendokument-Tresor. Öffentliche Dokumente werden über /files/** mit WebFlux.fn RouterFunctions.resources(...) und einem FileSystemResource bereitgestellt, was den anfälligen Bedingungen im Spring-Sicherheitshinweis entspricht. Beim Start erstellt die App:
Das Secret wird von der App generiert und enthält keine echten Anmeldedaten.
Dieses Labor verwendet in beiden Modi absichtlich Spring Boot 3.3.4 und ändert nur die verwaltete Spring-Framework-Version:
| Modus | Spring Boot | Spring Framework | Artefakt |
|---|---|---|---|
| Anfällig | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Gepatcht | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |
Das Maven-Profil patched setzt:
<spring-framework.version>6.1.14</spring-framework.version>
Ohne dieses Profil verwaltet Spring Boot 3.3.4 das Spring Framework 6.1.13, also die anfällige Version, die in der Demo verwendet wird.
Bauen Sie beide Demo-Artefakte:
scripts/build-artifacts.sh
Dies erzeugt zwei separate deploybare JARs:
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Öffnen Sie:
http://127.0.0.1:8080
Führen Sie den eingeschränkten Proof aus:
python3 scripts/prove-secret-exposure.py --expect vulnerable
Erwartetes Ergebnis für die anfällige Version:
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Führen Sie den gepatchten Modus aus:
mvn -Ppatched spring-boot:run
Anschließend:
python3 scripts/prove-secret-exposure.py --expect patched
Anfällige Version pushen:
scripts/cf-push-vulnerable.sh
Dies stellt target/cve-2024-38819-vulnerable.jar als patch-your-spring-vulnerable bereit.
Führen Sie den Proof gegen Ihre App-Route aus:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-VULNERABLE-ROUTE \
--allow-remote-demo \
--expect vulnerable
Gepatchte Version pushen:
scripts/cf-push-patched.sh
Dies stellt target/cve-2024-38819-patched.jar als patch-your-spring-patched bereit.
Führen Sie denselben Proof aus:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-PATCHED-ROUTE \
--allow-remote-demo \
--expect patched
Aufräumen:
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r