
# Minimale Reproduktion von CVE-2026-22732 — Spring Security HTTP-Header werden stillschweigend verworfen
Minimale Reproduktion von CVE-2026-22732 — Spring Security HTTP-Response-Header werden stillschweigend verworfen, wenn Controller-Code direkt in die Servlet-Response schreibt.
Spring Security verwendet standardmäßig „lazy“ Header-Schreiben. Wenn ein Controller in response.getOutputStream() schreibt, response.flushBuffer() aufruft oder Content-Length über setIntHeader() setzt, wird die Response committet, bevor Spring Security seine Sicherheits-Header (X-Frame-Options, X-Content-Type-Options, Cache-Control, Strict-Transport-Security usw.) injizieren kann.
CVSS 3.1: 9.1 (Kritisch) — keine Authentifizierung oder Benutzerinteraktion erforderlich.
src/main/java/com/example/vuln/
├── VulnApplication.java # Spring Boot Einstiegspunkt
├── SecurityConfig.java # Konfiguriert Sicherheits-Header (X-Frame-Options, CSP, usw.)
└── VulnController.java # 1 sicherer + 3 verwundbare Endpunkte
src/test/java/com/example/vuln/
└── HeaderVerificationTest.java # Tests, die bei verwundbaren Versionen FEHLSCHLAGEN
| Endpunkt | Verwundbar? | Auslöser |
|---|---|---|
GET /safe | Nein | Normale Spring MVC Rückgabe |
GET /vuln/stream | Ja | Schreibt in response.getOutputStream() |
GET /vuln/flush | Ja | Ruft response.flushBuffer() auf |
GET /vuln/content-length | Ja | Setzt Content-Length über setIntHeader() |
./mvnw spring-boot:run
Anschließend mit curl verifizieren:
# Sicher — Header vorhanden
curl -i http://localhost:8080/safe
# Verwundbar — Sicherheits-Header FEHLEN
curl -i http://localhost:8080/vuln/stream
curl -i http://localhost:8080/vuln/flush
curl -i http://localhost:8080/vuln/content-length
./mvnw test
Bei einer verwundbaren Version werden die vuln*-Tests fehlschlagen (fehlende Header).
Bei einer gepatchten Version (6.5.9+ / 7.0.4+) bestehen alle Tests.
Aktualisieren Sie pom.xml, um eine gepatchte Spring-Security-Version zu verwenden:
<spring-security.version>6.5.9</spring-security.version>