新的 Nginx 漏洞利用
摘要
Nginx 重写模块中的一个关键堆缓冲区溢出漏洞(CVE-2026-42945)允许未经身份验证的远程代码执行,并且已经发布了概念验证漏洞利用代码。该漏洞影响 Nginx 0.6.27 到 1.30.0 版本以及多个 Nginx Plus 版本。
查看缓存全文
缓存时间: 2026/05/14 18:25
DepthFirstDisclosures/Nginx-Rift 来源:https://github.com/DepthFirstDisclosures/Nginx-Rift
NGINX Rift RCE
CVE-2026-42945 的概念验证,这是 NGINX 中 ngx_http_rewrite_module 的一个严重堆缓冲区溢出漏洞,自 2008 年引入。该漏洞允许未经身份验证的攻击者在使用了 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_uri并传入NGX_ESCAPE_ARGS,将每个可转义字节扩展为 3 个字节。
复制过程会将攻击者控制的 URI 数据溢出到过小的堆缓冲区中。利用该方法通过跨请求的堆风水技术,破坏相邻 ngx_pool_t 的 cleanup 指针(通过 POST 请求体喷射,因为 URI 字节不能包含 null 字节),使其重定向到伪造的 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 上测试。
./setup.sh— 构建容器。docker compose -f env/docker-compose.yml up— 启动存在漏洞的 NGINX 服务器。python3 poc.py --shell— 获取 shell。
相似文章
利用一个18年前的漏洞实现NGINX远程代码执行
研究人员利用自动化系统发现NGINX重写模块中一个自2008年以来存在的严重堆缓冲区溢出漏洞(CVE-2026-42945),可实现远程代码执行。多个CVE已获NGINX确认。
CVE-2026-42530: nginx HTTP/3 QUIC模块中的释放后使用漏洞
CVE-2026-42530 披露了 nginx 的 HTTP/3 QUIC 模块中的一个释放后使用漏洞。
@Dinosn: Dnsmasq DNS远程堆缓冲区溢出
Dnsmasq中的一个堆缓冲区溢出漏洞(CVE-2026-2291)允许通过恶意上游DNS服务器进行远程代码执行。该问题在2.73版本中引入,并在2.92rel2和2.93版本中修复。
Codex发现一个隐藏的HTTP/2炸弹
Codex发现了一个名为“HTTP/2炸弹”的远程拒绝服务漏洞,该漏洞针对主流Web服务器(包括nginx、Apache、IIS、Envoy、Pingora)中的HPACK压缩,通过将压缩炸弹与流量控制保持相结合,快速耗尽服务器内存。
Longinus:一个漏洞中的两个边界,利用单一漏洞穿透Chrome的渲染器和V8沙箱,CVE-2026-6307
Chrome V8 JIT编译器中的单一漏洞CVE-2026-6307,允许攻击者在V8沙箱内获得任意读写原语并逃逸沙箱,实现远程代码执行,影响自Chrome 106及更高版本。