Py学习  »  NGINX

紧急预警 | 关于 NGINX 远程代码执行漏洞 CVE-2026-42945 的风险说明与自查建议

网瑞达科技 • 1 月前 • 107 次点击  

点击蓝字关注我们

近期,我们监控到NGINX远程代码执行漏洞 CVE-2026-42945,该漏洞存在于NGINX ngx_http_rewrite_module 模块中,在特定配置条件下,未认证攻击者可能通过构造HTTP请求触发NGINX worker进程堆缓冲区溢出,导致worker进程异常重启,在特定编译条件和运行环境下,风险可能进一步扩大为远程代码执行。

根据目前公开信息分析,该漏洞并不是“只要使用NGINX就会触发”,而是依赖特定rewrite配置组合。

典型风险场景包括:

在同一配置上下文中,某条rewrite指令使用了正则捕获,并且替换字符串中包含 ?;

随后又有rewriteifset指令继续引用 $1$2等未命名捕获变量。

这类组合可能造成NGINX脚本引擎在长度计算和实际拷贝阶段出现状态不 一致,从而引发堆缓冲区溢出。

网瑞达反代/VPN产品在业务访问链路中大量使用 NGINX作为统一入口能力,包括HTTPS证书接入、反向代理、访问控制、身份认证、单点登录、资源路径转发、负载均衡、Web安全防护、静态资源代理、错误页处理等功能。由于这些能力都依赖自动生成的 NGINX 配置,因此在漏洞披露后,我们第一时间对产品内置生成的反代/VPN NGINX 配置进行了专项排查。

经确认,网瑞达反代/VPN产品默认生成的 NGINX 配置不使用可触发CVE-2026-42945 的高风险rewrite组合。产品内置配置主要围绕反向代理转发、认证鉴权、安全策略、Header控制、上游服务代理、错误页处理等场景生成,默认配置中未发现“带?rewrite后续继续引用 $1$2”这一类漏洞触发条件。因此,在未手动修改高级自定义配置的情况下,产品默认生成配置不满足该漏洞利用条件。

同时,我们也对反代/VPN常见业务场景进行了复核。例如:统一门户访问、Web资源发布、HTTPS卸载、后端应用代理、资源路径映射、认证跳转、静态文件代理、默认错误页、策略拦 截页等自动生成配置,均未命中该漏洞的高风险模式。用户通过产品界面正常创建资源、配置证书、开启访问控制、启用负载均衡或安全防护,不会自动生成该风险配置组合。

需要特别提醒的是,如果用户曾手动编辑过网站高级自定义配置,或者在自定义serverlocationrewrite规则中加入过复杂NGINX指令,则需要自行进行排查。尤其是以下场景建议重点关注:

  • 手动添加过rewrite指令,并且rewrite目标中包含?

  • 后续又使用 set ifrewrite引用了 $1$2 等未命名捕获变量;

  • 自定义配置被放入公网可访问的Web资源入口;

对于存在自定义配置的用户,我们建议尽快执行以下操作:

优先升级 NGINX 到官方或发行版提供的修复版本;

检查所有公网暴露入口的 NGINX 配置。避免在带query string 的rewrite后继续使用$1$2这类未命名捕获变量;必要时改用命名捕获、提前保存变量、拆分rewrite逻辑,或移除不必要的 query string rewrite。

不止网瑞达产品

多场景 NGINX 风险自检脚本开源上线

为帮助用户快速定位风险,我们同步开发并开源了 CVE-2026-42945 配置自检脚本。该脚本不只适用于网瑞达反代/VPN产品,也可以用于检查用户自有 NGINX、业务网关、反向代理服务器、负载均衡节点等环境中的NGINX配置风险。

脚本会检查当前NGINX版本,并扫描配置中是否存在疑似高风险rewrite序列。

  • 如果当前版本处于受影响范围,且配置命中风险模式,应尽快升级NGINX或调整相关配置;

  • 如果版本处于受影响范围但未发现风险序列,也建议按照官方公告完成版本修复;

  • 如果发现疑似风险配置但版本不在受影响范围,也建议对配置进行人工复核,降低后续维护风险。


自检脚本地址


https://github.com/friparia/NGINX_RIFT_SCAN_CVE_2026_42945

https://cnb.cool/bh1xaq/NGINX_RIFT_SCAN_CVE_2026_42945

(国内镜像)

网瑞达将持续跟踪该漏洞的官方修复信息、利用条件变化及实际攻击风险。如后续发现新的影响场景或需要用户采取进一步措施,我们会及时发布更新说明。

往期精选

网瑞达总经理赴清华开讲:“网络交警”解码二十年网络管理

高校运维故事:用户抱怨网络不好,怎么办?

点击阅读原文获取联系方式

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/196355