Node.js 2026 年 6 月安全发布解析:11 个 CVE 全覆盖与 26.x/24.x/22.x 修复指南

Node.js 2026 年 6 月安全发布解析:11 个 CVE 全覆盖与 26.x/24.x/22.x 修复指南

【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org

本篇技术指南基于 nodejs.org 官方安全公告 june-2026-security-releases.md 撰写,系统梳理 Node.js 于 2026 年 6 月 18 日发布的安全更新:涉及 26.x、24.x、22.x 三条仍在维护的发布线,共修复 11 个 CVE(含 2 个高危、5 个中危、4 个低危),并同步升级 llhttp、nghttp2、openssl、undici 四个关键依赖。读完本文,你将掌握每个漏洞的成因、受影响版本、修复版本对应的具体提交,以及如何结合官方发布说明完成升级与验证。

一、发布概要:三条发布线、最高严重级别为 HIGH

根据安全公告,Node.js 项目于 2026 年 6 月 18 日(周四)发布安全版本,覆盖仍在维护的 26.x(Current)、24.x(LTS,代号 "Krypton")与 22.x(LTS,代号 "Jod")三条发布线:

发布线修复版本角色最高严重级别
26.xv26.3.1CurrentHIGH
24.xv24.17.0LTSHIGH
22.xv22.23.0LTSHIGH

三条发布线中,绝大多数 CVE 均影响全部受支持版本;仅个别 CVE 影响范围不同(详见下文各漏洞说明)。公告特别强调:每当发生安全发布时,End-of-Life(EOL)版本始终受影响

。因此确保系统使用最新版本至关重要,具体维护时间表可参照官方 Release Schedule(发布于 Node.js release 仓库)。

二、依赖更新清单:四个底层组件同步升级

本次安全发布同时更新了四个直接参与网络、加密与解析链路的底层依赖,以修复其中已公开的漏洞:

  • llhttp 9.4.2:应用于所有发布线。llhttp 是 Node.js 内置的 HTTP 解析器(C 语言实现),负责解析入站 HTTP 请求与出站响应,其解析逻辑的缺陷可能引发请求走私或内存安全问题。
  • nghttp2 1.69.0:应用于所有发布线。nghttp2 是 HTTP/2 协议栈,本次升级在 22.x 与 24.x 中被标记为SEMVER-MAJOR,并与 CVE-2026-48937(GOAWAY 后会话未清理)的修复提交一同落地。
  • openssl 3.5.7:应用于所有发布线。OpenSSL 提供 TLS、加密哈希与证书校验能力,升级覆盖了架构文件与源码(archs files + openssl sources),并附带一个 AIX 平台隐式声明修复。
  • undici(按版本分线升级):undici 是 Node.js 内置的 HTTP 客户端实现:
    • 26.3.1 升级到undici 8.5.0
    • 24.17.0 升级到undici 7.28.0
    • 22.23.0 升级到undici 6.27.0

也就是说,修复版本号因发布线而异,升级时务必以对应发布说明中列出的 undici 版本为准,不可跨线套用。

三、高危漏洞详解(2 个)

1. CVE-2026-48933:WebCrypto AES 整数溢出导致远程进程中止(DoS)

  • 严重级别:HIGH
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:Node.js WebCrypto 实现存在整数溢出缺陷。当subtle.encrypt()的输入长度是2GiB 的整数倍时,内部对输出缓冲区长度的计算会发生溢出,进而导致进程崩溃(Remote Process Abort)。
  • 修复思路:从发布说明的提交信息看,修复方式为 "guard WebCrypto cipher output length"(v26.3.1 发布说明),即对 WebCrypto 密文输出长度增加保护性校验,阻止超长输入触发溢出路径。
  • 致谢:由 erichen 报告,Filip Skokan(crypto 模块维护者)修复。

2. CVE-2026-48618:unicode 点分隔符处理导致 TLS 通配符深度认证绕过

  • 严重级别:HIGH
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:Node.js TLS 主机名校验在“解析器(resolver)”与“验证器(verifier)”之间对主机名的归一化(normalization)不一致。Unicode 点分隔符(如 U+3002、U+FF0E 等全角/竖排句点)在某些路径中被解析为域名分隔符、在另一些路径中则被当作普通字符,导致 TLS 通配符(wildcard)深度校验被绕过,可造成机密性影响或突破既定安全边界。
  • 修复思路:提交 "tls: normalize hostname for server identity checks",即在服务端身份校验前统一主机名归一化规则。
  • 致谢:由 tmeletlidis 报告,Matteo Collina 修复。

四、中危漏洞详解(5 个)

