
Questa è una demo Spring Boot pronta per Cloud Foundry per CVE-2024-38819, una vulnerabilità di path traversal di Spring Framework nella gestione funzionale delle risorse statiche.
CVE-2024-38819 è corretta in Spring Framework, non direttamente in Spring Boot.
Spring Boot è comunque importante nella demo perché gestisce le versioni delle dipendenze Spring Framework utilizzate dall'applicazione. In altre parole, una release di manutenzione di Spring Boot può includere per te la versione corretta del Framework, ma il percorso di codice vulnerabile e la correzione di sicurezza risiedono nella gestione funzionale delle risorse statiche WebFlux/WebMvc di Spring Framework.
L'app presenta una piccola interfaccia di archivio documenti per i clienti. I documenti pubblici vengono serviti da /files/** utilizzando WebFlux.fn RouterFunctions.resources(...) con un FileSystemResource, che corrisponde alle condizioni vulnerabili dell'avviso di sicurezza di Spring. All'avvio, l'app crea:
Il segreto viene generato dall'app e non contiene credenziali reali.
Questo laboratorio mantiene intenzionalmente Spring Boot alla versione 3.3.4 in entrambe le modalità e modifica solo la versione gestita di Spring Framework:
| Modalità | Spring Boot | Spring Framework |
|---|
Il profilo Maven patched imposta:
<spring-framework.version>6.1.14</spring-framework.version>
Senza quel profilo, Spring Boot 3.3.4 gestisce Spring Framework 6.1.13, che è la versione vulnerabile utilizzata per la demo.
Compila entrambi gli artifact della demo:
scripts/build-artifacts.sh
Questo crea due jar distribuibili distinti:
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Apri:
http://127.0.0.1:8080
Esegui la prova vincolata:
python3 scripts/prove-secret-exposure.py --expect vulnerable
Risultato vulnerabile atteso:
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Esegui la modalità corretta:
mvn -Ppatched spring-boot:run
Poi:
python3 scripts/prove-secret-exposure.py --expect patched
Esegui il push della versione vulnerabile:
scripts/cf-push-vulnerable.sh
Questo distribuisce target/cve-2024-38819-vulnerable.jar come patch-your-spring-vulnerable.
Esegui la prova contro la route della tua app:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-VULNERABLE-ROUTE \
--allow-remote-demo \
--expect vulnerable
Esegui il push della versione corretta:
scripts/cf-push-patched.sh
Questo distribuisce target/cve-2024-38819-patched.jar come patch-your-spring-patched.
Esegui la stessa prova:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-PATCHED-ROUTE \
--allow-remote-demo \
--expect patched
Pulizia:
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r
| Artifact |
|---|
| Vulnerabile | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Corretta | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |