xeloxa/CVE-2026-23918-Apache-H2-PoC
GitHub: xeloxa/CVE-2026-23918-Apache-H2-PoC
针对 Apache mod_http2 双重释放漏洞(CVE-2026-23918)的概念验证工具,提供多模式 DoS 攻击和被动漏洞检测能力。
Stars: 10 | Forks: 3
# CVE-2026-23918-Apache-H2-PoC
这是一个针对 Apache `mod_http2` 中双重释放漏洞(CVE-2026-23918)的概念验证 exploit。这是一个影响 `h2_mplx.c` 流清理路径的严重 bug。
简单来说,如果你的时机把握得当,就能让服务器尝试对同一个流清理两次,这通常会导致 SIGSEGV 错误以及 worker 进程崩溃。

## 法律声明
请勿用于非法用途。本项目仅限用于授权测试。如果你将其用于未经授权的目标,后果自负。我对你的使用行为不承担任何责任。
## 漏洞原理是什么?
CVE-2026-23918 影响 Apache 2.4.66 版本。该漏洞已于本月(2026 年 5 月)在 2.4.67 版本中被修补。
这是 Apache 处理早期 RST_STREAM 帧时存在的一个竞态条件。如果客户端发送一个 HEADERS 帧,并在多路复用器注册该流之前立即发送 RST_STREAM,就会导致两个不同的回调尝试进行清理。
其中一个回调处理重置,另一个回调处理流关闭。两者都会调用 `m_stream_cleanup()`,将相同的指针推入清理数组中。当 Apache 最终尝试销毁这些流时,第二次操作就会访问已释放的内存。
### 影响范围
- **DoS(拒绝服务)**:极其容易实现。单个连接就能导致 worker 崩溃。由于 Apache 会重新生成 worker 进程,你可以用极低的带宽使服务器持续处于高压状态。这正是本 PoC 所演示的功能——该漏洞已在 Apache 2.4.66 上测试并确认有效。
- **RCE(远程代码执行)**:理论上可行,但**对大多数攻击者来说不具备实际操作性**。它需要满足以下条件:
1. **信息泄露**(需要另一个漏洞来泄露内存地址)
2. 特定的 APR 内存分配器(`mmap`,Debian/Ubuntu/Docker 上的默认配置)
3. 精确的堆内存操纵能力以及对目标内存布局的了解
目前没有任何公开的 RCE exploit,构建一个此类 exploit 是一项极具挑战性的工程。对于大多数组织而言,现实世界中的实际影响是极其可靠的 DoS 攻击,而不是 RCE。

## 开始使用
你需要 Python 3.9 及以上版本以及 `h2` 库。
```
git clone https://github.com/xeloxa/CVE-2026-23918-Apache-H2-PoC.git
cd CVE-2026-23918-Apache-H2-PoC
pip install -r requirements.txt
```
### 快速测试
**使本地实验环境崩溃:**
```
# 激进式 DoS
python3 cve-2026-23918.py --target 127.0.0.1 --port 8443 --mode dos
```
**检查目标是否可能存在漏洞:**
```
# 这是被动的,它只检查 headers 和 H2 支持
python3 cve-2026-23918.py --target example.com --mode rce-detect
```
**持续施压测试:**
```
# 低带宽,长持续时间
python3 cve-2026-23918.py --target 10.0.0.50 --mode slow-drip -d 60
```
## 修复方法
如果你正在运行 2.4.66 版本,你需要升级到 2.4.67 版本。
如果你暂时无法更新,可以通过在配置中添加 `Protocols http/1.1`(或者直接从配置列表中移除 `h2`)来禁用 HTTP/2。这虽然对性能不是最理想的,但可以阻止崩溃发生。
## 备注 & 参考文献
- [Apache 官方安全公告](https://httpd.apache.org/security/vulnerabilities_24.html)
- [NVD 链接](https://nvd.nist.gov/vuln/detail/CVE-2026-23918)
- 由 Bartłomiej Dmitruk 和 Stanisław Strzałkowski 发现。
我已经在多个不同的 Debian 和 Ubuntu 构建版本上进行了测试。DoS 攻击非常稳定可靠。RCE 则要复杂、“挑剔”得多,除非目标的堆状态非常具有可预测性,否则在现实场景中我不指望它能成功。
标签:0day, 1day, Apache, Apache 2.4.66, C/C++, CISA项目, CVE-2026-23918, DoS, Double-Free, EXP, h2_mplx, HTTP/2, Maven, mod_http2, PoC, Python, Race Condition, Rapid-RST, RCE, RST_STREAM, SIGSEGV, Slow-Drip, 事务性I/O, 内存损坏, 双重释放, 堆溢出, 多路复用, 拒绝服务, 数据展示, 无后门, 暴力破解, 漏洞分析, 漏洞验证, 竞态条件, 红队, 编程工具, 网络安全, 赛博安全, 路径探测, 远程代码执行, 逆向工具, 隐私保护