Node.js 2026年1月 Async Hooks 中的 DoS 漏洞
Source: Dev.to

如果你在生产环境中运行 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_hooks或AsyncLocalStorage。 - 服务器处理不可信的用户输入,且这些输入会触发异步逻辑。
修复办法:立即更新
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。