Brotli 解码器越界写入
解压攻击者可控的 Brotli 数据时可能发生越界写入,进而可能导致代码执行。
说人话: 有人往马桶里冲了块砖,管子直接在你机房里爆了。
Node.js 10月安全更新覆盖 22、24、26 三条版本线:十个 CVE,含一个 Brotli RCE 和两处 TLS 主机名校验绕过
四个高危、三个中危、三个低危。Brotli 解码器越界写入,dns.resolve 遇到 NUL 字节就把域名截断,还有几种 IP 写法能混过证书主机名校验。这次发版还会拒绝已失陷的 eMudhra 密钥。其他内置 Brotli 的产品也需分别修补。
给服务器发一个精心构造的 Brotli 压缩请求体,它就会写出缓冲区边界;或者拿出一张 IP 写得稀奇古怪的证书,Node 可能会把它认作某个主机的证书,哪怕它根本不属于那个主机。
看着像一次例行安全更新,里面却夹着几个狠角色。头号问题是 Brotli 解码器的越界写入(CVE-2026-111497)。凡是会解压不可信 Brotli 数据的地方,比如 HTTP 请求体、上传文件或代理转发的响应,都应该按远程代码执行风险来对待。
另有两个互不相干的漏洞(CVE-2026-105483 和 CVE-2026-106069)能让一些不寻常的 IP 写法通过 TLS 主机名校验。这项校验的作用,就是确认证书确实属于你要连的那台服务器。
同一批发版还带了一个 ca-cert 更新,会拒绝包含已失陷 eMudhra 密钥的 TLS 证书链,详见 eMudhra 事件。已经恢复的 TLS 会话不会重新校验,所以升级后要重启服务。
我们定为 L4:核心运行时存在能远程触达的内存漏洞,CISA 现已确认底层 Brotli CVE 遭利用,但没有说明遭攻击的具体下游产品。
10月23日更新: Imperva 在 10月22日的演示中,通过获取的响应及已配置的请求解析器,在官方 Linux arm64 构建上实现 RCE。这是实验室证据,不是确认的攻击。演示没有验证其他架构或版本线。修复版本和 L4 评级不变。
10月24日更新——Node.js 之外的同一 Brotli 漏洞: 下列产品也内置了受影响的解码器。暴露仍需要解码攻击者可控的数据。Python HTTP 客户端在安装可选解码器后可能自动启用 Brotli;Envoy 和 Istio 需要配置 Brotli 解压。上方 Node 检查器仅覆盖 Node.js,不能检查这些独立的软件包。
| 产品 | 修复方式 |
|---|---|
| Google Brotli C 库 | 按对应版本线升级至 1.0.10 / 1.1.1 / 1.2.1 |
| Bun | 1.4.4 |
| Python Brotli / brotlicffi | 1.2.1 / 1.2.1.0;检查锁文件及已安装环境 |
| Envoy | 1.40.0 / 1.39.3 / 1.38.6 / 1.37.8 / 1.36.12 |
| Istio | 1.31.2 / 1.30.6 / 1.29.9 修补 Brotli;1.29 已停止维护,应规划迁移 |
| cdxgen 独立二进制及镜像 | 12.8.9 / 13.5.0;核实内置运行时,不能只检查宿主 Node |
| PHP Windows 软件包 | 8.5.12-1 / 8.4.27-1 / 8.3.36-1 / 8.2.35-1;需核实软件包修订号,不能只看 php -v |
| Debian 13(trixie)brotli 包 | 1.1.0-2+deb13u1;发行版移植补丁使用不同版本号 |
cdxgen 公告涉及扫描指向外部 podspec 的不可信仓库,以及服务器模式下 /sbom 在认证前解码 Brotli 请求体。12.8.8 二进制原本计划修复,却仍内置 Node.js 24.18.0。npm 安装使用宿主运行时。仅升级宿主 Node 不能修复内置运行时的可执行文件或镜像。本次扩大的是受影响产品指引,并未扩大已演示的利用范围:Imperva 的实验室结果仍限于测试过的 Node 构建,这些下游公告本身未证实真实攻击;后续 CISA 对 Brotli CVE 的利用确认见下文。
10月25日更新——Go 和 .NET: Go 移植库 github.com/andybalholm/brotli 在 10月23日通过提交 33c2a98 修复同一无效块切换逻辑,标签 v1.2.7 包含该修复。上游报告者推测 Go 的边界检查可能将影响限制为 panic,但并未复现这一结果。Node.js 的 RCE 演示不能证明 Go 也能 RCE。应清点依赖和解码可达性,然后更新并重建受影响二进制。框架仅依赖该库编码响应,并不能证明请求解码存在暴露。
Microsoft 在 10月25日通过 .NET 8.0.33 / 9.0.22 / 10.0.14 / 11 RC3 修复 Brotli。暴露需要通过请求解压、HttpClient 响应解压或 Brotli API 处理恶意输入,前两项默认关闭;.NET Framework 不受影响。Microsoft 描述的可能影响为内存泄露或破坏、拒绝服务及权限提升,并未演示 .NET RCE。依赖共享运行时的应用须重启,自包含应用及容器须重建,因为其中仍保留内置运行时。这些下游补充不能独立证实 Go 或 .NET 遭利用,也不会改变仅适用于 Node 的版本检查器。
10 月 28 日更新: CISA 已于 10 月 27 日将 CVE-2026-111497 加入 KEV,因此此前未确认利用的判断不再适用于整个 Brotli 漏洞。联邦处置期限为 11 月 10 日;勒索软件使用情况未知,条目未明确被利用的运行时或产品,不能据此认定 Go 或 .NET RCE。Go 维护者也于 10 月 26 日发布 GHSA-c9gr-gmg4-2vqv:1.2.7 之前版本可能 panic,但公告未提供 PoC,且说明维护者没有测试触发输入。原有十个 Node CVE 和各运行时修复仍然适用。
PHP 10 月 26 日的 Windows 重建通过 cURL 依赖修复这个 Brotli CVE,不是针对独立的 PHP2Shell 引擎 CVE 的新修复。自动响应解压默认关闭,但调用者可以开启。PHP 源码及运行时版本不变,应核实 Windows 软件包的 -1 修订号与依赖来源。
11 月 1 日补充——Siemens Industrial Edge: 10 月 30 日发布的 SSA-443410 涉及同一 Brotli CVE。未安装 Management Applications 的 IEM 及 IEDK 不暴露受影响功能,按此公告无需操作。已安装管理应用时,应按上方指引卸载或停止相关应用,并使用防火墙或 WAF;当时本地修复仍待提供;下文 11 月 6 日更新已取代该可用性评估。Siemens 将 Management Cloud 和 Hub 的集中修复日期分别列为 10 月 28 日、29 日,无需客户操作。本次补充产品处置措施,不能证明 Siemens 部署已遭利用。仅适用于 Node 的检查器及原有各运行时修复均保持适用。
11 月 3 日补充——监控产品: 这些是此前遗漏的下游处置说明,并非新增 CVE,也不是这些厂商遭攻击的证据。New Relic 于 10 月 27 日首次发布 NR26-11;Dynatrace 的精确构建清单标注日期为 10 月 28 日。
New Relic 列出的自动更新范围为非脚本式 API 监控、使用 Node 22.20.0 的脚本、已停用脚本及浏览器监控。无需操作的说明仅适用于已使用最新运行时的公有监控,其他旧脚本需检查。仍使用 Node 16 的已启用脚本式 API 监控,需由客户在 11 月 18 日前迁移至 Node 22.23.4,脚本可能需要兼容性修改。私有位置需拉取更新后的 newrelic/synthetics-node-api-runtime 及 newrelic/synthetics-node-browser-runtime 镜像并重启容器,包括固定到旧标签的部署。公告称,SJM 和 ping-runtime 虽可能被扫描器标记,但不可利用;计划中的 SJM v642 和 ping-runtime 1.87.0 告警清理版本,并非解码器漏洞所需的处置。Node 版本检查器不会检查这些容器。
Dynatrace OneAgent 在 RUM 注入时使用 Brotli 解压。公告要求攻击者先攻破内部系统,再拦截并注入恶意 HTTP 响应;仅有公网客户端请求不足以触发该路径。公告称,Managed、ActiveGate 和 Operator 等其他边缘组件不受影响。请更新受支持的代理;若关闭了自动更新,需手动安装。已停止支持的版本不会获得安全更新。
| OneAgent 版本线 | 补丁构建 |
|---|---|
| 1.347 | 1.347.70.20261023-222553 |
| 1.345 | 1.345.93.20261023-231338 |
| 1.343 | 1.343.124.20261024-104447 |
| 1.341 | 1.341.95.20261023-230948 |
| 1.339 | 1.339.97.20261023-232755 |
| 1.337 | 1.337.88.20261023-234206 |
| 1.335 | 1.335.92.20261024-143703 |
| 1.333 | 1.333.84.20261024-143953 |
| 1.331 | 1.331.71.20261024-160156 |
| 1.329 | 1.329.98.20261024-105343 |
| 1.327 | 1.327.84.20261024-092025 |
| 1.325 | 1.325.91.20261024-215713 |
Istio 发版说明更正: 较早的 Brotli 公告曾将 1.29.9 称为最后一版,之后的 eMudhra 公告又提供了例外发布的 1.29.10。因此,1.29.9 应理解为 Brotli 修复门槛,并非 1.29 最新构建。还应遵循独立的证书处置指引;1.29 仍已停止维护。
11 月 3 日 Go 修正: 报告者现称以特制输入在 github.com/andybalholm/brotli 1.2.6 复现 panic 和无限循环;1.2.7 对相同输入返回 BLOCK_SWITCH。维护者确认收到报告并修订 GHSA-c9gr-gmg4-2vqv,纳入两种结果,取代上文此前未测试触发条件的评估。无限循环可占满一个 CPU 核,不能用 recover() 捕获。触发数据流尚未公开。须更新 Go 依赖、重新构建并核实部署二进制;这不证明 Go RCE,也不确立 Go 移植版已遭在野利用。所有 Node 及其他下游修复仍适用。
11 月 4 日 Dynatrace 更新: 厂商现称 HTTP2Shell 分析结束,所有受影响系统已修补。这是厂商完成声明,不能独立证明客户管理的代理均已更新。上述十二个最低构建未变,同一受支持版本线的更高构建亦可;关闭自动更新的客户仍须安装。RUM 响应拦截前提及停止支持版本的提醒继续适用。
11 月 5 日跟进——VeloCloud Orchestrator: Arista 11 月 2 日的公告 0202 涉及同一 CVE-2026-111497。受影响范围是 6.4.2 版本线的 6.4.2.13 及更早构建、6.1.3 的 6.1.3.11 及更早构建,以及 5.2.3 的 5.2.3.19 及更早构建。分别升级至 6.4.2.14/6.1.3.12/5.2.3.20 或同一版本线的更高构建。这些四段式设备构建号不能通过 Node 版本检查器检查。Arista 没有提供临时缓解方法。
VCO 必须通过启用自动解压的出站 HTTP 客户端处理恶意 Brotli 响应,来源可能是遭入侵或攻击者控制的 Symantec、Zscaler 或 Azure Non SD-WAN Destination 集成,也包括客户端跟随的重定向。可信端点即使配置未变,也可能遭入侵。Arista 尚未在已检查的入站 API 请求路径中发现 Brotli 解码;仅有公网可达性不能证明这种暴露。公告将 EOS 产品、Wi-Fi 接入点、CloudVision Portal(CV-CUE 仍在调查)、CloudVision as-a-Service、AGNI 和 VeloCloud Gateway 列为不受影响。另行调查的产品包括 VeloCloud Edge、CloudVision CUE、设备软件、MOS、CCF/DMF/MCD、NDR、Edge Threat Management 及 NetVisor;调查不等于确认有漏洞。公告没有确立 VCO 遭攻击,也不能替代独立的 VCO SQL 注入处置。此前所有运行时修复及期限继续适用。
11 月 5 日补充——Desigo CC: Siemens 于 11 月 4 日将 V8/V9 全部版本加入 SSA-045512。按公告通过 Windows Update 修补 .NET,并监督验证。这是同一 Brotli CVE 的受影响产品处置补充,不证明 Desigo 已遭利用。
11 月 5 日 VMware solution 范围: Google 的 GCP-2026-079 确认,运行 VCF 9.1.x 的 VMware solution on Google Cloud 存在 SDDC Manager 暴露,明确排除 Google Cloud VMware Engine。这是同一 Brotli CVE 的下游处置,不是新的泄露,也不能证明 Google 服务中已遭利用。Broadcom 较早响应矩阵另涵盖 5.2.x、9.0.x/9.1.0,补丁仍列待发布;9.1.1.x 的 CVSS 3.1 为 9.8,较早版本线为 7.5。这些设备评分不替代通用 Node 评估。应应用上方对应临时流程,不能认为 Node 版本检查器已处置设备。
Keycloak 下游修复: 11 月 5 日官方 26.8.2 发布记录明确列出捆绑 Brotli 解码器的 CVE-2026-111497。这是另一个独立打包的消费者,升级 Node 不会更新 Keycloak。按发布页关联迁移指南处理,核实实际上游构建;Red Hat 下游构建须使用自身勘误。仅凭发布说明不能确定完整受影响版本范围、针对 Keycloak 的在野利用或所有配置的解码暴露路径。独立的 SAML 重定向漏洞见对应事件。
11 月 6 日 Siemens 更新: SSA-443410 V1.1 公布上方六项 Industrial Edge 应用修复,新增 DataXess Configurator,并区分设备应用和管理应用。CC on Edge 及 CC on IEM 仍未修复,停止、卸载及防火墙/WAF 指引仍须遵循。SSA-045512 V1.2 新增 Gridscale X DSA 5.3 至 5.4 之前版本(修复于 5.4),以及 PSS E 36.8.0 之前版本(修复于 36.8.0)。Desigo V8/V9 仍须通过 Windows Update 安装当前 .NET 更新。这些更新涉及同一 Brotli 漏洞,不证明 Siemens 部署遭利用;检查器继续仅适用于 Node 版本。
11 月 6 日交叉核查: New Relic NR26-12 针对另一篇 eMudhra CA 信任事件。其 Private location 处置要求更新四项镜像,包括 SJM 和 ping,不受上方 Brotli 评估影响。它所列 Synthetics 迁移运行时 22.23.0 不取代 NR26-11 的 22.23.4 Brotli 指引;两项公告均须满足。
解压攻击者可控的 Brotli 数据时可能发生越界写入,进而可能导致代码执行。
说人话: 有人往马桶里冲了块砖,管子直接在你机房里爆了。
含 NUL 字节的主机名会被截短,你校验的名字和实际解析的名字不是同一个。
用全角数字写的 IP 地址可以通过 TLS 主机名校验。仅影响 24.x 和 26.x。
能被宽松解析成 IP 地址的主机名可以溜过 TLS 主机名校验。三条版本线都受影响。
keep-alive 套接字可能会处理一个在请求发出之前就已写入的响应。影响 22.x、24.x 和 26.x。
DNS SAN 可以借助非规范写法的 IPv4 主机名为 IP 端点做身份认证。影响 22.x、24.x 和 26.x。
启动快照和 SEA 会把 randomUUID、randomInt 的熵缓存一并保存下来,导致不同进程生成重复的值。影响 22.x、24.x 和 26.x。
ZipFile 在头部校验失败后仍可能返回攻击者可控的前缀字节。影响 26.x。
通配符的基数树(radix)查找可能授予过多的文件系统权限。影响 26.x。
fs.realpathSync 可以绕过权限模型(Permission Model)。影响 22.x、24.x 和 26.x。
GHSA-c9gr-gmg4-2vqv维护者现将 1.2.7 以前的影响列为 panic 或无限循环拒绝服务。报告者在 1.2.6 复现两者,触发流只提供私下分享,未公开;未确立 Go RCE。
在每台机器上运行 node -v,然后输入版本号,或者点一个最接近的。
| 分支 | 安全版本 | 状态 |
|---|---|---|
| Node.js 26 | 26.12.1 | Current(最新版) |
| Node.js 24 | 24.22.1 | 活跃 LTS |
| Node.js 22 | 22.23.4 | 维护期 LTS |
| Node.js 20 及更早版本 | none | 已停止维护,受影响,不会修复 |
2026年10月21日
Node.js 为 22、24、26 发布安全更新
一共十个 CVE,另外升级了 c-ares、ca-cert、OpenSSL(22/24)、SQLite(22)和 Undici 等依赖。
2026年10月21日
内置 CA 证书库更新到 NSS 3.131.1
包含那八个已失陷 eMudhra 密钥的 TLS 证书链,现在一律拒绝。
2026年10月22日
Imperva 在官方构建上演示 Node2Shell
在 Node.js 24.22.0 Linux arm64 上复现 RCE;24.22.1 拒绝相同输入。成功需要多次尝试。
2026年10月22日
下游 Brotli 及内置运行时修复发布
Bun 1.4.4、Python Brotli 1.2.1 / brotlicffi 1.2.1.0 及 cdxgen 12.8.9 修补各自受影响的副本。
2026年10月23日
Envoy 和 Python 公告说明更多暴露路径
Envoy 发布 GHSA-3wvj-j6qm-62mr;PyPA 加入 PYSEC-2026-4322 和 PYSEC-2026-4323。Debian trixie 和 cdxgen 13.5.0 修复也已发布。
2026年10月23日
Go Brotli 移植解码器检查
andybalholm/brotli 提交 33c2a98 对应标签 v1.2.7,会拒绝无效的块切换;未证实 Go 影响可达到 RCE。
2026年10月25日
Microsoft 发布 .NET Brotli 修复
.NET 8 升级至 8.0.33,9 升级至 9.0.22,10 升级至 10.0.14,11 RC2 升级至 RC3;.NET Framework 不受影响。
2026年10月26日
Go 维护者发布 GHSA-c9gr-gmg4-2vqv
将畸形数据 panic 归为潜在拒绝服务;维护者未测试触发输入。
2026年10月26日
PHP 用 Brotli 1.2.1 重建 Windows 软件包
8.5.12-1 / 8.4.27-1 / 8.3.36-1 / 8.2.35-1 更新依赖,不改变 PHP 运行时版本字符串。
2026年10月27日
CISA 将 CVE-2026-111497 加入已利用漏洞目录
联邦处置期限为 11 月 10 日;勒索软件使用情况未知,条目未列出遭利用的下游产品。
2026年10月27日
New Relic 公布 Synthetics 处置指引
NR26-11 区分已自动更新的公有监控、需在 11 月 18 日前迁移的已启用 Node 16 脚本,以及需刷新并重启的私有运行时镜像。
2026年10月28日
Dynatrace 列出 OneAgent 补丁构建
十二条受支持的 OneAgent 版本线均有补丁构建;利用需在 RUM 注入路径拦截并注入恶意 Brotli 响应,仅有公网客户端请求不足以触发。
2026年10月28日
Siemens 在云端集中修复 Industrial Edge Management Cloud
2026年10月29日
Siemens 在云端集中修复 Industrial Edge Hub
2026年10月30日
Siemens 公布 Industrial Edge 应用缓解措施
SSA-443410 区分了暴露的管理应用与未安装这些应用的 IEM;本地应用修复仍未提供。
2026年11月2日
Arista 发布 VeloCloud Orchestrator 的 Brotli 修复
公告 0202 将受影响的 6.4.2、6.1.3 和 5.2.3 版本线分别修复于 6.4.2.14、6.1.3.12 和 5.2.3.20。暴露要求自动解压恶意出站响应,不是已检查的入站 API 路径。
2026年11月3日
Go 维护者将无限循环纳入公告
报告者在 1.2.6 复现 panic 或解码器不返回,维护者随后修订公告;1.2.7 拒绝相同输入,触发样本未公开。
2026年11月4日
Dynatrace 宣布分析和修补完成
厂商称 Brotli 调查已结束,所有受影响系统已修补;OneAgent 最低构建和手动更新要求继续有效,不能证明每位客户均已安装。
2026年11月4日
Siemens 将 Desigo CC V8 及 V9 加入受影响产品
SSA-045512 V1.1 要求这两个系列通过 Windows Update 安装当前 .NET 安全更新。
2026年11月5日
Google 确认 VMware solution 暴露并要求应用 SDDC 缓解
GCP-2026-079 涉及使用 VCF 9.1.x 的 VMware solution on Google Cloud,不涉及 Google Cloud VMware Engine;Broadcom 原有分版本缓解仍须应用,其响应矩阵仍列补丁待发布。
2026年11月5日
Keycloak 在 26.8.2 列出捆绑 Brotli 修复
官方发布说明列出捆绑 Brotli 解码器的 CVE-2026-111497;这是新增下游升级路径,不代表已确认针对 Keycloak 的利用。
2026年11月6日
Siemens 发布 Industrial Edge 修复并新增 Gridscale X 影响
SSA-443410 V1.1 修复六项应用,CC on IEM 及 CC on Edge 仍待修复;SSA-045512 V1.2 新增 Gridscale X DSA 及 PSS E 的产品升级下限。未确立针对 Siemens 的利用。
我们列出每条说法和它的出处,并标出一手来源(厂商、研究人员、软件仓库)。各方说法不一致时,按最坏的可信情况定级。