威胁简报
恶意软件
漏洞攻击
本漏洞是一个 RCE 概念验证,对应 CVE-2026-42945:NGINX 的 ngx_http_rewrite_module 于 2008 年引入的一个严重堆缓冲区溢出漏洞。该漏洞允许对使用 rewrite 和 set 指令的服务器执行未经身份验证的远程代码。
此分支扩展了原始 PoC,增加了一个 ASLR 绕过链,将 NGINX 溢出与常见的同主机 LFI/任意文件读取原语组合使用。通过文件读取原语恢复 nginx 工作进程映射、libc 和实时 /proc/<worker>/mem,进而远程获取 system() 地址以及可用的堆目标。
早期版本的实验会故意使一个 nginx 工作进程崩溃,让服务生成核心转储文件,再通过文件读取原语获取并解析该转储文件,以恢复对 ASLR 敏感的进程状态,包括堆目标。在本仓库中,“无核心”仅表示“没有可读的崩溃核心转储文件”:当前默认路径使用实时 procfs 内存读取替代崩溃核心转储文件依赖,而保留的传统核心引导路径仍使用生成的工作进程核心转储文件。
该漏洞以及其他三个内存损坏问题(CVE-2026-42946、CVE-2026-40701、CVE-2026-42934)在只需单击一下即可将 NGINX 源代码纳入系统后,由 depthfirst 的安全分析系统自动发现:https://depthfirst.com/。
NGINX 的脚本引擎使用两遍处理:首先计算所需的缓冲区大小,然后将数据复制到缓冲区。当替换操作包含 <value> 时,is_args 主引擎会设置该标志,但长度计算过程是在一个刚刚清零的子引擎上运行的。因此:rewrite?
- 长度传递看到
is_args = 0 → 返回原始捕获长度。
- 复制传递看到
is_args = 1 → 调用 ngx_escape_uri,NGX_ESCAPE_ARGS 将每个可转义字节扩展为 3 个字节。
复制操作会将攻击者控制的 URI 数据溢出容量不足的堆缓冲区。利用跨请求堆的“风水”漏洞,攻击者会篡改相邻的 ngx_pool_t 的 cleanup 指针(由于 URI 字节不能包含空字节,因此数据通过 POST 请求体喷洒),将其重定向到伪造的 ngx_pool_cleanup_s 调用 system(),从而在池销毁时触发调用。
项目地址:
https://github.com/Hamid-K/nginx-rift-private-lab
|