3. CVE-2026-48615:代理凭据泄露进 ERR_PROXY_TUNNEL 错误消息

  • 严重级别:MEDIUM
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:当代理 URL 中内嵌用户名密码(如http://user:pass@proxy:8080)时,代理隧道(CONNECT)失败产生的ERR_PROXY_TUNNEL错误消息可能携带这些凭据,进而被日志、诊断工具或其他错误消费方捕获泄露。
  • 修复思路:提交 "lib,test: redact proxy credentials in tunnel errors",在构造隧道错误时对凭据做脱敏处理。
  • 致谢:由 nssys 报告,Matteo Collina 修复。

4. CVE-2026-48619:node:http2 客户端因攻击者控制的 ORIGIN 帧无界内存增长

  • 严重级别:MEDIUM
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:HTTP/2 客户端允许服务端发送无限数量的 ORIGIN 帧(用于声明备选来源),导致客户端内存无界增长直至 Out of Memory。
  • 修复思路:提交 "http2: cap originSet size to prevent unbounded memory growth",即对originSet容量设置上限。
  • 致谢:由 kingsd 报告,Matteo Collina 修复。

5. CVE-2026-48937:HTTP/2 会话在无效协议错误后未清理(GOAWAY 后继续接收数据)

  • 严重级别:MEDIUM
  • 影响范围:仅 Node.js 22 与 24(注意:26.x 不受影响)
  • 漏洞机理:HTTP/2 服务器 API 在发送GOAWAY帧后仍持续接受数据,会话生命周期管理存在缺陷,可能与 nghttp2 升级引入的协议错误处理路径有关。
  • 修复思路:提交 "deps: fix integration issues with the latest nghttp2",随 nghttp2 1.69.0(SEMVER-MAJOR)一同发布。
  • 致谢:由 Tim Perry 报告并修复。

6. CVE-2026-48928:大写 SNI 上下文匹配导致 mTLS 授权绕过

  • 严重级别:MEDIUM
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:主机名匹配存在大小写不一致性,在多上下文(multi-context)mTLS 部署中可造成信任策略绕过——即本应区分不同 SNI 上下文(大小写不同)的场景被错误地当作同一上下文处理。
  • 修复思路:提交 "tls: fix case-sensitive SNI context matching",修正 SNI 上下文的区分逻辑。
  • 致谢:由 tmeletlidis 报告,Matteo Collina 修复。

7. CVE-2026-48930:内嵌 NUL 字节主机名导致静默权威重绑定

  • 严重级别:MEDIUM
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:解析器绑定(resolver bindings)使用 C 字符串处理主机名,遇到内嵌\0(NUL)字节时会被截断。攻击者可利用截断差异构造主机名,实现“静默权威重绑定”(silent authority rebinding),绕过预期的 TLS 主机名校验。
  • 修复思路:提交 "dns,net: reject hostnames with embedded NUL bytes",在 dns 与 net 层直接拒绝包含内嵌 NUL 字节的主机名。
  • 致谢:由 tmeletlidis 报告,Matteo Collina 修复。

8. CVE-2026-48934:不同 servername 复用 TLS 会话导致主机身份验证绕过

  • 严重级别:MEDIUM
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:TLS 会话复用(session reuse)场景下,若客户端以不同的 servername 复用既有会话,Node.js 可能跳过证书校验,导致未授权连接获得通过。
  • 修复思路:提交 "tls: bind reusable sessions to authenticated host",将会话与已认证的主机绑定,防止跨主机名复用;同时新增 "session reuse host verification regressions" 回归测试。
  • 致谢:由 3d7omb 报告,Matteo Collina 修复。

五、低危漏洞详解(4 个)

9. CVE-2026-48617:Permission Model 因 process.report.writeReport() 路径误校验被绕过

  • 严重级别:LOW
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:权限模型(Permission Model,通过--permission启动)对process.report.writeReport()写入路径的校验存在缺陷,可绕过既定文件权限边界,造成机密性影响。
  • 修复思路:提交 "permission: handle process.chdir on writereport",补上了写报告路径解析时对process.chdir的处理。
  • 致谢:由 suul 报告,RafaelGSS 修复。

10. CVE-2026-48935:Permission Model 经 FileHandle.utimes()(promises API)被绕过

  • 严重级别:LOW
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:即使在--allow-fs-read只读限制下,攻击者仍可通过 promises API 的FileHandle.utimes()修改文件元数据(mtime/atime),说明权限模型未覆盖该调用路径。
  • 修复思路:提交 "permission: disable FileHandle utimes with permission model",在权限模型启用时禁用该操作。
  • 致谢:由 muhammaddaffa 报告,RafaelGSS 修复。

11. CVE-2026-48936:Unix 域套接字服务器绕过 --permission 网络限制(CVE-2026-21636 修复不完整)

  • 严重级别:LOW
  • 影响范围:仅 Node.js 26
  • 漏洞机理:即使未授予--allow-net权限,攻击者仍可通过 Unix 域套接字(Unix domain socket)启动本地服务器。这是此前 CVE-2026-21636 修复的不完整修复(incomplete fix),说明权限模型的网络作用域校验在 pipe/套接字路径上仍有缺口。
  • 修复思路:提交 "permission: guard pipe open and chmod with net scope",为 pipe 打开与 chmod 操作补上 net 作用域检查。
  • 致谢:由 Vitaly Simonovich 报告,RafaelGSS 修复。

12. CVE-2026-48931:http.Agent 的 TOCTOU 竞态导致 HTTP 响应队列投毒

  • 严重级别:LOW
  • 影响范围:Node.js 22 / 24 / 26(全部支持线)
  • 漏洞机理:http.Agent存在检查-使用竞态(TOCTOU Race Condition),客户端可能在尚未发送请求之前就接受了先到的响应,造成响应队列投毒(Response Queue Poisoning)。
  • 修复思路:提交 "http: fix response queue poisoning in http.Agent",修正请求与响应的配对时序校验。
  • 致谢:由 yushengchen 报告,Matteo Collina 修复。

六、版本级修复对照:三个发布说明中的 Notable Changes

官方发布说明文件(仓库路径见下)是验证修复落地情况的一手依据。三个版本的安全修复提交高度一致,可通过各发布说明的Notable Changes与Commits

小节逐条核对:

  • v26.3.1(Current)发布说明:覆盖全部 11 个 CVE 修复提交,undici 升级至 8.5.0。
  • v24.17.0(Krypton LTS)发布说明:覆盖除 CVE-2026-48936(仅影响 26.x)外的全部修复,undici 升级至 7.28.0,nghttp2 以 SEMVER-MAJOR 升级至 1.69.0。
  • v22.23.0(Jod LTS)发布说明:与 24.x 修复集一致,undici 升级至 6.27.0,nghttp2 同以 SEMVER-MAJOR 升级至 1.69.0。

各发布说明末尾还附有完整的分平台产物清单(Windows/macOS/Linux/AIX/ARM 安装包与二进制)及 PGP 签名的 SHASUMS 校验块,用于下载后的完整性校验。

七、升级建议与安全运维要点

结合公告与发布说明,建议按以下流程处置:

  1. 确认受影响版本:检查运行环境node -v;凡处于 22.x(<22.23.0)、24.x(<24.17.0)、26.x(<26.3.1)的版本均需升级。
  2. 优先升级 EOL 版本环境:公告明确指出 EOL 版本在任何安全发布中“始终受影响”,无法获得修复,唯一出路是升级到仍受支持的发布线,维护周期以官方 Release Schedule 为准。
  3. 升级后验证依赖版本:执行npm ls undici(或检查process.versions相关字段)确认 undici 已到位——22.23.0 对应 6.27.0、24.17.0 对应 7.28.0、26.3.1 对应 8.5.0。
  4. 关注重点配置场景:本次修复集中的高风险面包括——TLS/SNI 多证书多上下文服务(CVE-2026-48618、48928、48934、48930)、WebCrypto 处理大块数据(CVE-2026-48933)、HTTP/2 服务端与会话复用(CVE-2026-48937、48619)、以及启用--permission的隔离环境(CVE-2026-48617、48935、48936)。生产环境若涉及上述场景,应优先安排升级窗口。

八、在 nodejs.org 仓库中的安全公告呈现机制

本仓库(nodejs.org,Node.js 官网源码)将安全公告作为博客的一个独立分类维护。从源码结构看,相关支撑包括:

  • 公告文档本体:存放于 apps/site/pages/en/blog/vulnerability/ 目录,按yyyy-mm-主题.md命名,frontmatter 中category: vulnerability标记分类,slug决定 URL 路径(本公告 slug 为june-2026-security-releases)。
  • 漏洞数据生成器:next-data/generators/vulnerabilities.mjs 从 Node.js Security Working Group 仓库拉取漏洞原始数据,通过V0_REGEX、VER_REGEX(如12.x)与RANGE_REGEX(如>= 20)解析vulnerable版本表达式,将漏洞按主版本号分组,供 EOL 页面等渲染使用。
  • 漏洞表格渲染:EOL/VulnerabilitiesTable.tsx 负责把分组后的漏洞数据渲染为表格,逐行展示 CVE 编号、严重级别徽章、描述与官方公告链接;严重级别由 VulnerabilityChip 组件可视化呈现。
  • RSS 订阅:vulnerability 分类可独立订阅为vulnerability.xmlfeed(见 BlogHeader 测试用例),便于运维人员第一时间跟踪新公告。

也就是说,本文所分析的 2026 年 6 月安全公告,正是这条“安全工作组数据 → 生成器分组 → EOL 表格 → 博客公告”链路中的一环;读者既可通过博客页面阅读公告全文,也可在 EOL 页面按版本查看历史漏洞的修复状态。若需报告新漏洞,可遵循官方 SECURITY.md 流程并订阅低流量的 nodejs-sec 公告邮件列表,以持续获取安全发布动态。

【免费下载链接】nodejs.orgThe Node.js® Website项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考