Manisso/http2-bomb
GitHub: Manisso/http2-bomb
针对 CVE-2026-49975 的 HTTP/2 拒绝服务概念验证工具,通过 HPACK 放大与连接保留技术验证主流 Web 服务器的内存耗尽漏洞。
Stars: 0 | Forks: 0
# HTTP/2 Bomb - CVE-2026-49975
一个针对 HTTP/2 服务器的拒绝服务(DoS)概念验证。通过结合 HPACK 放大与流保留技术,一台具有普通网络连接的机器可以在几秒钟内使易受攻击的服务器不可用。
## 漏洞
- **CVE:** `CVE-2026-49975`
- **标题:** Apache HTTP Server:mod_http2 拒绝服务
- **官方描述:** Apache HTTP Server 的 `mod_http2` 模块中存在一个过大内存分配漏洞(CWE-789),允许通过特制的 HTTP 请求发起拒绝服务攻击。
- **受影响版本:** Apache HTTP Server 2.4.17 至 2.4.67。
- **影响:** 该攻击将 HPACK 放大与 Slowloris 风格的连接保留相结合,迅速耗尽服务器内存和资源。单个具有 100 Mbps 连接的攻击者可能足以压垮易受攻击的服务器。
- **发现者:** Quang Luong (Calif.IO) 与 OpenAI Codex 合作。
## 攻击概述
漏洞利用分为几个阶段进行,如其执行日志所示:
1. **TCP/TLS 连接建立**
向目标服务器打开多个并发的 TCP/TLS 连接。
2. **HTTP/2 协商**
客户端检测服务器允许的最大并发流数(通常为 100 或 128)。
3. **HPACK 准备**
发送精心构造的 HTTP 头,迫使服务器分配过大的 HPACK 压缩表,从而迅速增加内存消耗。
4. **连接保留**
一旦流被打开,连接将无限期保持活动状态,阻止已分配的内存被释放,并最终耗尽服务器的可用 RAM。
## 测试结果与观察到的行为
测试是针对多个使用默认配置的 Web 服务器进行的。
| Web 服务器 | 测试版本 | RAM | 内存耗尽 | 观察到的行为 |
|------------|----------------|-----|-------------------|-------------------|
| **Envoy** | 1.37.2 | 32 GB | ~10 秒 | 成功且非常快速地耗尽内存。 |
| **Apache HTTP Server** | 2.4.67 | 32 GB | ~18 秒 | 流限制通常为 100。通过 HPACK 准备和无限期连接保留进行的标准攻击过程。 |
| **nginx** | 1.29.7 | 32 GB | ~45 秒 | 流限制通常为 128。攻击成功,但需要更多时间来消耗可用内存。 |
| **Microsoft IIS** | 未指定 | 64 GB | ~45 秒 | 可能会公布异常大的流限制,例如 `4294967297`。 |
| **非易受攻击的目标** | 各种 | - | - | 尝试超出服务器配置的流限制时,立即出现 TLS 失败或 `TooManyStreamsError`。 |
## 常见错误
### `h2.exceptions.TooManyStreamsError`
当提供给 `--streams` 的值超过服务器支持的最大并发流数时发生。
**解决方案:** 在开始攻击前探测服务器的流限制。
### `NameError: name 'SettingsAcknowledued' is not defined`
PoC 源代码中的一个简单拼写错误。
**解决方案:** 将:
```
SettingsAcknowledued
```
替换为:
```
SettingsAcknowledged
```
### `[SSL] 未知错误`
通常表示目标不支持通过 TLS 的 HTTP/2 或正在拒绝传入连接。
### `发生违反协议的 EOF`
远程服务器意外关闭了连接。
这通常在服务器开始耗尽其资源并开始拒绝新连接时发生。
### `无效输入 ConnectionInputs.SEND_HEADERS`
服务器在所有请求头传输完毕之前关闭了 HTTP/2 连接。
## 用法
该概念验证是作为 Python 脚本实现的。
### 安装
```
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
### 示例命令
使用 10 个连接和 100 个流的基本攻击:
```
python bomb.py example.com --streams 100 --connections 10
```
*(要求目标允许每个连接至少有 100 个并发流。)*
自动流限制检测:
```
python bomb.py example.com --connections 10
```
大规模攻击:
```
python bomb.py target.example.com --connections 50
```
高容量连接测试:
```
python h2bomb.py -t target.example.com:443 -c 1000
```
超大规模连接测试:
```
python h2bomb.py -t example.com -c 20000
```
## 鸣谢
- 原始漏洞研究:**Quang Luong (Calif.IO)**
- 合作:**OpenAI Codex**
## 免责声明
本软件仅供安全研究、教育目的以及测试您拥有明确授权的系统使用。
未经授权将此工具用于您不拥有或未经许可进行测试的系统,可能会违反适用的法律和法规。作者和贡献者对因使用本软件而导致的任何滥用或损坏不承担任何责任。
标签:Apache, HTTP/2, PoC, 拒绝服务攻击, 暴力破解, 网络安全, 逆向工具, 隐私保护