背景:
前端环境所使用的 Node.js 版本存在安全问题。
请协助排查 node.js 安全漏洞 de1 影响范围,具体排查信息如下:
一、CVE-2026-111497
受影响版本中,Node.js 存在安全漏洞 ,该漏洞源于 Node.js 内置 的 Brotli 解码器 存在 缓冲区溢出 ,攻击者可通过构造恶意 Brotli 压缩流 ,触发 Node.js 内置 Brotli 解码器 的 越界写入 。
影响版本:
Node.js:
22.0.0 <= version < 22.23.4
24.0.0 <= version < 24.22.1
26.0.0 <= version < 26.12.1
Google Brotli 库:
1.0.3 <= version < 1.0.10
1.1.0 <= version < 1.1.1
1.2.0 <= version < 1.2.1
二、CVE-2026-106069
受影响版本中,Node.js 存在安全漏洞,攻击者可构造包含前导零的非规范 IPv4 地址 (如0127.0.0.1),利用 Node.js 对主机名规范化规则 与 操作系统解析器 不一致的缺陷,绕过 TLS 证书校验 ,伪装为合法服务器实施中间人攻击 。
影响版本:
22.0.0 <= version < 22.23.4
24.0.0 <= version < 24.22.1
26.0.0 <= version < 26.12.1
三、CVE-2026-105483
受影响版本中,Node.js 存在安全漏洞 ,攻击者可通过构造非 ASCII 字符 的主机名绕过TLS ,利用包含通配符的证书 在非法 IP 端点进行中间人攻击 和 数据窃取 。
影响版本:
Node.js:
24.0.0 <= version < 24.22.1
26.0.0 <= version < 26.12.1
四、CVE-2026-105482
受影响版本中,Node.js 存在安全漏洞 ,该漏洞源于 Node.js DNS 模块的边界处理缺陷 ,攻击者可构造包含 NULL 字节的恶意域名 ,利用 Node.js DNS 解析模块 的缺陷,绕过域名白名单验证机制。
影响版本:
Node.js:
22.0.0 <= version < 22.23.4
24.0.0 <= version < 24.22.1
26.0.0 <= version < 26.12.1
@所有人 排查下
当前项目 node 使用的 22.14.0 版本
验证一下能否复现问题
这个有用到没
有用到:node 22.14.0 内置的 Brotli 版本是 1.1.0
询问 Gemini:
这个问题前端能复现吗?然后我该如何自测我项目里使用的 node 版本有没有其中的问题呢?以及最后应该如何解决呢?假如要升级node版本,对已经上线的版本包重新打包替换会有影响啥的吗?帮我看一下,综合整理解决方案。
针对您提到的四个 Node.js 安全漏洞(CVE-2026-111497、CVE-2026-106069、CVE-2026-105483、CVE-2026-105482),结合您提供的截图和当前使用的 Node.js 版本(如截图中提到的
22.14.0,落在了22.0.0 <= version < 22.23.4的受影响范围内),以下为您进行全面的排查解答与综合解决方案:一、 这个问题前端能复现吗?
结论:纯前端代码(运行在浏览器中的 SPA、Vue / React 页面)通常无法直接在浏览器沙箱环境中复现 或 触发这些底层漏洞,但如果在特定的工程化 或 服务端渲染(SSR)场景下,则存在间接风险。
为什么浏览器端难以直接复现:
- 这些漏洞(如 Brotli 缓冲区溢出、IPv4 前导零证书校验绕过、非 ASCII 主机名 TLS 绕过、DNS 模块 NULL 字节注入)全部存在于 Node.js 运行时底层(Runtime) 的 C++ 模块 、网络模块(
net/tls/dns)或 内置解压模块中。浏览器有自己独立的网络栈 和 解析引擎,不直接执行 Node.js 的底层代码。在什么情况下会受影响 / 可被利用:
服务端渲染(SSR)与 API 网关: 如果您的项目使用了 Node.js 做 SSR(如 Nuxt.js、Next.js)或 充当后端 BFF 网关,当它在 服务端 去 请求外部接口、解析恶意的 DNS 记录、或者 解压恶意的 Brotli 响应流时,就会触发漏洞。
前端工程化与本地构建 / 打包工具: 如果本地开发环境 或 CI / CD 构建流水线使用的 Node.js 版本处于受影响区间,在执行某些依赖下载 、网络请求 或 本地构建插件 时,如果遭遇恶意依赖投毒 或 恶意中间人攻击 ,可能会在 打包 / 构建阶段被攻击。
二、 如何自测项目里使用的 Node 版本有没有问题?
您可以采用以下几种方法快速自测:
1. 检查当前环境的 Node.js 版本
在终端(Terminal)中运行以下命令查看当前使用的 Node 版本:
bashnode -v
对照排查:
如果输出在
22.0.0至22.23.4之间(例如截图中的v22.14.0),则命中 CVE-2026-111497 、CVE-2026-106069 和 CVE-2026-105482 的 受影响范围。如果输出在
24.0.0至24.22.1或26.0.0至26.12.1之间,则四个漏洞均受影响。2. 在项目工程中锁定与检查版本
为了防止团队成员本地环境 或 CI 编译环境版本不一致,建议在
package.json中明确指定引擎版本:
java"engines": { "node": ">=22.23.4" }同时,可以通过编写简单的脚本 或 直接在 Node 交互式环境(REPL)中验证内置库的表现(例如检查 Brotli 或 解析行为)。
三、 发现问题后该如何解决?
1. 升级 Node.js 版本(首选、最根本的修复方案)
官方已经针对这些漏洞发布了修复版本。您需要将 Node.js 升级到安全版本以上:
Node.js 22 系列 :升级至 >= 22.23.4
Node.js 24 系列 :升级至 >= 24.22.1
Node.js 26 系列 :升级至 >= 26.12.1
升级方式推荐:
使用 NVM (Node Version Manager) 进行版本管理 和 切换:
bashnvm install 22.23.4 nvm use 22.23.42. 临时应急缓解措施(如果暂时无法升级 Node)
针对 Brotli 漏洞(CVE-2026-111497): 在应用层限制 或 禁用对不受信任来源的 Brotli 压缩流解压,或者在网关层 进行流量过滤。
针对网络和 DNS 漏洞(CVE-2026-106069 / CVE-2026-105482): 严格校验输入的主机名格式 ,过滤包含前导零的 IPv4 地址 和 带有 NULL 字节的恶意域名。
四、 升级 Node 版本后,对已上线版本包重新打包替换会有影响吗?
对于 前端 / BFF 项目,升级 Node.js 版本并重新打包上线,通常需要注意以下几点,评估潜在影响:
V8 引擎与语法兼容性:
- 如果跨越了较大的 Node 版本(例如从 Node 16 / 18 跨到 Node 22),V8 引擎升级可能会带来某些底层 JavaScript 语法 、内置 API 或 属性特性 的微小变化。但如果是 同主版本内的小版本升级 (例如从
22.14.0升级到22.23.4),API 兼容性极高,一般 不会导致语法报错 或 代码不兼容。原生依赖(Native Modules)编译:
项目中如果包含依赖 C++ 插件的 npm 包(如
node-sass、bcrypt、某些 canvas 库等),升级 Node 版本后,它们的 ABI(应用程序二进制接口)版本可能会发生变化。建议: 在升级 Node 版本后,务必 删除
node_modules和package-lock.json(或pnpm-lock.yaml),然后重新执行安装 和 打包:
bashrm -rf node_modules package-lock.json npm install npm run build流水线与生产环境一致性:
- 确保 CI / CD 构建服务器 (如 Jenkins、GitLab CI、GitHub Actions、Docker 镜像基础镜像)中的 Node.js 运行环境也同步升级到了安全版本。如果本地升级了但 CI 镜像没升级,构建出来的产物仍然可能带有隐患 或 由于版本差异 导致构建失败。
回归测试建议:
- 重新打包替换上线前,建议在测试环境 (Staging)对核心业务流程 进行冒烟测试 ,重点关注:页面路由 跳转、网络请求(API 代理 与 数据交互)、文件上传下载、以及依赖构建的稳定性。

