关键 NGINX 漏洞可致 Worker 崩溃,或允许远程代码执行

关键 NGINX 漏洞可致 Worker 崩溃,或允许远程代码执行

导语:F5 发布针对 CVE-2026-42533 的关键 NGINX 漏洞修复,该缺陷位于脚本引擎的两遍求值逻辑中,可在特定正则 map 配置下被远程未认证攻击者利用,触发堆缓冲区溢出并可能导致 worker 崩溃乃至远程代码执行。

F5 已发布针对一处关键 nginx 缺陷的修复。该缺陷允许远程、未认证的攻击者通过精心构造的 HTTP 请求,在 nginx worker 进程中触发堆缓冲区溢出。该漏洞编号为 CVE-2026-42533,已于 7 月 15 日在 nginx 1.30.4(稳定版)与 1.31.3(主线版)、以及 NGINX Plus 37.0.3.1 中完成修补;任何运行更早版本的用户都应立即升级。

触发该漏洞可使 worker 进程崩溃或重启,造成拒绝服务(DoS)。F5 同时指出,在 ASLR(地址空间布局随机化)被禁用或可被绕过的情况下,此漏洞还有可能允许远程代码执行(RCE)。

从技术原理上看,溢出位于 nginx 的脚本引擎中,即在请求处理时根据配置指令组装字符串的代码部分。该漏洞只在一种特定配置下才会出现:一个基于正则的 map 指令,其输出变量被用于字符串表达式中,且该表达式在引用变量之前已经引用了一个来自更早正则匹配的捕获组。在这种模式下,引擎的两遍求值过程会发生错位:第一遍先测量结果所需的字节数并分配缓冲区,第二遍再将字节写入。两次读取的是同一份共享的捕获状态,而在两遍之间执行 map 的正则匹配时会将其覆写。因此,测量遍按照原始捕获(例如 location 匹配中的 `$1`)来计算缓冲区大小,写入遍却按照攻击者控制的不同大小的捕获来填充内容,导致缓冲区过小,溢出的长度与内容均直接来自请求。

这并非影响所有 nginx 服务器,暴露与否取决于配置而非仅仅是版本。F5 的安全公告将该缺陷列为影响核心 nginx 服务器与 NGINX Plus,同时影响 NGINX Ingress Controller、Gateway Fabric、App Protect WAF 以及 Instance Manager。不过截至发文时,F5 尚未列出这四款产品的修复版本。F5 给出的 CVSS v4 评分为 9.2,CVSS v3.1 评分为 8.1,并将攻击复杂度评为高。该漏洞影响从 0.9.6 到 1.31.2 的所有 nginx 版本——这一范围可以追溯到 2011 年,即 map 指令获得正则支持的年份。

CVE-2026-42533 由十余名研究人员独立报告给 F5,厂商感谢他们"独立地将此问题带到我们面前"。nginx 官方的变更日志将修复归功于 Winfunc Research 的 Mufeed VH 与维护者 Maxim Dounin。

原文配图

其中一位报告者 Stan Shaw(网名 cyberstan)发布了一份比官方公告更为详尽的技术分析。F5 将代码执行的可能性限定在 ASLR 被禁用或可绕过的情况,而 Shaw 的观点是:该漏洞本身就提供了 ASLR 的绕过能力。他告诉 The Hacker News,捕获覆写过程同样可以反向利用:当被覆写的捕获小于原始捕获时,过大的缓冲区会返回未初始化的堆数据,在默认的 Ubuntu 24.04 构建上,仅需一个未认证的 GET 请求即可回收 payload 所需的地址。Shaw 表示:"一位阅读 F5 公告的读者有理由认为,在默认系统上这只是一个拒绝服务漏洞。事实并非如此。"他的主张比 F5 的描述更为激进,并称其在自己测试中打满了 10/10。由于他目前暂未公开利用细节与 PoC,外部尚无法独立验证。

修复方式为升级至 nginx 1.30.4 或 1.31.3,或 NGINX Plus 37.0.3.1。对于暂时无法升级的用户,F5 提供的临时缓解措施是将受影响的正则 map 切换为命名捕获(named captures),Shaw 表示这能堵住主要路径并覆盖大多数配置。但他同时告诉 The Hacker News,该缓解措施仍留有一条更窄的路径:当一个 map 定义了与 location 正则相同的命名组时,可通过第二条代码路径触发同样的溢出;他已使用 AddressSanitizer 确认了这一点,而 F5 的公告并未提及此变体。"升级至 1.30.4 / 1.31.3 是唯一的完整修复方案。"他说。

需要排查的暴露模式较为狭窄:一个基于正则的 map,其变量出现在一个字符串表达式中,且同一表达式内同时引用了来自更早正则的编号捕获(`$1`、`$2` 等),且编号捕获的引用先于 map 变量。Shaw 自行编写的扫描器可跨配置文件自动执行该检查,跟随 include 指令,仅标记可利用的顺序关系,但不会执行任何利用操作;不过作为报告者自制的工具,它并非厂商产品。

这是约两个月内公开披露的第三起 nginx 表达式求值代码中的堆缓冲区溢出漏洞,此前分别是 5 月份的 Rift(CVE-2026-42945)以及数天后披露的重写模块中重叠捕获缺陷(CVE-2026-9256)。三者属于同一类缺陷:nginx 的两遍脚本引擎先测量缓冲区大小再写入内容,每次都是写入超出了所测量的尺寸。触发条件各有不同——Rift 中是陈旧标志、重写模块中是重叠捕获、此次则是捕获状态被覆写。正如该研究人员所指出的,共同弱点在于这种两遍设计过度信任了自身的测量结果。

截至 7 月 20 日,CVE-2026-42533 尚未被纳入 CISA 的已知被利用漏洞(KEV)目录,也未出现公开的利用代码。Shaw 表示他将在补丁发布 21 天后公开自己的 PoC,而 Rift 就是前车之鉴:其利用代码在数天内即被公开,随后即遭到实际利用。这正是要在本次漏洞利用代码出现之前尽快升级的原因。The Hacker News 就 Shaw 描述的变体是否完全可通过切换命名捕获来封堵、以及受影响的下游产品的修复版本何时发布等问题询问了 F5;截至发稿,F5 尚未作出回应。


来源信息

来源:The Hacker News

原文链接:https://thehackernews.com/2026/07/critical-nginx-vulnerability-can-crash.html

作者:info@thehackernews.com (The Hacker News)