Angular: Denial of service via RouterLink query parameter retention (CVE-2026-111751)
A memory exhaustion vulnerability in @angular/router during server-side rendering allows remote, unauthenticated attackers to crash Node.js SSR workers by sending concurrent requests with dense, oversized query strings.
CVE search metadata
CVE search record: CVE-2026-111751. KEV: no. Product: Angular (@angular/router >= 22.0.0 < 22.2.1), Angular (@angular/router >= 21.2.0 < 21.2.25). Brief: Angular: Denial of service via RouterLink query parameter retention (CVE-2026-111751). Brief link: https://feed.craftedsignal.io/briefs/2026-10-angular-router-dos/
Triage facts
Revision 1- Applicability
- Angular (@angular/router >= 22.0.0 < 22.2.1), Angular (@angular/router >= 21.2.0 < 21.2.25)
- Evidence
- Unknown
- Severity
- Medium
- Action
- Immediate escalation
- Sources
- 3 public sources
- Freshness
- Revision 1Oct 20, 23:56 UTC
- Vulnerabilities
- 1 CVE
- Source quality
- A1Likely
A denial of service (DoS) vulnerability exists in @angular/router when Server-Side Rendering (SSR) is enabled on Node.js (V8) and RouterLink directives use queryParamsHandling set to 'merge' or 'preserve'. Introduced in version 21.2.0, a refactor to signals caused the RouterLink directive to persistently cache UrlTree instances in the heap for the duration of the request.
In applications using 'merge' or 'preserve' configurations, every rendered link copies incoming request query parameters into its own UrlTree. Because SSR maintains active RouterLink instances while awaiting asynchronous data or page rendering, an attacker can supply large, dense query parameter payloads to force multiplicative heap consumption. This amplification causes the Node.js old-space heap to reach its limit, triggering a fatal out-of-memory crash. The vulnerability affects @angular/router versions 21.2.0 through 21.2.24 and 22.0.0 through 22.2.0.
Attack Chain
- Attacker identifies a public-facing Angular application utilizing Server-Side Rendering (SSR).
- Attacker confirms the application supports
queryParamsHandlinglogic (e.g., merging/preserving parameters into navigation links). - Attacker crafts multiple concurrent HTTP requests containing large query strings with high-density parameters (e.g., thousands of numeric keys).
- Node.js SSR worker receives concurrent requests, initiating the Angular rendering lifecycle for each.
- The
RouterLinkdirective's refactored signal caching logic pins individualUrlTreeobjects containing the attacker's bloated query maps to the heap. - Memory usage grows multiplicatively per request as the SSR worker processes route dependencies and waits for async operations.
- Node.js old-space heap capacity is exhausted, causing the SSR worker process to terminate due to an unrecoverable "out of memory" fatal error.
Impact
Successful exploitation results in service unavailability for the targeted SSR application. By saturating the heap with concurrent requests, an attacker can force continuous restarts or process termination of the Node.js runtime, effectively denying service to legitimate users. The impact is significant for high-traffic environments where SSR is a core component of the user experience. Pure client-side Angular applications (SPAs) are unaffected as the memory pressure remains confined to individual client browsers rather than the server-side process.
Recommendation
- Upgrade
@angular/routerto version22.2.1or21.2.25immediately to address the memory retention issue documented in CVE-2026-111751. - If an immediate upgrade is not feasible, configure edge infrastructure (e.g., Nginx, WAF, or AWS ALB) to reject incoming HTTP requests with query strings exceeding 2,048 bytes to mitigate the amplification factor.
- Implement a server-side middleware check to validate the length of
req.urlbefore passing the request to the Angular SSR handler. - Audit application route configurations to remove global
defaultQueryParamsHandling: 'merge'or'preserve'settings; explicitly specify only necessary parameters onRouterLinkelements to minimize heap exposure. - Increase the
--max-old-space-sizeNode.js flag as a short-term buffer, though note this does not provide complete protection against sustained, high-volume exploitation attempts.
Immediate actions
Upgrade @angular/router to 22.2.1 or 21.2.25
Mitigations
Configure edge proxy to reject long query strings (> 2KB)
CVE-2026-111751