jelasin/CVE-2026-42945

GitHub: jelasin/CVE-2026-42945

针对 NGINX rewrite 模块堆溢出漏洞 CVE-2026-42945 的远程代码执行概念验证,包含 Docker 漏洞环境与完整利用脚本。

Stars: 0 | Forks: 0

# NGINX Rift **CVE-2026-42945** 的 RCE 概念验证,这是 NGINX 的 `ngx_http_rewrite_module` 中一个于 2008 年引入的严重堆缓冲区溢出漏洞。该漏洞允许对使用 `rewrite` 和 `set` 指令的服务器执行未经身份验证的远程代码。 该漏洞——连同另外三个内存损坏问题(CVE-2026-42946、CVE-2026-40701、CVE-2026-42934)——在仅需一键导入 NGINX 源代码后,便被 [depthfirst](https://depthfirst.com) 的安全分析系统自主发现。 ## 漏洞详情 (TL;DR) NGINX 的脚本引擎使用两遍处理过程:首先计算所需的缓冲区大小,然后复制数据。当 `rewrite` 替换包含 `?` 时,主引擎上会设置 `is_args` 标志,但长度计算过程却在一个全新清零的子引擎上运行。因此: - **长度计算过程** 看到的 `is_args = 0` → 返回原始捕获长度。 - **数据复制过程** 看到的 `is_args = 1` → 调用带有 `NGX_ESCAPE_ARGS` 参数的 `ngx_escape_uri`,将每个可转义字节扩展为 3 个字节。 数据复制导致攻击者控制的 URI 数据溢出过小的堆缓冲区。漏洞利用使用跨请求堆风水(cross-request heap feng shui)来破坏相邻 `ngx_pool_t` 的 `cleanup` 指针(通过 POST 请求体进行堆喷,因为 URI 字节不能包含空字节),将其重定向到一个伪造的 `ngx_pool_cleanup_s`,在内存池销毁时调用 `system()`。 在我们的[技术分析文章](https://depthfirst.com/research/nginx-rift-achieving-nginx-rce-via-an-18-year-old-vulnerability)中阅读有关此漏洞的更多信息。 ## 受影响及已修复的版本 | 产品 | 受影响版本 | 修复版本 | | --- | --- | --- | | NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 | | NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 | 完整厂商安全通告: ## 使用方法 在 Ubuntu 24.04.3 LTS 上测试通过。 1. `./setup.sh` — 构建容器。 2. `docker compose -f env/docker-compose.yml up` — 启动包含漏洞的 NGINX 服务器。 3. `python3 poc.py --shell` — 弹出一个 shell。
标签:0day, CISA项目, Cutter, CVE-2026-42945, Docker, Heap Feng Shui, NGINX, ngx_http_rewrite_module, PoC, Python, RCE, 内存损坏, 堆缓冲区溢出, 安全防御评估, 数据展示, 无后门, 暴力破解, 漏洞分析, 红队, 编程工具, 网络安全, 请求拦截, 路径探测, 远程代码执行, 逆向工具, 隐私保护