Node.js 2026年1月 Async Hooks 中的 DoS 漏洞

发布: (2026年1月15日 GMT+8 11:02)
4 min read
原文: Dev.to

Source: Dev.to

Node.js 2026 年 1 月 Async Hooks 拒绝服务漏洞封面图

如果你在生产环境中运行 Node.js,是时候检查一下你的版本号了。

今天早些时候,Node.js 团队发布了一个关键的安全更新,修复了与 async_hooks 模块相关的拒绝服务(DoS)漏洞。如果你使用可观测性工具、追踪库或 AsyncLocalStorage,你的应用可能面临风险。

在本文中,我们将拆解事件经过、async_hooks 为何会受影响以及如何修复。

那么 async_hooks 是什么?

在深入漏洞之前,先回顾一下。async_hooks API 是 Node.js 中一个强大且底层的内置模块,能够跟踪异步资源(如 Promise、定时器或 TCP 套接字)的生命周期。

它是我们许多常用功能的引擎:

  • AsyncLocalStorage – 用于在不同函数之间保持请求 ID。
  • APM 工具 – New Relic、Datadog 和 OpenTelemetry 使用它来追踪请求。
  • 日志框架 – 用于向日志注入上下文。

由于它直接挂钩在 Node.js 事件循环的核心,任何低效或 bug 都可能导致巨大的性能影响。

漏洞概述:“2026 年 1 月” DoS

利用方式

攻击者可以构造特定的异步模式——通常是深度嵌套或递归的 async 调用——导致内部资源跟踪机制消耗无限的内存或 CPU。

结果是出现内存溢出(OOM)崩溃或 CPU 峰值,使服务器失去响应。由于问题发生在内部层面,普通的应用级 try‑catch 并无帮助。

受影响的范围

如果符合以下任意条件,你很可能受到影响:

  • 使用了未打补丁的 Node.js 版本(v20.x、v22.x 或 v24.x)。
  • 你的应用(或其依赖)使用了 async_hooksAsyncLocalStorage
  • 服务器处理不可信的用户输入,且这些输入会触发异步逻辑。

修复办法:立即更新

1. 确认你的版本

node -v

2. 更新到已修补的版本

  • Node.js v24.x → 最新的 v24.x 补丁
  • Node.js v22.x(LTS) → 最新的 v22.x 补丁
  • Node.js v20.x(LTS) → 最新的 v20.x 补丁

(将 X 替换为官方通告中提到的具体版本号。)

3. 更新方式

使用 nvm(Node Version Manager)

nvm install 22 --reinstall-packages-from=22
nvm use 22

使用 Docker

# 原始镜像
FROM node:22-slim
# 更新为最新补丁
FROM node:22.14.0-slim   # 或最新的补丁版本

临时缓解措施(若无法立即更新)

  • 审计依赖:检查是否使用了 cls-hooked 或旧版追踪代理等高度依赖 async_hooks 的库,并查看它们是否已发布自己的解决方案。
  • 禁用非必要追踪:如果你仅在非关键日志中使用 AsyncLocalStorage,可以在高风险环境下暂时关闭它。
  • 限流:在反向代理层(如 Nginx、Cloudflare)实现严格的限流,以防止攻击者通过复杂的异步请求淹没事件循环。

更多细节,请阅读官方安全博客文章:nodejs.org

Back to Blog

相关文章

阅读更多 »

Socket.IO 服务器基准测试

Socket.IO 服务器基准测试 !Sahaj Bhat https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads....