Sploitus

Exploit for CVE-2026-23918-Apache-H2-PoC

kitploit · 2026-09-03

Exploit Code

MARKDOWN104 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-XELOXA-CVE-2026-23918-APACHE-H2-POC
# CVE-2026-23918-Apache-H2-PoC

这是针对 Apache `mod_http2` 中双重释放漏洞(CVE-2026-23918)的概念验证利用程序。这是一个棘手的漏洞,影响 `h2_mplx.c` 中的流清理路径。

基本上,如果时机把握得当,你可以让服务器尝试清理同一条流两次,这通常会导致 SIGSEGV 和工作进程崩溃。

![Exploit Demo](https://raw.githubusercontent.com/xeloxa/cve-2026-23918-apache-h2-poc/HEAD/demo.gif)

* * *

## 法律声明

别犯傻。仅限授权测试使用。如果你把它用在你不拥有的东西上,后果自负。我对你的行为不承担任何责任。

* * *

## 发生了什么?

CVE-2026-23918 影响 Apache 2.4.66。它已于本月早些时候(2026 年 5 月)在 2.4.67 中修复。

这是 Apache 处理早期 RST_STREAM 帧时的一个竞态条件。如果客户端发送一个 HEADERS 帧,并在多路复用器注册该流之前立即跟上 RST_STREAM,两个不同的回调会尝试进行清理。

一个回调处理重置,另一个处理流关闭。两者都会调用 `m_stream_cleanup()`,将同一个指针推入清理数组。当 Apache 最终尝试销毁这些流时,第二次尝试会命中已释放的内存。

### 影响

  * **拒绝服务(DoS)** :极其容易。一个连接就能使工作进程崩溃。由于 Apache 会重新生成工作进程,你可以用极少的带宽让服务器持续处于压力之下。这就是本 PoC 所演示的内容——并且已在 Apache 2.4.66 上测试并确认有效。

  * **远程代码执行(RCE)** :理论上可行,但对大多数攻击者来说**并不实际** 。它需要:

    1. 一个**信息泄露** (第二个漏洞来泄露内存地址)
    2. 特定的 APR 内存分配器(`mmap`,Debian/Ubuntu/Docker 上的默认配置)
    3. 精确的堆操作和对目标内存布局的了解

目前不存在公开的 RCE 利用程序,构建一个也是不小的工程工作量。对大多数组织而言,现实世界的影响是可靠的 DoS,而非 RCE。

![RCE Path Visualization](https://assets.kitploit.com/production/public/readmes/53151/df63353d1d7a2e19620a6b57564e4c0fd6206cd2cc15b3549ff30ede6f99b510/19dccb9c3f65dbaa2261ad8efe9bef899f7df63f7e1528a99be8ef94e421c5d8-display-v1.webp)




* * *

## 快速开始

你需要 Python 3.9+ 和 `h2` 库。

root@kitploit:~
    
    
    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
    

### 快速测试

**使本地实验环境崩溃:**

root@kitploit:~
    
    
    # 激进 DoS
    python3 cve-2026-23918.py --target 127.0.0.1 --port 8443 --mode dos
    

**检查目标是否可能存在漏洞:**

root@kitploit:~
    
    
    # 这是被动检测,仅检查标头和 H2 支持
    python3 cve-2026-23918.py --target example.com --mode rce-detect
    

**持续压力:**

root@kitploit:~
    
    
    # 低带宽,长时间
    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` 来禁用 HTTP/2(或者直接从列表中移除 `h2`)。这对性能来说不太理想,但可以阻止崩溃。

* * *

## 备注与参考

  * 官方 Apache 公告
  * NVD 链接
  * 由 Bartłomiej Dmitruk 和 Stanisław Strzałkowski 发现。



我已在几个不同的 Debian 和 Ubuntu 构建上测试过。DoS 非常可靠。RCE 则要"挑剔"得多,除非目标具有非常可预测的堆状态,否则在现实场景中我不会指望它。