Nginx Rift:潜伏 18 年的 Nginx 远程代码执行漏洞(CVE-2026-42945)
📅 2026年05月19日 · 技术
漏洞背景
CVE-2026-42945 是一个存在于 Nginx 核心模块 ngx_http_rewrite_module 中的严重堆缓冲区溢出漏洞,影响了从 2008 年至今几乎所有版本的 Nginx。该漏洞由安全研究团队 DepthFirst 的自动化安全分析系统在扫描 Nginx 源码时自主发现——只需一次点击接入,系统就找到了包括此漏洞在内的四个内存损坏问题。
更令人关注的是,这个 bug 在 Nginx 代码库中潜伏了长达 18 年之久。从 Nginx 0.6.27 到 1.30.0 的所有版本均受影响,覆盖面极广。
漏洞原理
Nginx 的重写模块在处理 rewrite 和 set 指令时,内部使用了两阶段流程:先计算缓冲区大小,再复制数据。问题出在 is_args 标志上——当 rewrite 替换字符串包含 ? 时,长度计算阶段运行在一个已清零的子引擎上(看到 is_args = 0),而复制阶段则看到 is_args = 1,于是调用 ngx_escape_uri 将每个可转义字节扩展为 3 字节,结果写入了一个被低估大小的堆缓冲区,造成溢出。
影响的版本
- Nginx 开源版:0.6.27 – 1.30.0 全版本受影响,1.31.0 及 1.30.1 已修复
- Nginx Plus:R32 – R36 受影响,对应补丁版本已发布
安全建议
如果你正在使用 Nginx 作为 Web 服务器或反向代理,建议立即检查版本号并升级到已修复版本。如果无法立即升级,临时方案是避免在 rewrite 指令中使用包含 ? 的替换字符串。该漏洞允许未认证的攻击者远程执行任意代码,属于最高风险等级的安全问题。
总结
CVE-2026-42945 的发现再次印证了一个事实:即使是经过数十年考验的成熟软件,也可能隐藏着未被发现的严重缺陷。自动化安全分析系统的介入有望改变这种被动局面,让更多「潜伏」的漏洞在被人利用之前就被发现和修复。
参考来源
🔧 在线开发者工具 — JSON格式化 · Base64 · UUID生成 · 正则测试 等80+免费工具
🔧 在线开发者工具 — JSON格式化 · Base64 · UUID生成 · 正则测试 等80+免费工具