新的 Nginx 漏洞利用

Hacker News Top 新闻

摘要

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 年引入。该漏洞允许未经身份验证的攻击者在使用了 rewriteset 指令的服务器上实现远程代码执行。

此漏洞以及另外三个内存损坏问题(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_tcleanup 指针(通过 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 Source0.6.27 – 1.30.01.31.0, 1.30.1
NGINX PlusR32 – R36R36 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。

相似文章

@Dinosn: Dnsmasq DNS远程堆缓冲区溢出

X AI KOLs Timeline

Dnsmasq中的一个堆缓冲区溢出漏洞(CVE-2026-2291)允许通过恶意上游DNS服务器进行远程代码执行。该问题在2.73版本中引入,并在2.92rel2和2.93版本中修复。

Codex发现一个隐藏的HTTP/2炸弹

Lobsters Hottest

Codex发现了一个名为“HTTP/2炸弹”的远程拒绝服务漏洞,该漏洞针对主流Web服务器(包括nginx、Apache、IIS、Envoy、Pingora)中的HPACK压缩,通过将压缩炸弹与流量控制保持相结合,快速耗尽服务器内存。