
CVE-2026-22732 का न्यूनतम प्रजनन — Spring Security HTTP हेडर चुपचाप हटा दिए गए
CVE-2026-22732 का न्यूनतम प्रजनन — जब कंट्रोलर कोड सीधे सर्वलेट रिस्पॉन्स में लिखता है तो Spring Security HTTP रिस्पॉन्स हेडर चुपचाप हटा दिए जाते हैं।
Spring Security डिफ़ॉल्ट रूप से "लेज़ी" हेडर लेखन का उपयोग करता है। जब कोई कंट्रोलर response.getOutputStream() में लिखता है, response.flushBuffer() को कॉल करता है, या setIntHeader() के माध्यम से Content-Length सेट करता है, तो Spring Security अपने सुरक्षा हेडर (X-Frame-Options, X-Content-Type-Options, Cache-Control, Strict-Transport-Security, आदि) इंजेक्ट करने से पहले ही रिस्पॉन्स कमिट हो जाता है।
— किसी प्रमाणीकरण या उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं है।
src/main/java/com/example/vuln/
├── VulnApplication.java # Spring Boot एंट्री पॉइंट
├── SecurityConfig.java # सुरक्षा हेडर कॉन्फ़िगर करता है (X-Frame-Options, CSP, आदि)
└── VulnController.java # 1 सुरक्षित + 3 भेद्य एंडपॉइंट
src/test/java/com/example/vuln/
└── HeaderVerificationTest.java # टेस्ट जो भेद्य संस्करणों पर FAIL होते हैं
| एंडपॉइंट | भेद्य? | ट्रिगर |
|---|---|---|
GET /safe | नहीं | सामान्य Spring MVC रिटर्न |
GET /vuln/stream | हाँ | response.getOutputStream() में लिखता है |
GET /vuln/flush | हाँ | response.flushBuffer() को कॉल करता है |
GET /vuln/content-length | हाँ | setIntHeader() के माध्यम से Content-Length सेट करता है |
./mvnw spring-boot:run
फिर curl से सत्यापित करें:
# सुरक्षित — हेडर मौजूद हैं
curl -i http://localhost:8080/safe
# भेद्य — सुरक्षा हेडर गायब हैं
curl -i http://localhost:8080/vuln/stream
curl -i http://localhost:8080/vuln/flush
curl -i http://localhost:8080/vuln/content-length
./mvnw test
भेद्य संस्करण पर, vuln* टेस्ट फेल होंगे (हेडर गायब)।
पैच किए गए संस्करण (6.5.9+ / 7.0.4+) पर, सभी टेस्ट पास होंगे।
पैच किए गए Spring Security संस्करण का उपयोग करने के लिए pom.xml अपडेट करें:
<spring-security.version>6.5.9</spring-security.version>