NGINX 已修补 CVE-2026-42533,这是一个与配置相关的漏洞,可以让未经身份验证的攻击者导致工作进程崩溃并可能远程执行代码。自从添加了正则表达式支持以来,潜在的缺陷就已经存在了map2011 年 3 月 NGINX 0.9.6 中的指令。
并非每个 NGINX 安装都可以立即被利用。易受攻击的服务器必须使用正则表达式捕获和基于正则表达式的特定组合map变量处于不安全的求值顺序。当这些条件存在时,精心设计的请求可能会触发 NGINX 工作线程内部的堆缓冲区溢出。
官方NGINX 安全咨询将版本 0.9.6 到 1.31.2 列为易受攻击的版本。管理员应在稳定分支上升级到 NGINX 1.30.4,在主线分支上升级到 NGINX 1.31.3,或适当修补的 NGINX Plus 版本。
CVE-2026-42533 是 NGINX 脚本引擎中的内存安全漏洞。当 NGINX 为指令构建字符串时,存储在共享请求结构中的正则表达式捕获数据被覆盖时,就会出现这种情况。
这F5 咨询 K000162097表示,当存在易受攻击的配置时,未经身份验证的远程攻击者可以发送精心设计的请求,导致堆缓冲区溢出。直接结果可能是工作进程终止和拒绝服务。代码执行也是可能的,特别是在地址空间布局随机化被禁用或绕过的情况下。
该问题影响 NGINX 数据平面。 F5 表示管理或控制平面并未因该漏洞而暴露。
| 漏洞详情 | 信息 |
|---|---|
| CVE 标识符 | CVE-2026-42533 |
| 受影响的组件 | NGINX 脚本引擎和正则表达式捕获处理 |
| 攻击接入 | 当存在易受攻击的配置时,远程且未经身份验证 |
| 主要影响 | Worker 崩溃、拒绝服务、信息泄露和可能的代码执行 |
| 需要配置 | 正则表达式以不安全的求值顺序捕获与基于正则表达式的映射变量的组合 |
| 已修补的开源版本 | NGINX 1.30.4 和 1.31.3 |
NGINX 缓冲区溢出是如何工作的
NGINX 分两个阶段评估一些脚本字符串。长度阶段计算需要多少内存,值阶段将最终内容写入分配的缓冲区。
这两个阶段都可以依赖于正则表达式捕获,例如$1,$2,或命名捕获。这些捕获存储在可变请求状态中。如果基于正则表达式map在捕获引用之间进行评估,它可以替换原始捕获信息。
根据斯坦·肖的技术分析,然后长度和值阶段可以对不同的捕获值进行操作。分配的缓冲区可能小于或大于写入阶段处理的数据。
| 捕获状态不匹配 | 潜在结果 |
|---|---|
| 替换捕获比原始捕获更大 | 值阶段写入超出分配的缓冲区,导致堆损坏 |
| 替换捕获比原始捕获小 | 响应可能包含未初始化的堆数据 |
CVE-2026-42533 会导致远程代码执行吗?
供应商支持的影响包括拒绝服务和可能的代码执行。公众NVD记录还描述了远程可访问的堆缓冲区溢出,该溢出取决于攻击者无法控制的服务器端配置条件。
研究人员报告称,通过将信息泄漏与受控堆损坏相结合,构建了可靠的漏洞利用链。据报道,测试使用泄漏请求、大约 40 个堆喷射连接和最终溢出请求,在启用 ASLR 的 Ubuntu 24.04 上实现了远程代码执行。
这种区别对于风险评估很重要。该漏洞的内存损坏影响支持了远程代码执行的可能性,但启用 ASLR 后一致利用的具体声明来自研究人员的实验室测试。
哪些 NGINX 版本受到影响?
| 产品 | 受影响的版本 | 固定版本 |
|---|---|---|
| NGINX 开源,稳定分支 | 0.9.6 至 1.30.3 | 1.30.4 |
| NGINX 开源,主线分支 | 1.31.2 之前(含) | 1.31.3 |
| NGINX Plus R33 至 R36 | 通过 R36 P6 的未修补版本 | R36 P7 |
| NGINX Plus 37 | 37.0.0.1 至 37.0.2.1 | 37.0.3.1 |
这官方 NGINX 安全页面将 1.30.4 和 1.31.3 标识为第一个不易受攻击的开源版本。两个版本均于 2026 年 7 月 15 日发布。
NGINX Plus 客户应遵循F5产品咨询。安装不相关的 2026 NGINX 漏洞的更新并不能保证免受 CVE-2026-42533 的影响。
哪些配置可能容易受到攻击?
暴露程度取决于请求的处理方式。当指令首先引用正则表达式生成的捕获,然后评估基于正则表达式的配置时,配置可能容易受到攻击。map变量同时构建相同的输出字符串。
原始捕获可以来自诸如以下的指令location,server_name,rewrite, 或者if。易受攻击的排序可能发生在一个指令内部,也可能发生在同一请求上下文中评估的不同指令之间。
该缺陷不仅限于普通的 HTTP 代理配置。该研究确定了 HTTP 和流模块中受影响的路径,包括跨 9 个源文件的至少 13 个调用站点。
proxy_set_header,proxy_method,proxy_pass, 和proxy_set_bodyfastcgi_param,fastcgi_pass,uwsgi_param, 和scgi_paramgrpc_set_header以及相关的gRPC配置处理return,rewrite,set,add_header, 和add_trailerroot,alias,index, 和access_log
命名捕获和交叉指令触发器
管理员应检查两个编号的捕获,例如$1,以及以如下形式编写的命名组(?P<name>...)。命名捕获变量的存储方式不同,但研究人员发现它们可以创建同一潜在问题的独立可利用形式。
一个简单的搜索捕获和map因此,在一个配置行内可能会错过易受攻击的情况。包含、继承的设置以及评估多个指令的顺序都会影响曝光。
这CVE-2026-42533 记录通过分配高攻击复杂性来反映这一要求。攻击者不需要凭据或用户交互,但目标必须已包含必要的配置模式。
为什么该漏洞隐藏了 15 年
受影响的代码可以追溯到 2011 年 3 月发布的 NGINX 0.9.6,当时引入了正则表达式支持map指示。年龄是指易受攻击的代码路径,而不是安全问题公开的日期。
2014 年 NGINX 票证记录了正则表达式捕获在配置处理期间可能被覆盖的情况。该行为被认为是一个缺陷,但其内存安全和远程利用的影响当时尚未得到完全解决。
Shaw 于 2026 年 5 月 17 日向 F5 安全团队报告了该安全漏洞。F5 于第二天承认了该报告,并协调了开源 NGINX 和 NGINX Plus 的修复程序。
NGINX 补丁改变了什么
该补丁的作用不仅仅是保留一组编号的捕获。它在将脚本数据写入输出缓冲区之前添加边界检查,并跟踪实际生成的数据量。
如果处理超出分配的边界,NGINX 现在会停止操作,而不是写入缓冲区。受影响的 HTTP 请求应该因内部服务器错误而失败,而不是损坏工作内存。
根据实际写入的字节计算输出长度也解决了信息泄露的问题。这种更广泛的方法可以保护缺陷所覆盖的编号和命名的捕获路径。
漏洞利用和扫描器可用性
截至 2026 年 7 月 20 日,尚未发布完整的公开漏洞利用程序。研究人员的披露表示完整的概念验证和漏洞利用报告将在 7 月 15 日补丁发布后 21 天内保留,以便管理员有时间进行更新。
非利用CVE-2026-42533 配置扫描器可以在 GitHub 上找到。它检查 NGINX 配置文件是否存在潜在不安全的捕获和映射评估序列,遵循包含的文件,并可以生成机器可读的结果。
干净的扫描不应取代修补。静态分析可能会错过动态生成的配置、扫描程序不可用的文件或第三方模块引入的行为。
NGINX 管理员的建议操作
- 将 NGINX Open Source 升级到 1.30.4 或 1.31.3,具体取决于所使用的分支。
- 将 NGINX Plus 升级到 R36 P7 或 37.0.3.1(如果适用)。
- 运行静态配置扫描器跨活动配置和包含的文件。
- 基于正则表达式的审查
map块以及对编号或命名捕获变量的所有引用。 - 检查部署系统、入口控制器、模板和自动化平台生成的配置。
- 监视重复的工作线程崩溃、HTTP 500 响应、异常连接突发和意外 NGINX 重新启动。
- 确认 ASLR 和其他操作系统内存保护保持启用状态,同时将它们视为额外的保护措施,而不是补丁的替代品。
组织应优先考虑面向互联网的反向代理、API 网关、负载均衡器和多租户系统。易受攻击的配置可以使这些系统暴露于未经身份验证的请求,而无需有效帐户。
管理员还应该在更新后验证正在运行的 NGINX 二进制文件的版本。在不重新启动服务的情况下替换包可能会使旧的工作进程在内存中保持活动状态。
由于配置对于可利用性至关重要,因此如果在修补之前发生可疑崩溃,安全团队应保留活动配置和相关日志。这些记录可能有助于确定该行为是否是由常规错误、扫描或尝试利用引起的。
FAQ
什么是 CVE-2026-42533?
CVE-2026-42533 是 NGINX 脚本引擎中依赖于配置的堆缓冲区溢出。精心制作的未经身份验证的请求可能会导致工作进程崩溃,并且在存在易受攻击的配置时可能允许信息泄露或远程代码执行。
哪些 NGINX 版本修复了 CVE-2026-42533?
NGINX 开源用户应在稳定分支上安装 1.30.4 版本,或在主线分支上安装 1.31.3 版本。已修补的 NGINX Plus 版本包括 R36 P7 和 37.0.3.1。
每个 NGINX 服务器都容易受到远程攻击吗?
不可以。服务器必须具有合格的配置,以不安全的评估顺序将正则表达式捕获与基于正则表达式的映射变量结合起来。仍然建议更新,因为暴露可能很难手动识别。
CVE-2026-42533可以用于远程代码执行吗?
F5 表示代码可以执行,特别是在禁用或绕过 ASLR 的情况下。安全研究人员报告称,在经过测试的 Ubuntu 环境中启用 ASLR 后,可以实现可靠的远程代码执行。
管理员如何保护 NGINX 服务器?
安装已修补的 NGINX 或 NGINX Plus 版本,扫描活动配置,检查正则表达式映射并捕获变量,更新后重新启动服务,并监视无法解释的工作程序崩溃或异常请求突发。
