关键的 Node.js async_hooks DoS (CVE-2025-59466) — 全栈团队的紧急行动

ReactNode.jsDevOps

TL;DR — 一个高影响的 Node.js 漏洞 (CVE-2025-59466) 在 async_hooks 回调活动时发生栈溢出时会导致无法恢复的进程终止。由于 AsyncLocalStorage / async_hooks 被 React Server Components、Next.js 和每个主要 APM 代理广泛使用,许多服务器端 JavaScript 应用面临容易遭受拒绝服务攻击的风险。请立即升级到已修补的 Node.js 版本(2026年1月13日发布),如果无法立即修补,请应用短期缓解措施。 (nodejs.org)

发生了什么(简短)

  • 当启用 async_hooks(或基于它的 AsyncLocalStorage)时,某些栈溢出(例如,分配承诺的深度递归)可以绕过正常的错误处理,导致 Node.js 立即退出(退出代码 7),而不是抛出可捕获的 RangeError。这使得崩溃无法恢复,并且容易被利用作为 DoS。 (nodejs.org)

谁会受到影响

  • 任何使用 async_hooks 或 AsyncLocalStorage 的生产应用。在实践中,最暴露的群体包括:
    • 使用 AsyncLocalStorage 进行请求上下文的 React Server Components (RSC) 和 Next.js 服务器。
    • 启用 async_hooks 跟踪的 APM/监控代理(如 Datadog、New Relic、Elastic APM、OpenTelemetry 等)。
    • 任何可能因外部输入而导致深度递归的服务器代码。 (nodejs.org)

已修补的版本(现在升级到什么)

  • 包含修复的 Node.js 安全更新于2026年1月13日发布 — 请升级到与您的发布线匹配的已修补版本。公告中列出的示例包括 20.x、22.x、24.x 和 25.x 版本的已修补构建(请参阅官方 Node.js 公告以获取您平台的确切版本号)。优先修补面向互联网的服务器和运行服务器端渲染或监控的 CI 运行器。 (nodejs.org)

立即操作检查清单(高影响,最小摩擦)

  1. 首先修补
    • 尽快将 Node.js 安全版本部署到暂存和生产环境。这是推荐的最低风险修复。 (nodejs.org)
  2. 如果您无法立即修补
    • 暂时在公共端点禁用第三方 APM/监控代理(它们通常启用 async_hooks)。评估供应商公告以获取已修补的代理版本。 (nodejs.org)
    • 对解析深度嵌套数据的端点添加防御性输入验证(限制递归/JSON 深度)。不要依赖运行时使栈溢出可恢复。 (nodejs.org)
    • 考虑在快速重启监控程序(如 systemd、k8s 探针)下运行易受攻击的服务,仅作为权宜之计 — 这可以处理崩溃,但不能防止利用。仅在您修补时使用此方法。 (nodejs.org)
  3. 对于使用 Node.js 24 及以上版本的团队
    • Node.js 24 重新实现了 AsyncLocalStorage,使用 V8 的 AsyncContextFrame,减少了对 async_hooks 回调的依赖;在许多默认的 24+ 部署中,React/Next.js 实例不会以相同方式受到影响。然而,仍然发布了已修补的 24.x 版本 — 无论如何请升级。 (nodejs.org)

如何快速检测暴露

  • 在您的依赖树和启动日志中搜索 async_hooks 或 AsyncLocalStorage 的使用情况。
  • 检查启用跟踪的 APM 代理;这些代理通常调用 async_hooks.createHook()。
  • 监控未解释的进程退出,退出代码为 7,并与包含深度嵌套有效负载的最近请求进行关联。 (nodejs.org)

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

  • 服务器渲染和分布式跟踪是现代全栈技术栈的核心部分。这个漏洞表明,低级运行时内部(异步上下文和钩子)可能在多个层面上造成系统性可用性风险 — 框架、平台和遥测 — 并且运行时行为不应被视为安全边界。修复运行时是必要的,但团队还必须加强应用级输入/递归控制。 (nodejs.org)

快速行动计划(一个小时、一天、一周)

  • 一小时:清点使用 AsyncLocalStorage 或 APM 代理的服务;添加对退出代码 7 的监控。 (nodejs.org)
  • 一天:将已修补的 Node.js 构建部署到暂存环境;协调供应商代理更新;如有需要,限制或禁用公共端点上的代理。 (nodejs.org)
  • 一周:将已修补的 Node.js 部署到生产环境,验证在负载下的应用行为,并对请求解析路径添加输入/递归限制。记录事件并更新运行手册。 (nodejs.org)

结束语

  • 这是一个实用的、生态系统范围的可用性问题(不是 RCE)。Node.js 项目发布了修复和指导;全栈团队必须将其视为服务器端渲染和监控生产服务的操作紧急情况:立即清点、修补并缓解输入驱动的递归。 (nodejs.org)

来源:Node.js 官方公告 — 解决 React、Next.js 和 APM 用户的无法恢复的栈空间耗尽导致的拒绝服务漏洞。 (nodejs.org)

链接:

来源

继续阅读