CVE-2026-88058
largeServer-Side Rendering XSS in Angular @angular/platform-server
Angular's server-side rendering package @angular/platform-server serializes ProcessingInstruction DOM nodes inside HTML raw-text fallback elements (noscript, iframe, noembed, noframes) without escaping a matching ancestor closing tag in the instruction data. The flaw is only reachable when application or library code calls inject(DOCUMENT).createProcessingInstruction with attacker-controlled data, or inserts such nodes via Renderer2, inside one of these fallback containers during SSR; it cannot be triggered through standard Angular templates. An attacker who controls the ProcessingInstruction data can make the raw-text container close prematurely, causing following sibling markup to be parsed as live HTML and gaining arbitrary JavaScript execution (XSS) in the victim's browser, with user interaction required. Applications using Angular SSR on versions prior to 20.3.30 (20.x line), 21.2.22 (21.x line), and 22.1.4 (22.x line) are affected. No public proof-of-concept, CISA KEV listing, or confirmed in-the-wild exploitation is known.
What to do: Upgrade @angular/platform-server to 20.3.30, 21.2.22, or 22.1.4 to match your Angular major release. Audit SSR code paths for inject(DOCUMENT).createProcessingInstruction or Renderer2 insertion of attacker-controlled data inside noscript, iframe, noembed, or noframes containers, and as an interim measure escape or strip angle brackets (especially matching closing tags) from ProcessingInstruction data. Prioritize applications where untrusted user input can reach ProcessingInstruction nodes during server-side rendering.
| Angular (Google) Angular SSR (@angular/platform-server) | All versions prior to the fixes: <20.3.30 (20.x), <21.2.22 (21.x), and <22.1.4 (22.x) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 20.3.30, 21.2.22, and 22.1.4, Angular server-side rendering (SSR) in @angular/platform-server serializes ProcessingInstruction DOM nodes inside fallback raw-content elements without escaping matching ancestor closing tags. ProcessingInstruction data escaped greater-than characters but left less-than characters untouched and did not inspect fallback ancestors, so data such as a matching closing tag prematurely terminates noscript, iframe, noembed, or noframes containers. The vulnerable nodes cannot be authored through standard Angular templates; reachability requires application or library code using inject(DOCUMENT).createProcessingInstruction with attacker-controlled data or Renderer2 DOM insertion inside a fallback container. In HTML5 RAWTEXT parsing, the premature close causes subsequent sibling elements to be interpreted as live HTML and enables arbitrary JavaScript execution in a victim's browser. This issue is fixed in versions 20.3.30, 21.2.22, and 22.1.4.
- Weakness
- CWE-79, CWE-116
- Vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.