Brotli 解码器漏洞 CVE-2026-111497:Node.js 已在 10-21 修复,但 Agent CLI 自带运行时才是补丁盲区
Node.js 于 2026-10-21 修复 Brotli 解码器漏洞 CVE-2026-111497(定级 High)。但 Agent CLI 自带 Bun 运行时,升级系统 Node.js 并不会替换它。
2026-10-26 · Node.js 官方安全公告 / OpenCode v1.19.4 Release Notes / google-brotli Releases / oven-sh-bun Releases
发布 2026-10-26核实 2026-10-26要点
- 2026-10-21 Node.js 发布安全更新,其中 CVE-2026-111497 被描述为「Node.js Brotli decoder out-of-bounds write permits remote code execution」,Node.js 官方定级 high。
- 成因(官方原文口径):Brotli 解码器把「非法的 block switch」误报成「暂时需要更多输入」而非永久性格式错误,于是流式解码器持续往一个八字节内部缓冲区追加输入字节。能向
node:zlib提供 Brotli 数据的人可破坏进程内存,后果是崩溃、进程内存泄露或远程代码执行。 - 影响范围:官方公告只列 Node.js 26.x / 24.x / 22.x;修复版本为 22.23.4 / 24.22.1 / 26.12.1。
- 谁发现的:Node.js 公告致谢 OpenAI Codex Security 的 Khai Tran 与 Sylvie Mayer 报告该漏洞,由 mcollina 与 aduh95 修复。
- 上游同日补发:google/brotli 在 2026-10-21T19:26–19:27 UTC 这一分钟内连发 v1.0.10 / v1.1.1 / v1.2.1 三个版本线,而上一个正式版 v1.2.0 停在 2025-10-27——整整一年没有版本,补丁是集中补发的。
- Bun 次日跟进:bun-v1.4.4 于 2026-10-22T10:11:32Z 发布(上一版 bun-v1.4.3 为 2026-10-10)。
- 一手实锤落在 Agent 工具上:OpenCode v1.19.4(2026-10-22)官方 Release Notes 原文写明——「Upgraded the bundled Bun runtime to 1.4.4, which includes security fixes for Brotli, TLS, HTTP/1.1, HTTP/2, HTTP/3, WebSocket, and
fetch, and updates root certificates to NSS 3.131.1」。
为什么这条对用 Agent CLI 的人格外重要
关键在于一句话:你升级的 Node.js,和你实际在跑的那个解码器,可能不是同一份。
传统 Web 服务的补丁心智模型是「升级运行时 → 全站生效」。但 2026 年的 Agent CLI 普遍自带(bundle)一份运行时:Claude Code 自带 Bun、OpenCode 自带 Bun、Codex 是 Rust 单二进制。这份内嵌副本不会因为你在系统里 brew upgrade node 而更新——它由工具厂商在自己的发布流程里单独升级。
而 Agent 恰恰是最容易碰到这类攻击面的程序形态:
| 环节 | 传统服务 | Agent CLI |
|---|---|---|
| 谁触发解码 | 外部请求进站 | Agent 主动 fetch 网页 / 文档 / API |
| 解码发生在哪 | 模型看到内容之前 | 同样在模型看到正文之前——Content-Encoding: br 的响应先被解码,才交给模型 |
| 边界设备能否覆盖 | WAF 挡入站请求 | WAF 管的是别人发给你的请求,管不了你的 Agent 自己取回来的响应 |
| 补丁责任方 | 运维升级系统 Node | 工具厂商升级内嵌运行时,用户必须升级 CLI 本体 |
这意味着:一个只读文档、不碰你代码的「查资料」动作,本身就在扩大解码攻击面。 而这类动作在 Agent 工作流里恰恰是自动、高频、无人值守的。
组件对照:该更新的是哪一份
| 组件 | 修复版本 / 状态 | 证据来源 | 你该做什么 |
|---|---|---|---|
| Node.js | 22.23.4 / 24.22.1 / 26.12.1(10-21) | Node.js 官方公告 | 升级到对应版本线的修复版;注意版本线要对齐——Node 24 需要 24.22.1 或之后,不是「数字大于 22.23.4」就行 |
| Google Brotli 上游 | 1.0.10 / 1.1.1 / 1.2.1(10-21 同日) | google/brotli Releases | 自建解码链路的项目按自己的版本线对齐 |
| Bun | v1.4.4(10-22) | oven-sh/bun Releases | 独立安装的 Bun 用 bun upgrade |
| OpenCode | v1.19.4(10-22,内嵌 Bun 升至 1.4.4) | OpenCode 官方 Release Notes 原文 | 升级到 ≥ v1.19.4 |
| Claude Code | 未取得官方确认,见下方待核实 | — | 升级到最新 stable,但不要用版本号代替验证 |
同一份 Node.js 10-21 公告里还包含另一项值得注意的依赖更新:ca-cert(eMudhra Intermediate CA Compromise)。这一项与 Brotli 无关,但它指向同一个结构性问题——自带信任库的 CLI,其证书信任链更新同样独立于操作系统。
现在该做的四件事
# 1. 先数清楚这台机器上到底有几个 node(版本管理器很会藏旧版本)
for n in $(which -a node) ~/.nvm/versions/node/*/bin/node; do
[ -x "$n" ] && echo "$n $("$n" -v)"
done
# 2. 确认独立安装的 Bun 是否 >= 1.4.4
bun --version
# 3. 确认各 Agent CLI 本体版本(升级命令以各自官方安装文档为准)
claude --version
opencode --version # 需 >= v1.19.4
codex --version
# 4. 升级 CLI 本体(示例:Claude Code 为 claude update,Bun 为 bun upgrade)
claude update
两个容易漏的地方:
- CI 镜像与容器。本地升级了不等于流水线升级了,Agent 跑在 CI 里同样是自带运行时。
- 长驻进程。已加载旧解码库的进程在重启前会一直持有旧版本内存映像,升级后必须重启。
AI 之家 观点
- 「自带运行时」是 Agent 工具被低估的一层供应链。 过去我们讨论 AI 工具的安全,集中在「模型会不会被提示词注入」和「沙箱能不能拦住 shell」。这次的 Brotli 漏洞提醒的是更下面一层:Agent 是一个会主动去互联网取数据的程序,它自带的那份解码器、证书库、HTTP 栈,都是需要单独跟踪补丁的第三方组件。
- 「版本号合规」不等于「二进制合规」。 一个团队完全可能做到「系统 Node 已是 26.12.1」,同时跑着一个内嵌未修复解码器的 CLI。合规审计如果只查系统运行时版本,这份报告是假的。 建议把「CLI 本体版本」单独列进资产清单,并要求厂商在 Release Notes 里明示内嵌运行时版本——OpenCode 这次的做法(直接在 Release Notes 写出 bundled Bun 1.4.4)值得其他工具学习。
- 别把「厂商没说」当成「厂商没修」,也别把「第三方测出来」当成「官方确认」。 本站核对 Claude Code 的 v2.1.308 / v2.1.309 / v2.1.310 官方 Release Notes,均未出现 Bun 或 Brotli 字样。因此本站不采用「某版本起已修复」的第三方结论,只给出可执行的动作:升级到最新 stable,并保留你自己的验证证据。
相关阅读
- 工具卡:Claude Code · OpenCode · Codex
- 概念:Agent 沙箱 · 提示词注入 · MCP 协议
- 相关资讯:Claude Code 底层换用 Bun 运行时(2026-07-22,本文是其后续)
来源
- Node.js — Wednesday, October 21, 2026 Security Releases(官方公告,CVE-2026-111497 一手出处)
- google/brotli Releases(v1.0.10 / v1.1.1 / v1.2.1,2026-10-21)
- oven-sh/bun Releases(bun-v1.4.4,2026-10-22)
- Bun v1.4.4 Release Notes(Bun 官方博客)
- OpenCode v1.19.4 Release Notes(内嵌 Bun 升至 1.4.4 的一手出处)
- Claude Code Releases(本站核对 2.1.308–2.1.310,Release Notes 未提及 Bun / Brotli)
待核实:① Claude Code 内嵌 Bun 的版本,以及从哪个版本起包含修复——本站未取得官方说明,第三方以二进制字符串标记测试推断「2.1.306/2.1.307 未修、2.1.308 已修」,该结论未获官方确认,本站不采信为事实。② **CVSS 9.2(Critical)**系第三方转引的 Google CVE 记录口径,Node.js 公告自身定级为 high,两者不矛盾但勿混用。③ 是否存在实际在野利用,本站未取得权威结论。④ 本次修复仅覆盖 22.x / 24.x / 26.x(官方公告原文),未覆盖的旧版本线需另行处置。