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, 严重漏洞, 域名枚举, 安全头缺失, 漏洞复现, 蓝队分析