semgrep/cve-2026-22732-demo

GitHub: semgrep/cve-2026-22732-demo

这是一个基于Spring Boot的最小复现项目,用于演示CVE-2026-22732中控制器直接操作响应流导致Spring Security安全头丢失的漏洞。

Stars: 0 | Forks: 0

# CVE-2026-22732 演示 **CVE-2026-22732** 的最小复现 — 当控制器代码直接写入 servlet 响应时,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` 等)之前被提交。 **CVSS 3.1: 9.1 (严重)** — 无需身份验证或用户交互。 ## 受影响版本 - Spring Security 5.7.0–5.7.21, 5.8.0–5.8.23, 6.3.0–6.3.14, 6.4.0–6.4.14, 6.5.0–6.5.8, 7.0.0–7.0.3 ## 项目结构 ``` src/main/java/com/example/vuln/ ├── VulnApplication.java # Spring Boot entry point ├── SecurityConfig.java # Configures security headers (X-Frame-Options, CSP, etc.) └── VulnController.java # 1 safe + 3 vulnerable endpoints src/test/java/com/example/vuln/ └── HeaderVerificationTest.java # Tests that FAIL on vulnerable versions ``` ## 端点 | Endpoint | 是否存在漏洞 | 触发条件 | |------------------------|-------------|----------------------------------------------| | `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 进行验证: ``` # Safe — headers present curl -i http://localhost:8080/safe # Vulnerable — security headers MISSING 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+)上,所有测试均通过。 ## 修复 更新 `pom.xml` 以使用已修复的 Spring Security 版本: ``` 6.5.9 ```
标签:Content-Security-Policy, CVE-2026-22732, CVSS 9.1, HTTP Headers, JS文件枚举, Lazy Loading, OutputStream, POC, RCE, Response Commit, Servlet, Spring Boot, Spring Security, Web安全, X-Frame-Options, 严重漏洞, 域名枚举, 安全头缺失, 漏洞复现, 蓝队分析