LiaoZiqi-GZFLS/CVE-2026-49975
GitHub: LiaoZiqi-GZFLS/CVE-2026-49975
CVE-2026-49975 HTTP/2 Bomb 漏洞的概念验证工具,用于复现和验证主流 Web 服务器的 HTTP/2 拒绝服务漏洞。
Stars: 0 | Forks: 0
# CVE-2026-49975 HTTP/2 Bomb PoC
HTTP/2 远程拒绝服务漏洞复现工具
## 漏洞概述
**CVE-2026-49975** 是一个影响主流 Web 服务器的 HTTP/2 拒绝服务漏洞。该漏洞由安全公司 Calif(使用 OpenAI Codex)于 2026 年 6 月初发现。
### 攻击原理
1. **HPACK 压缩炸弹**:将极小的 header(如 `"x: a"`)插入服务器 HPACK 动态表,然后发送成千上万个 1-byte 的索引引用。每个引用迫使服务器分配大量簿记内存,但客户端只消耗极少带宽。内存放大比例可达 **~5700:1**(Envoy)和 **~4000:1**(Apache httpd)。
2. **Slowloris 流控保持**:通过零字节流控窗口阻止服务器发送响应,并 drip-feed `WINDOW_UPDATE` 帧保持连接存活,使内存分配被"钉住"。
3. **Cookie 分割绕过**:将大 Cookie 分割成许多小片段,绕过服务器的 header 数量限制。
### 影响范围
| 软件 | 影响版本 | 修复版本 |
|------|---------|---------|
| Apache httpd (mod_http2) | < 2.0.41 | 2.0.41+ |
| nginx | < 1.29.8 | 1.29.8+ |
| OpenResty | 基于 nginx < 1.29.8 | 1.29.8+ |
| Envoy (CVE-2026-47774) | ≤ 1.37.2 | 1.35.11, 1.36.7, 1.37.3, 1.38.1+ |
| Microsoft IIS | Windows Server 2025 | 无补丁 |
| Cloudflare Pingora | 默认配置 | 无补丁 |
### CVSS 评分
- **CVSS 3.1**: 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
- 部分厂商评级更高(如 9.8),因利用难度极低
## 工具说明
本工具用于安全研究和授权测试,演示 CVE-2026-49975 漏洞的攻击机制。
### 安装依赖
pip install -r requirements.txt
### 使用方法
# 基础攻击
python http2_bomb.py example.com
# 针对本地 HTTP/2 测试服务器(无 TLS)
python http2_bomb.py localhost -p 8080 --no-tls
# 高强度攻击(50 个 stream,每 stream 50000 个引用)
python http2_bomb.py example.com -s 50 -n 50000
# 启用 Cookie 分割绕过
python http2_bomb.py example.com --cookie-fragments 1000
# 快速模式(发送后不保持连接)
python http2_bomb.py example.com --no-hold
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `target` | 目标主机地址 | 必填 |
| `-p, --port` | 目标端口 | 443 |
| `--no-tls` | 禁用 TLS | false |
| `-s, --streams` | 并发 Stream 数量 | 10 |
| `-n, --headers-per-stream` | 每 Stream 的 Header 引用数 | 10000 |
| `--cookie-fragments` | Cookie 分割片段数 | 0 |
| `--stream-delay` | Stream 间发送延迟(秒) | 0.01 |
| `--window-update-interval` | WINDOW_UPDATE 发送间隔 | 5.0s |
| `--no-hold` | 发送后不保持连接 | false |
| `--timeout` | Socket 超时时间 | 30 |
## 本地测试
使用 `test_server.py` 启动一个简易 HTTP/2 服务器用于本地验证:
# 生成自签名证书
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
# 启动测试服务器
python test_server.py --port 8443
# 运行攻击
python http2_bomb.py localhost -p 8443
## 防御建议
1. **立即缓解**:如无法立即补丁,可临时禁用 HTTP/2
- Apache: `Protocols http/1.1`
- nginx: `http2 off;`
2. **升级补丁**:
- Apache httpd: 升级 mod_http2 至 2.0.41+
- nginx: 升级至 1.29.8+
- Envoy: 升级至对应修复版本
3. **配置加固**:
- 设置 `max_headers` 限制(nginx 1.29.8+ 默认 1000)
- 正确计算分割的 Cookie header 数量
- 限制单连接的最大 header 数量
4. **监控告警**:
- 监控内存使用突增
- 监控 OOM 事件
- 监控异常连接数
## 免责声明
⚠️ **本工具仅供安全研究和授权渗透测试使用。**
未经授权对他人系统使用本工具属于违法行为。使用者应遵守当地法律法规,并仅对拥有合法授权的目标进行测试。
## 参考链接
- [CVE-2026-49975 - OpenCVE](https://app.opencve.io/cve/CVE-2026-49975)
- [Original Disclosure - Calif](https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb)
- [Red Hat Advisory RHSB-2026-007](https://access.redhat.com/security/vulnerabilities/RHSB-2026-007)
- [HAProxy Protection Blog](https://www.haproxy.com/blog/haproxy-cve-2026-49975-http2-bomb)
- [PoC Source - califio/publications](https://github.com/califio/publications/tree/main/MADBugs/http2-bomb)
## 许可证
MIT License - 用于安全研究和教育目的。
标签:HTTP/2, Python, 安全测试工具, 底层编程, 拒绝服务, 数据展示, 无后门, 漏洞复现, 红队, 逆向工具