
Riproduzione minima di CVE-2026-22732 — header HTTP di Spring Security eliminati silenziosamente
Riproduzione minima di CVE-2026-22732 — gli header di risposta HTTP di Spring Security vengono eliminati silenziosamente quando il codice del controller scrive direttamente nella risposta del servlet.
Spring Security utilizza la scrittura "lazy" degli header per impostazione predefinita. Quando un controller scrive su response.getOutputStream(), chiama response.flushBuffer(), o imposta Content-Length tramite setIntHeader(), la risposta viene committata prima che Spring Security possa iniettare i suoi header di sicurezza (X-Frame-Options, X-Content-Type-Options, Cache-Control, Strict-Transport-Security, ecc.).
CVSS 3.1: 9.1 (Critico) — non richiede autenticazione né interazione con l'utente.
src/main/java/com/example/vuln/
├── VulnApplication.java # Punto di ingresso Spring Boot
├── SecurityConfig.java # Configura gli header di sicurezza (X-Frame-Options, CSP, ecc.)
└── VulnController.java # 1 endpoint sicuro + 3 vulnerabili
src/test/java/com/example/vuln/
└── HeaderVerificationTest.java # Test che FALLISCONO sulle versioni vulnerabili
| Endpoint | Vulnerabile? | Trigger |
|---|---|---|
GET /safe | No | Ritorno normale Spring MVC |
GET /vuln/stream | Sì | Scrive su response.getOutputStream() |
GET /vuln/flush | Sì | Chiama response.flushBuffer() |
GET /vuln/content-length | Sì | Imposta Content-Length tramite setIntHeader() |
./mvnw spring-boot:run
Poi verifica con curl:
# Sicuro — header presenti
curl -i http://localhost:8080/safe
# Vulnerabile — header di sicurezza MANCANTI
curl -i http://localhost:8080/vuln/stream
curl -i http://localhost:8080/vuln/flush
curl -i http://localhost:8080/vuln/content-length
./mvnw test
Su una versione vulnerabile, i test vuln* falliranno (header mancanti).
Su una versione corretta (6.5.9+ / 7.0.4+), tutti i test passano.
Aggiorna pom.xml per utilizzare una versione corretta di Spring Security:
<spring-security.version>6.5.9</spring-security.version>