DepthFirstDisclosures/Nginx-Rift

GitHub: DepthFirstDisclosures/Nginx-Rift

针对 NGINX 十八年历史严重堆溢出漏洞 CVE-2026-42945 的远程代码执行概念验证与利用工具。

Stars: 834 | Forks: 156

# NGINX Rift **CVE-2026-42945** 的 RCE 概念验证,这是 2008 年引入的 NGINX `ngx_http_rewrite_module` 中的一个严重堆缓冲区溢出漏洞。该漏洞使得攻击者能够对使用 `rewrite` 和 `set` 指令的服务器执行未经身份验证的远程代码。 这个漏洞——连同其他三个内存损坏问题(CVE-2026-42946、CVE-2026-40701、CVE-2026-42934)——是由 [depthfirst](https://depthfirst.com) 的安全分析系统在一键导入 NGINX 源代码后自主发现的。 ## 漏洞详情 (TL;DR) NGINX 的脚本引擎使用两遍处理过程:首先计算所需的缓冲区大小,然后复制数据。当 `rewrite` 替换内容包含 `?` 时,主引擎会设置 `is_args` 标志,但长度计算过程在一个全新清零的子引擎上运行。因此: - **长度计算过程**看到的是 `is_args = 0` → 返回原始捕获的长度。 - **数据复制过程**看到的是 `is_args = 1` → 使用 `NGX_ESCAPE_ARGS` 调用 `ngx_escape_uri`,将每个可转义字节扩展为 3 个字节。 数据复制会导致大小不足的堆缓冲区溢出,并填入攻击者可控的 URI 数据。漏洞利用使用了跨请求的堆 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项目, CVE-2026-42945, Docker, Fuzzing, Maven, NGINX, ngx_http_rewrite_module, PoC, RCE, Web服务器安全, 内存破坏, 堆喷射, 堆缓冲区溢出, 堆风水, 安全测试, 安全防御评估, 应用安全, 攻击性安全, 数据展示, 暴力破解, 漏洞验证, 红队, 编程工具, 自动化漏洞挖掘, 请求拦截, 远程代码执行, 逆向工具