Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/franklinf25/cve-2026-42945
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育二进制利用
GitHubfranklinf25/cve-2026-42945

cve-2026-42945

分析 CVE-2026-42945(NGINX rewrite 堆溢出漏洞),提供差分检测器、确定性 DoS PoC,以及经过验证的署名 RCE 移植。

查看仓库
920天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-42945 — NGINX 重写堆溢出:分析、DoS 与署名 RCE 移植

针对 CVE-2026-42945(CVSS 4.0 9.2 严重)的安全研究:NGINX 脚本引擎中的堆缓冲区溢出,其中替换部分带参数的 rewrite(例如 rewrite ^(.*) /new?c=1;)会使引擎的 is_args 标志保持置位且从未清除——因此之后在 set/if 中求值的任何捕获($1)都会带 URI 转义被复制到按未转义长度分配的缓冲区中。任何请求 URI 携带 %XX 转义或 + 的客户端均可在认证前触达。

结果(阶段 1): 一个安全的差分检测器(易受攻击的 1.30.0 对比已修复的 1.30.1,零崩溃)外加一个确定性 worker DoS(SIGSEGV,核心已转储——响应先完整送达)。两者均针对从提交 71d62c6 源码编译的构建复现。

结果(阶段 2): 一份报告者 RCE 的署名移植——以 worker 用户(nobody)身份执行 system(),在 lab/rce/ 下复制的报告者固定构建上 3/3 次干净运行复现。利用技术归功于 Leo Lin(DepthFirst);参见此处原创内容与先前工作的对比及研究报告中的先前工作。

验证矩阵

快速开始

root@kitploit:~
# 差分对:nginx 1.30.0(:29543)+ 1.30.1(:29544)从源码构建
cd lab && docker compose up -d --build && cd ..

python3 poc/diagnose.py                          # 安全 oracle — 绝不崩溃任一 worker
python3 poc/crash.py --host 127.0.0.1:29543      # 1.30.0:worker 死于信号 11,核心转储
python3 poc/crash.py --host 127.0.0.1:29544      # 1.30.1:每轮均存活

docker logs cve-42945-vuln 2>&1 | grep 'exited on signal' | tail -3

阶段 2 — 针对报告者固定构建的 RCE(nginx dev 修订版 98fc3bb7 = release-1.29.8-14,ASLR 由固定入口点禁用):

root@kitploit:~
docker compose -f lab/rce/docker-compose.yml up -d --build   # :29545,构建需数分钟

python3 exploit/rce.py \
  --cmd 'echo pwned-by-cve-2026-42945 > /tmp/proof' --verify --expect pwned
docker compose -f lab/rce/docker-compose.yml exec nginx cat /tmp/proof

文档

文档内容
docs/finding-sheet.md单页数据表:版本、CVSS、配置模式、触发条件、检测签名
docs/report-ptes.mdPTES 结构化报告(7 个阶段),范围限定于实际完成的工作

此处原创内容与先前工作的对比

阶段 1 的研究链条是原创工作:无崩溃差分 oracle 及其截断指纹(送达的响应体是重新转义的捕获被截断至原始长度——长度/值两遍不匹配的可见签名)、证明两个前置条件均必需的触发矩阵、为何长度遍无法看到 is_args 的源码级解释,以及确定性的响应后 worker 击杀。漏洞本身、易受攻击的配置模式及修复提交分析是报告者和上游的先前工作——Leo Lin(DepthFirst) 披露了该问题,Roman Arutyunyan 修复了它;参见研究报告的先前工作部分及 DepthFirst Disclosures — Nginx-Rift, 树 CVE-2026-42945。

阶段 2(RCE)是报告者已发布利用的移植,而非独立链条:将溢出落到相邻请求池 cleanup 指针上的跨请求堆风水、通过持有的 POST 请求体进行的伪 ngx_pool_cleanup_t 喷洒、将 cleanup 分发重定向至 libc system()、溢出几何(349 个 A + 969 个 + + 6 个目标字节)、无 ASLR 基址/偏移常量,以及 lab/rce/ 中的固定构建(他们的 env/)均为 Leo Lin 的设计,在 exploit/rce.py 中署名复现。阶段 2 中我们的部分:移植本身——本仓库的 CLI/日志/验证约定、实时堆扫描候选发现和基址自动检测(他们的静态常量依赖内核;参见利用 docstring)、标准库反向 shell 监听器,以及验证证据。

配套研究

本仓库与 CVE-2026-42533 — NGINX 认证前堆溢出:分析与 RCE (兄弟仓库)共享方法论:nginx 脚本引擎中相同的两遍长度/值 bug 类别,在那里走通了完整的认证前 RCE 链条。该链条界定了此 bug 的合理上限;本仓库的阶段 2 在此达到相同上限——作为报告者技术的署名移植,而非独立链条。

仓库布局

root@kitploit:~
docs/            finding sheet · PTES 报告 · 研究 writeup
poc/             diagnose.py(安全差分 oracle)· crash.py(确定性 DoS)
exploit/         rce.py — 报告者 system() 链条的署名移植
lab/             Dockerfile(nginx 从源码构建,-g -O0)+ 差分 compose 对
lab/nginx/       vulnerable.conf — 来自修复提交的 PoC 配置
lab/rce/         报告者的固定 RCE 环境(他们的 env/,我们的移植映射)

参考

  • 修复提交:524977e7c534 “Rewrite: fixed escaping and possible buffer overrun”(Roman Arutyunyan)——随 nginx 1.30.1 发布
  • Red Hat:RHSA-2026:17790 及后续(广泛的下游修补)
  • DepthFirst Disclosures — Nginx-Rift, 树 CVE-2026-42945(报告者的先前工作;Leo Lin)

教育性研究产物。仅针对你拥有或明确授权测试的系统运行。该漏洞已修补——请将 nginx 升级至 ≥ 1.30.1。

下载工具
声明证据
根因源自修复提交(而非博客)finding-sheet
修复是一行代码——ngx_http_script_regex_end_code() 中的 e->is_args = 0;提交 524977e(引用自 writeup)
安全检测器:易受攻击与已修复 oracle 对比,零崩溃poc/diagnose.py — 截断指纹(/foo%25b 对比 /foo%bar)
触发矩阵:带引号/加号 URI 且捕获中包含可转义字符——两者均必需poc/diagnose.py 探测电池,含 /a%41b 对照组
确定性 worker DoS(SIGSEGV,核心转储,响应先送达)poc/crash.py — X-Worker-PID 变化证明 worker 死亡
已修复的 1.30.1 在相同攻击下存活poc/crash.py --host 127.0.0.1:29544 — 3/3 轮存活
RCE(阶段 2,报告者技术,署名移植)exploit/rce.py — 3/3 次运行,证明文件 + uid=65534(nobody),执行后 workers exited on signal 11
docs/research-writeup.md调查叙事——修复提交考古、截断意外、可移植经验、未来工作