CVE-2025-59466CVE-2025-59466是Node.js中的一个高危安全漏洞,CVSS评分7.5。该漏洞存在于Node.js的错误处理机制中,当async_hooks.createHook()被启用时,"Maximum call stack size exceeded"(最大调用堆栈大小超出)错误会变得无法捕获。正常情况下,Node.js应用可以通过process.on('uncaughtException')捕获未处理的异常,但在此漏洞条件下,进程会直接终止而非触发异常处理程序,导致崩溃不可恢复。受影响的应用包括使用AsyncLocalStorage(v22、v20版本)或async_hooks.createHook()(v24、v22、v20版本)的应用,在特定条件下可能遭受拒绝服务攻击。此漏洞由HackerOne安全平台披露,CVSS向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H,表明攻击者可通过网络远程触发,无需认证和用户交互。
该漏洞的根本原因在于Node.js异步钩子(async_hooks)机制与JavaScript引擎错误处理之间的竞争条件。当async_hooks.createHook()被激活时,它会在异步操作的生命周期中插入回调函数。在正常情况下,当调用堆栈达到极限时,JavaScript引擎会抛出一个RangeError类型的"Maximum call stack size exceeded"错误,这个错误可以被try-catch或process.on('uncaughtException')捕获。然而,由于async_hooks的实现方式,当存在深层递归且async hooks处于活动状态时,错误处理流程会被中断,导致错误无法被正常捕获,进程直接崩溃。攻击者可以通过构造递归调用来触发此条件,例如创建深层嵌套的异步函数调用链。攻击成功后,目标Node.js进程会立即终止,所有正在处理的请求都会中断,造成服务不可用。由于async_hooks广泛应用于Node.js框架和库中(如Express、Koa等),此漏洞可能影响大量生产环境。