Loading...
Skip to main content

CVE-2026-88060 — Vulnerability in @angular/platform-server — CVE...

HIGH

Angular: SSR XSS via Unescaped <template> Content Across DocumentFragment Boundaries in Fallback Raw-Content Elements

Published September 10, 2026Updated September 25, 2026Source: osv

Summary

### Summary An XSS vulnerability exists in `@angular/platform-server` during server-side rendering (SSR) HTML serialization when traversing ancestor tags across `<template>` element boundaries. When an application renders untrusted user input within raw-text tags (`<xmp>`, `<style>`, `<script>`), comments, or text nodes inside a `<template>` that is nested within a fallback raw-content element (`<noscript>`, `<iframe>`, `<noembed>`, `<noframes>`), matching closing tags (e.g., `</noscript>`) are not escaped during HTML serialization. When rendered in a browser, this unescaped closing tag prematurely terminates the fallback container and executes trailing markup as active DOM elements. ### Technical Description In HTML5 parsing, fallback raw-content elements (`<noscript>`, `<iframe>`, `<noembed>`, `<noframes>`) place the browser's tokenizer into `RAWTEXT` mode. In this mode, inner content is parsed as literal text until an end tag matching the container tag name (e.g., `</noscript>`) is encountered. To prevent XSS breakout vectors during SSR serialization, the DOM serializer inspects a node's ancestors to escape any matching fallback closing tags (`</tag` -> `&lt;/tag`). However: 1. Per DOM specifications, the children of a `<template>` element reside in a separate `DocumentFragment` (`template.content`), whose own `parentNode` is `null`. 2. The serializer's ancestor traversal previously only inspected element nodes. When traversing upward from a node inside `template.content`, traversal terminated immediately at the `DocumentFragment` boundary. 3. Because traversal stopped before reaching the outer document tree, enclosing fallback raw-content ancestors (such as `<noscript>` or `<iframe>`) were not discovered. As a result, closing sequences like `</noscript>` within `<template>` content were emitted unescaped. ### Impact & Reachability * **Framework Guarantee Bypass**: Angular guarantees that standard text interpolation (`{{ userInput }}` bound as element text content) is safe by default without manual sanitization. This vulnerability bypasses that guarantee during SSR HTML serialization when untrusted input is interpolated inside template content within fallback containers. * **Template Authoring**: Writing literal `<xmp>` or `<style>` directly inside a component's `<template>` markup requires relaxed template schema checks (`CUSTOM_ELEMENTS_SCHEMA` or `NO_ERRORS_SCHEMA`). However, standard HTML comments and text nodes inside `<template>` within `<noscript>` are reachable without relaxed schemas. * **Imperative DOM Construction**: Components or directives that construct DOM structures imperatively via `Renderer2` bypass template compiler schema checks entirely and are unconditionally affected. ### Proof of Concept (Minimal Reproduction) ```ts import { Component } from '@angular/core'; @Component({ selector: 'app-root', standalone: true, template: ` <noscript> <template> <xmp>{{ payload }}</xmp> </template> </noscript> ` }) export class AppComponent { // Attacker-controlled input bound via standard text interpolation payload = '</noscript><img src=x onerror=alert("SSR_TEMPLATE_XSS")>'; } ``` **Vulnerable SSR Output**: ```html <noscript><template><xmp></noscript><img src=x onerror=alert("SSR_TEMPLATE_XSS")></xmp></template></noscript> ``` ### Workarounds * Avoid rendering untrusted user input inside `<template>` elements nested within `<noscript>`, `<iframe>`, `<noembed>`, or `<noframes>` in server-rendered templates. * Avoid programmatic DOM assembly of `<template>` elements inside fallback containers when handling untrusted data.

Advisory Timeline

  • First published September 10, 2026 (32 days ago).
  • Last revised September 25, 2026 — 14 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

npm
Update @angular/platform-server to 20.3.30 or later
npm install @angular/platform-server@20.3.30
npm
Update @angular/platform-server to 21.2.22 or later
npm install @angular/platform-server@21.2.22
npm
Update @angular/platform-server to 22.1.4 or later
npm install @angular/platform-server@22.1.4

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (4)

Affects 1 ecosystem: npm (1).

PackageEcosystemAffectedFixed In
@angular/platform-server
npm
All versions20.3.30
@angular/platform-server
npm
All versionsRange-based data available
@angular/platform-server
npm
All versions21.2.22
@angular/platform-server
npm
All versions22.1.4

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-116
    Improper Encoding or EscapingMITRE
  • CWE-79
    Cross-site Scripting (XSS)MITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 8.1 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
P
Scope
—
Confidentiality
—
Integrity
—
Availability
—

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

Frequently Asked Questions

What is CVE-2026-88060?
Angular: SSR XSS via Unescaped <template> Content Across DocumentFragment Boundaries in Fallback Raw-Content Elements This vulnerability has been assigned a severity rating of HIGH (CVSS score: 8.1/10).
How do I check if my project is affected by CVE-2026-88060?
CVE-2026-88060 affects @angular/platform-server. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-88060 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
8.1

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-v3p8-whq6-r5jg

Related CVEs

  • CVE-2026-41423
    HIGH

    Angular: SSRF via protocol-relative and backslash URLs in Angular Platform-Server

  • CVE-2026-88056
    HIGH

    Angular: SSRF and Cross-Origin Credential Disclosure via URL Resolution Discrepancy in SSR

  • CVE-2026-32635
    HIGH

    Angular vulnerable to XSS in i18n attribute bindings

  • CVE-2026-50556
    HIGH

    @angular/platform-server: Missing `<noscript>` Raw-Text Serialization Escaping leads to Cross-Site Scripting (XSS) in Angular SSR

  • CVE-2026-88058
    HIGH

    Angular SSR: XSS via Unescaped Processing Instruction (<?...?>) Nodes in Fallback Raw-Content Elements

  • CVE-2026-69151
    HIGH

    Angular i18n: Cross-Site Scripting (XSS) via event-handler attributes

  • CVE-2026-69149
    HIGH

    Angular SSR: Missing Fallback Raw-Content Serialization Escaping leads to Cross-Site Scripting (XSS)

  • CVE-2026-50168
    HIGH

    @angular/platform-server: URL Parser Differential leading to SSRF Allowlist Bypass

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies