Skip to content

Commit 6c101fd

Browse files
mcollinajoyeecheung
andcommitted
Update apps/site/pages/en/blog/vulnerability/january-2026-dos-mitigation-async-hooks.md
Co-authored-by: Joyee Cheung <[email protected]> Signed-off-by: Matteo Collina <[email protected]>
1 parent e095ef6 commit 6c101fd

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

apps/site/pages/en/blog/vulnerability/january-2026-dos-mitigation-async-hooks.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
date: 2026-01-08T17:00:00.000Z
2+
date: 2026-01-13T17:00:00.000Z
33
category: vulnerability
44
title: Mitigating Denial-of-Service Vulnerability from Unrecoverable Stack Space Exhaustion for React, Next.js, and APM Users
55
slug: january-2026-dos-mitigation-async-hooks
@@ -327,7 +327,7 @@ The irony is notable: the tools you install to monitor and debug crashes can mak
327327
Although it is a bug fix for an unspecified behavior, we chose to include it in the security release because of its widespread impact on the ecosystem.
328328
React Server Components, Next.js, and virtually every APM tool are affected. The fix improves developer experience and makes error handling more predictable.
329329
330-
However, it's important to note that we were fortunate to be able to fix this particular case. There's no guarantee that similar edge cases involving stack overflow and `async_hooks` can always be addressed. **For mission-critical paths that must defend against infinite recursion or stack overflow from recursion whose depth can be controlled by an attacker, always sanitize the input or impose a limit on the depth of recursion by other means**. The runtime cannot guarantee reliable recovery from stack space exhaustion with a catchable error.
330+
However, it's important to note that we were fortunate to be able to fix this particular case. There's no guarantee that similar edge cases involving stack overflow and `async_hooks` can always be addressed. **For mission-critical paths that must defend against infinite recursion or stack overflow from recursion whose depth can be controlled by an attacker, always sanitize the input or impose a limit on the depth of recursion by other means**.
331331
332332
It's worth noting that large array allocations can suffer from similar issues, like the recent [`qs`](https://github.com/ljharb/qs) vulnerability [CVE-2025-15284](https://github.com/ljharb/qs/security/advisories/GHSA-6rw7-vpxm-498p) showed. It's paramount that developers validate and constrain resource usage that could be controlled by an attacker. The runtime cannot always recover reliably from resource exhaustion after-the-fact.
333333
@@ -394,7 +394,7 @@ The impact on React Server Components and Next.js varies by Node.js version:
394394

395395
## Mitigation
396396

397-
**Recommended**: Upgrade to the patched versions released on January 8th, 2026.
397+
**Recommended**: Upgrade to the patched versions released on January 13th, 2026.
398398

399399
If you cannot upgrade immediately, consider altering your application to avoid deep recursion, particularly when allocating promises within recursive functions.
400400

@@ -409,15 +409,15 @@ If you cannot upgrade immediately, consider altering your application to avoid d
409409
- **December 12, 2025**: Anna Henningsen identifies a blocker for this strategy. The Node.js team starts brainstorming on alternative solutions.
410410
- **December 16, 2025**: Joyee Cheung communicates that Node.js cannot treat this as a vulnerability for the reasons listed in this blog post.
411411
- **December 17, 2025**: Anna Henningsen fixes the blocking issue for the patch.
412-
- **January 8, 2026**: Patched versions released and disclosure published
412+
- **January 13, 2026**: Patched versions released and disclosure published
413413

414414
## Conclusion
415415

416416
This bug highlights how deeply `async_hooks` has become embedded in the Node.js ecosystem. What started as a low-level debugging API is now a critical dependency for React Server Components, Next.js, every major APM tool, and any code using `AsyncLocalStorage`.
417417

418418
The fix improves the consistency of stack size limit errors caused by deep recursions. While we were able to address this particular case, developers should be aware that stack overflow behavior is not specified by ECMAScript and should not be relied upon for service availability. If the depth of recursion can be controlled by an attacker, always sanitize the input or impose a limit by other means to restrict the depth, instead of counting on the JS runtime to impose a limit or recover from it with a catchable error.
419419

420-
**Users running React RSC, Next.js, or any other framework using `AsyncLocalStorage`, as well as any APM tool in production, should upgrade to the patched versions released on January 8th, 2026.**
420+
**Users running React RSC, Next.js, or any other framework using `AsyncLocalStorage`, as well as any APM tool in production, should upgrade to the patched versions released on January 13th, 2026.**
421421

422422
## Acknowledgments
423423

0 commit comments

Comments
 (0)