<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Angular (@Angular/Router &gt;= 22.0.0 &lt; 22.2.1) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/angular-@angular/router--22.0.0--22.2.1/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Tue, 20 Oct 2026 23:56:07 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/angular-@angular/router--22.0.0--22.2.1/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Angular: Denial of service via RouterLink query parameter retention (CVE-2026-111751)</title><link>https://feed.craftedsignal.io/briefs/2026-10-angular-router-dos/</link><pubDate>Tue, 20 Oct 2026 23:56:07 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-10-angular-router-dos/</guid><description>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.</description><content:encoded><![CDATA[<p>A denial of service (DoS) vulnerability exists in <code>@angular/router</code> when Server-Side Rendering (SSR) is enabled on Node.js (V8) and <code>RouterLink</code> directives use <code>queryParamsHandling</code> set to <code>'merge'</code> or <code>'preserve'</code>. Introduced in version 21.2.0, a refactor to signals caused the <code>RouterLink</code> directive to persistently cache <code>UrlTree</code> instances in the heap for the duration of the request.</p>
<p>In applications using <code>'merge'</code> or <code>'preserve'</code> configurations, every rendered link copies incoming request query parameters into its own <code>UrlTree</code>. Because SSR maintains active <code>RouterLink</code> 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 <code>@angular/router</code> versions 21.2.0 through 21.2.24 and 22.0.0 through 22.2.0.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker identifies a public-facing Angular application utilizing Server-Side Rendering (SSR).</li>
<li>Attacker confirms the application supports <code>queryParamsHandling</code> logic (e.g., merging/preserving parameters into navigation links).</li>
<li>Attacker crafts multiple concurrent HTTP requests containing large query strings with high-density parameters (e.g., thousands of numeric keys).</li>
<li>Node.js SSR worker receives concurrent requests, initiating the Angular rendering lifecycle for each.</li>
<li>The <code>RouterLink</code> directive's refactored signal caching logic pins individual <code>UrlTree</code> objects containing the attacker's bloated query maps to the heap.</li>
<li>Memory usage grows multiplicatively per request as the SSR worker processes route dependencies and waits for async operations.</li>
<li>Node.js old-space heap capacity is exhausted, causing the SSR worker process to terminate due to an unrecoverable &quot;out of memory&quot; fatal error.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>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.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Upgrade <code>@angular/router</code> to version <code>22.2.1</code> or <code>21.2.25</code> immediately to address the memory retention issue documented in CVE-2026-111751.</li>
<li>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.</li>
<li>Implement a server-side middleware check to validate the length of <code>req.url</code> before passing the request to the Angular SSR handler.</li>
<li>Audit application route configurations to remove global <code>defaultQueryParamsHandling: 'merge'</code> or <code>'preserve'</code> settings; explicitly specify only necessary parameters on <code>RouterLink</code> elements to minimize heap exposure.</li>
<li>Increase the <code>--max-old-space-size</code> Node.js flag as a short-term buffer, though note this does not provide complete protection against sustained, high-volume exploitation attempts.</li>
</ol>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>denial-of-service</category><category>angular</category><category>nodejs</category><category>ssr</category></item></channel></rss>