针对React、Next.js和APM用户的不可恢复堆栈空间耗尽的拒绝服务漏洞缓解

针对React、Next.js和APM用户的不可恢复堆栈空间耗尽的拒绝服务漏洞缓解

💡 原文英文,约3200词,阅读约需12分钟。
📝

内容提要

Node.js中的一个bug导致使用async_hooks的应用程序在堆栈溢出时崩溃,而非抛出可捕获的错误。这影响了React、Next.js及所有使用AsyncLocalStorage的APM工具。修复已于2026年1月发布,建议用户尽快更新以确保服务可用性。

🎯

关键要点

  • Node.js中的一个bug导致使用async_hooks的应用程序在堆栈溢出时崩溃,而非抛出可捕获的错误。

  • 该bug影响了React、Next.js及所有使用AsyncLocalStorage的APM工具。

  • 修复已于2026年1月发布,建议用户尽快更新以确保服务可用性。

  • Node.js尝试从堆栈空间耗尽中恢复,但在使用async_hooks时会导致直接崩溃。

  • React Server Components和Next.js使用AsyncLocalStorage进行请求上下文跟踪,因此受到影响。

  • APM工具需要跟踪请求的异步上下文,许多工具依赖于async_hooks。

  • 修复后的行为使得try-catch块能够捕获RangeError,应用程序可以优雅地处理错误。

  • 开发者应对输入进行清理或限制递归深度,以防止Denial-of-Service攻击。

  • Node.js 24及以上版本的AsyncLocalStorage不再使用async_hooks.createHook,因此不受此bug影响。

  • 建议用户升级到2026年1月13日发布的修复版本。

🔎

延伸解读

漏洞影响范围

该漏洞影响了使用async_hooks的多个框架和工具,尤其是React和Next.js。这意味着许多依赖这些技术的应用程序可能面临拒绝服务攻击的风险,开发者需对此保持警惕。

修复的重要性

Node.js在2026年1月发布的修复版本中,改善了堆栈溢出错误的处理方式,使得开发者能够通过try-catch块优雅地捕获错误。建议所有用户尽快更新,以确保服务的稳定性和安全性。

防范措施

开发者应对输入进行清理或限制递归深度,以防止潜在的拒绝服务攻击。虽然修复了特定的堆栈溢出问题,但依赖于JavaScript运行时的错误处理并不可靠,需采取额外的防范措施。

延伸问答

Node.js中的哪个bug导致了堆栈溢出时的崩溃?

一个bug导致使用async_hooks的应用程序在堆栈溢出时崩溃,而非抛出可捕获的错误。

React和Next.js如何受到这个bug的影响?

React Server Components和Next.js使用AsyncLocalStorage进行请求上下文跟踪,因此受到影响。

如何缓解这个拒绝服务漏洞?

建议用户尽快更新到2026年1月发布的修复版本,以确保服务可用性。

Node.js 24及以上版本的AsyncLocalStorage有什么不同?

Node.js 24及以上版本的AsyncLocalStorage不再使用async_hooks.createHook,因此不受此bug影响。

开发者应该如何防止Denial-of-Service攻击?

开发者应对输入进行清理或限制递归深度,以防止Denial-of-Service攻击。

修复后的行为有什么变化?

修复后的行为使得try-catch块能够捕获RangeError,应用程序可以优雅地处理错误。

🏷️

标签

➡️

继续阅读