Description
Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 22.0.1, 21.2.17, and 20.3.25, to optimize client-side bootstrap in Server-Side Rendered (SSR) environments, Angular supports Hydration via provideClientHydration(). During SSR, Angular serializes the application's runtime state (such as cached HttpClient responses) and outputs it into the HTML stream as a <script> tag with a predictable identifier. During client bootstrap, Angular recovers this state by looking up the element via document.getElementById('ng-state') and parsing its text content. Because the DOM element lookup for the state container is predictable and relies solely on the ID selector (ng-state), it is susceptible to DOM Clobbering. If the application binds untrusted user input or CMS content to element properties such as id (e.g., <div [id]="userInput"> or <a id="ng-state">) before the genuine <script> tag is parsed by the browser, the attacker-controlled element takes precedence in the DOM lookup. During hydration, when Angular calls document.getElementById('ng-state'), the browser returns the attacker's clobbered element. Angular then attempts to parse the text content or attributes of this clobbered element as JSON. This vulnerability is fixed in 22.0.1, 21.2.17, and 20.3.25.
Published: 2026-06-22
Score: 8.6 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Angular’s server‑side rendering hydration process serializes application state into a <script> tag identified by the id ‘ng-state’. During client bootstrap, Angular retrieves this element by ID, parses its content as JSON, and restores the state. The lookup uses only the ID selector, making it susceptible to DOM clobbering. If an attacker injects untrusted content that places an element with id="ng-state" before the legitimate script tag, the browser will return the attacker‑crafted element. Angular will then parse the attacker’s content, which can contain malicious JavaScript or malformed data, potentially leading to arbitrary client‑side code execution, state corruption, or session hijacking. The flaw aligns with CWE‑79, CWE‑807, and CWE‑471.

Affected Systems

All Angular applications that use provideClientHydration() for server‑side rendering and are built with versions prior to 22.0.1, 21.2.17, or 20.3.25 are vulnerable. Projects that inject user‑controlled or CMS data directly into the page and bind that data to element IDs are exposed if such content can precede the hydration script.

Risk and Exploitability

The CVSS score of 8.6 indicates high severity. An EPSS score of less than 1% signifies a very low but non‑zero probability of exploitation in the current threat landscape. The vulnerability is not listed in CISA’s KEV catalog. Exploitation requires an attacker who can supply or influence content that assigns id='ng-state' before the hydration script, such as through a content management system or by controlling a user input that is rendered with a binding to id. Successful exploitation results in arbitrary client‑side code execution or state corruption when the page loads.

Generated by OpenCVE AI on July 29, 2026 at 23:35 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Angular to version 22.0.1, 21.2.17, or 20.3.25 (or later) to apply the fix that removes the DOM clobbering risk.
  • Sanitise any user‑supplied data that is bound to element ids, and avoid allowing dynamic values to set id="ng-state" in the rendered HTML.
  • If a patch cannot be applied immediately, temporarily disable SSR hydration by removing provideClientHydration() or rendering pages without server‑side rendering until the update is released.

Generated by OpenCVE AI on July 29, 2026 at 23:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-rgjc-h3x7-9mwg Angular Client Hydration DOM Clobbering & Response-Cache Poisoning
History

Fri, 10 Jul 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-807
References
Metrics threat_severity

None

cvssV3_1

{'score': 4.7, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:L/A:N'}

threat_severity

Moderate


Mon, 22 Jun 2026 18:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Mon, 22 Jun 2026 18:00:00 +0000

Type Values Removed Values Added
First Time appeared Angular
Angular angular
Vendors & Products Angular
Angular angular

Mon, 22 Jun 2026 15:45:00 +0000

Type Values Removed Values Added
Description Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 22.0.1, 21.2.17, and 20.3.25, to optimize client-side bootstrap in Server-Side Rendered (SSR) environments, Angular supports Hydration via provideClientHydration(). During SSR, Angular serializes the application's runtime state (such as cached HttpClient responses) and outputs it into the HTML stream as a <script> tag with a predictable identifier. During client bootstrap, Angular recovers this state by looking up the element via document.getElementById('ng-state') and parsing its text content. Because the DOM element lookup for the state container is predictable and relies solely on the ID selector (ng-state), it is susceptible to DOM Clobbering. If the application binds untrusted user input or CMS content to element properties such as id (e.g., <div [id]="userInput"> or <a id="ng-state">) before the genuine <script> tag is parsed by the browser, the attacker-controlled element takes precedence in the DOM lookup. During hydration, when Angular calls document.getElementById('ng-state'), the browser returns the attacker's clobbered element. Angular then attempts to parse the text content or attributes of this clobbered element as JSON. This vulnerability is fixed in 22.0.1, 21.2.17, and 20.3.25.
Title Angular Client Hydration DOM Clobbering & Response-Cache Poisoning
Weaknesses CWE-471
CWE-79
References
Metrics cvssV4_0

{'score': 8.6, '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'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-06-22T16:00:36.910Z

Reserved: 2026-06-12T17:13:32.279Z

Link: CVE-2026-54267

cve-icon Vulnrichment

Updated: 2026-06-22T16:00:32.310Z

cve-icon NVD

No data.

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-06-22T15:30:48Z

Links: CVE-2026-54267 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-07-29T23:45:03Z

Weaknesses
  • CWE-471

    Modification of Assumed-Immutable Data (MAID)

  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

  • CWE-807

    Reliance on Untrusted Inputs in a Security Decision