已存在15年之久的NGINX漏洞可导致RCE

admin 2026-07-22 05:37:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 安全研究员发现nginx脚本引擎中存在严重远程代码执行漏洞CVE-2026-42533,自2011年map指令支持正则表达式以来已存在15年。漏洞源于PCRE捕获状态保存/恢复缺失,可导致堆缓冲区溢出和信息泄露,攻击者通过未认证GET请求即可实现RCE。受影响版本包括NGINXOpenSource0.9.6至1.30.3和1.31.2及之前版本,以及NGINXPlusR33-R36等。建议立即升级至修复版本1.30.4、1.31.3或对应Plus版本,并使用静态配置扫描器审计易受攻击的指令顺序。 综合评分: 87 文章分类: 漏洞分析,应急响应,安全工具,漏洞预警,解决方案


cover_image

已存在15年之久的 NGINX 漏洞可导致RCE

Guru Baran Guru Baran

代码卫士

2026年7月21日 15:06 北京

在小说阅读器读本章

去阅读

  聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

安全研究员 Stan Shaw发现了位于nginx脚本引擎中的一个严重的预认证远程代码执行漏洞CVE-2026-42533,自20113月即map指令获得正则表达式支持以来就被秘密利用。

F5 公司收到漏洞报告后,已在 nginx 1.30.4(稳定版)和1.31.3(主线版)中发布了修复方案,同时为NGINX Plus R33–R36(在R36 P7中修复)和37.0.0.1–37.0.2.1(在37.0.3.1中修复)提供了相应补丁。

该漏洞的根源在于nginx内部脚本引擎中缺少对PCRE捕获状态的保存/恢复。nginx在两遍中计算表达式——第一遍为LEN遍,用于测量缓冲区大小;第二遍为VALUE遍,用于写入实际数据。两遍都依赖一个名为r->captures的共享可变数组。当带有正则表达式的map指令在对捕获组(如$1)的两次引用之间执行时,它会悄悄覆盖该共享状态,导致LEN遍和VALUE遍在大小计算上产生不一致。

漏洞已存在15年之久

这种不匹配产生了两种不同的攻击原语:

  • 堆缓冲区溢出:当被覆盖的捕获组比原始值更大时,VALUE遍写入的数据超出缓冲区大小,从而用完全由攻击者控制的内容破坏相邻堆内存。
  • 信息泄露:当被覆盖的捕获组更小时,缓冲区过大,响应会泄露未初始化的堆字节——包括libc和堆指针,仅通过一次未认证的GET请求即可足以绕过ASLR。

攻击者可组合这两种原语,通过大约一次泄露请求、约40次喷射连接和一次触发溢出请求,在启用完整ASLR的Ubuntu 24.04上以10/10的可靠性实现可靠的RCE。研究人员提到,该漏洞不仅限于单个指令,它至少涉及9个源文件中的13个独立调用点,同时影响HTTP和stream模块。任何将正则表达式捕获源(location、server_name、rewrite或if块)与之后在同一请求上下文中求值的基于正则表达式的map变量结合使用的配置,都可能被利用——即使这些配置位于同一location块中的不同指令之间。

常见受影响的指令包括:

  • proxy_set_header、proxy_method、proxy_pass、fastcgi_param、uwsgi_param、scgi_param
  • grpc_set_header、return、add_header、rewrite、set
  • root、alias、access_log,以及若干其他指令。

此外,通过命名捕获组((?P…))还存在一个独立的、可单独利用的变种,该变种的缓存方式不同,因此仅修复编号捕获组的补丁无法解决该问题。

受影响版本

| 产品 | 受影响版本 | 修复版本 | | — | — | — | | NGINX Open Source(稳定版) | 0.9.6 至 1.30.3 | 1.30.4 | | NGINX Open Source(主线) | 1.31.2及之前版本 | 1.31.3 | | NGINX Plus | R33–R36 | R36 P7 | | NGINX Plus(更新产品线) | 37.0.0.1–37.0.2.1 | 37.0.3.1 |

值得注意的是,近期针对其它 nginx 漏洞的修复方案——CVE-2026-42945、CVE-2026-9256、CVE-2026-42055 和 CVE-2026-48142——并未解决此问题,这意味着已打补丁的组织机构仍然面临风险。令人惊讶的是,这种棘手的异常行为早在十多年前的 2014 年 nginx trac 工单中就已被首次指出,当时开发者 Maxim Dounin 承认这是一个缺陷,但从未作为安全关键问题被彻底修复。

该研究员已在 GitHub(0xCyberstan/CVE-2026-42533-Config-Scanner)上发布了一个静态配置扫描器,可识别易受攻击的指令顺序而无需实际利用,为防御者提供了一种立即审计暴露情况的方法。

完整的概念验证和利用技术细节将在补丁发布后延迟 21 天公开,以便给管理员留出更新时间,这一决定是基于 CVE-2026-42945(“NGINX Rift”)公开后迅速被武器化的前车之鉴。

战术性安全建议

  • 立即升级到 nginx 1.30.4、1.31.3 或对应的已修复 NGINX Plus 版本。
  • 对生产环境配置运行静态扫描器,以识别易受攻击的指令顺序。
  • 审计任何将正则表达式捕获与基于正则表达式的 map 变量结合使用的 location 块,并重新调整配置结构,避免捕获引用出现在 map 变量求值前后。
  • 即使未使用 HTTP/3 或其它近期修复的模块,也应将该问题视为紧急,因为该漏洞与这些修复无关。

开源卫士试用地址:https://oss.qianxin.com/#/login

代码卫士试用地址:https://sast.qianxin.com/#/login


推荐阅读

NGINX Open Source 中存在两个可导致RCE的严重漏洞

NGINX 新漏洞可导致远程攻击者触发恶意代码

已存在18年的 Nginx 漏洞可导致 RCE 攻击

已遭活跃利用的 nginx-ui 漏洞可导致 Nginx 服务器遭完全接管

Ingress NGINX 控制器中存在严重漏洞可导致RCE

原文链接

15-Year-Old NGINX Vulnerability Lets Attackers Crash Workers and Achieve Remote Code Execution

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

    觉得不错,就点个 “在看” 或 “赞” 吧~


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:代码卫士 Guru Baran Guru Baran《已存在15年之久的 NGINX 漏洞可导致RCE》

评论:0   参与:  0