Node.js 2026年1月13日安全发布修复多个高严重性运行时和权限缺陷

ReactNode.jsDevOps

TL;DR — Node.js项目于2026年1月13日为活跃发布线(20.x、22.x、24.x、25.x)发布了协调安全发布。修复包括三个高严重性CVE(特别是一个缓冲区分配竞争条件,可能暴露未初始化的内存,以及一个精心构造的符号链接绕过权限模型),以及多个影响HTTP/2、TLS回调处理、Unix域套接字权限检查等的中/低问题。升级到修补版本并验证隔离/错误处理代码路径应被视为紧急操作任务。 (nodejs.org)

发生了什么(简短)

  • 针对Node.js发布线20.x、22.x、24.x和25.x的协调安全更新(多个CVE;3个高,4个中,1个低)。 (nodejs.org)
  • 高严重性亮点:
    • CVE-2025-55131 — 缓冲区分配中的竞争:在某些超时/并发条件下,Buffer.alloc() / TypedArray可能在零初始化之前可观察到,风险泄露进程中的秘密。 (nodejs.org)
    • CVE-2025-55130 — 精心构造的相对符号链接链可以绕过权限模型的--allow-fs-*限制并逃离文件系统边界。 (nodejs.org)
    • CVE-2025-59465 — HTTP/2 HEADERS帧中的格式错误HPACK可能触发未处理的TLSSocket错误,导致进程崩溃(远程DoS)。 (nodejs.org)
  • 其他重要修复包括async_hooks堆栈溢出处理、TLS客户端证书内存泄漏、使用权限模型的UDS权限绕过,以及PSK/ALPN回调异常处理。 (nodejs.org)

您应该安装的修补版本(下载列表)

  • 20.20.0, 22.22.0, 24.13.0, 25.3.0 — 将您运行的发布线升级到相应的修补版本。 (nodejs.org)

为什么这对全栈团队很重要

  • 保密性:缓冲区分配错误可能导致秘密(令牌、密钥、会话数据)泄露,如果缓冲区在零初始化之前被暴露或序列化。这在高并发或超时限制的环境中并非纯理论。 (nodejs.org)
  • 隔离保证:依赖Node的权限模型进行沙箱或多租户隔离的团队必须假设符号链接遍历和UDS路径之前是可以绕过的——信任边界需要重新验证。 (nodejs.org)
  • 可用性和弹性:HTTP/2和TLS握手问题可能导致服务器崩溃或在攻击者控制的输入下泄露文件描述符;接受任意客户端流量的生产服务器在修补之前面临风险。 (nodejs.org)

行动检查清单(优先顺序)

  1. 立即修补(在您的维护窗口内)
    • 升级到您发布线的修补Node.js变体(20.20.0 / 22.22.0 / 24.13.0 / 25.3.0)。在部署到整个集群之前,在暂存和金丝雀环境中进行测试。 (nodejs.org)
  2. CI / 镜像卫生
    • 重新构建并推送运行时镜像(基础镜像 / 多阶段Docker构建)。确保您的CI使用固定的Node镜像,而不是“最新”。
    • 更新package.json和锁定文件中固定Node的任何引擎约束(通过工具如nvm、asdf、Dockerfile FROM)。
  3. 安全关键的运行时检查和代码审计(短期冲刺)
    • 在代码库中搜索返回或发送给客户端的Buffer/TypedArray使用模式(例如,Buffer.alloc + 立即序列化)。如果您必须在部署期间延迟升级,请添加显式零填充。 (nodejs.org)
    • 审计使用权限模型、符号链接处理或任何自定义文件解析逻辑的代码。用规范化路径检查和严格的允许列表替换相对符号链接处理。 (nodejs.org)
    • 确保所有TLS服务器将错误处理程序附加到TLSSocket/服务器事件;使TLS PSK/ALPN回调具有防御性(将同步回调包装在try/catch中并安全失败)。 (nodejs.org)
    • 审查任何使用vm的地方,特别是带有timeout选项的地方,以及依赖超时来限制执行的地方(这些与缓冲区分配修复相关)。 (nodejs.org)
  4. 可观察性和运行时检测
    • 添加对进程崩溃、FD泄漏或与TLS握手相关的持续内存增长的警报。
    • 在任何HTTP/2端点上运行模糊测试或格式错误的头测试(模拟超大HPACK/HEADERS帧)以确认崩溃修复。
  5. 部署策略
    • 金丝雀 → 部署:部署到小比例的流量,监控OOM/崩溃率、FD表增长、TLS握手指标和延迟。
    • 对于有状态集群,优先选择滚动重启,以避免一次性中断。

测试建议(快速,高影响)

  • 运行集成测试,测试:
    • 在超时和并发工作负载下的缓冲区分配路径;添加合成工作负载以分配和暴露缓冲区。
    • 创建链式相对符号链接并断言权限模型/允许列表执行的文件系统遍历测试。
    • 重复的TLS握手,使用客户端证书调用socket.getPeerCertificate(true)以确保内存不会持续增长。
    • HTTP/2格式错误的头帧,以确保进程保持活着并处理错误。

操作说明和缓解措施(如果您无法立即升级)

  • 如果无法立即升级:
    • 限制暴露:在WAF/负载均衡器后限制公共HTTP/2/TLS端点,如果可能,阻止网络边缘的格式错误HTTP/2。
    • 对高风险进程进行仪器化和沙箱处理;在具有更强OS级别隔离的单独进程或容器中运行不太可信的工作负载。
    • 对于使用权限模型的用户,避免依赖实验性权限标志进行安全关键的隔离,直到修补的平台到位。 (nodejs.org)

最后一个实用提示

  • 此次发布还更新了依赖项(c-ares和undici)——确保在Node升级后,使用undici或具有本机绑定的项目重新构建和重新测试。 (nodejs.org)

来源

来源

继续阅读