GitHub Advisoryadvisory · npm
GHSA-hh8m-fm6v-7cvg Angular: Sanitization bypass via directive host bindings on concrete host elements in @angular/core and @angular/compiler
MEDIUM
Official page ↗
- Aliases
- CVE-2026-88057
- Ecosystem
- npm
- Packages
- @angular/core, @angular/compiler
- Severity
- Moderate
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
- Weaknesses
- CWE-79
- Reviewed
- 2026-09-10
Affected packages
• npm @angular/core: >= 22.0.0, < 22.1.0 → fixed in 22.1.0
• npm @angular/compiler: >= 22.0.0, < 22.1.0 → fixed in 22.1.0
• npm @angular/core: >= 21.0.0, < 21.2.20 → fixed in 21.2.20
• npm @angular/compiler: >= 21.0.0, < 21.2.20 → fixed in 21.2.20
• npm @angular/core: >= 20.0.0, < 20.3.28 → fixed in 20.3.28
• npm @angular/compiler: >= 20.0.0, < 20.3.28 → fixed in 20.3.28
• npm @angular/core: <= 19.2.25 (no fix yet)
• npm @angular/compiler: <= 19.2.25 (no fix yet)
Description
Angular automatically sanitizes untrusted values bound to security-sensitive DOM sinks (such as `href`, `src`, `action`, `xlink:href`, and `data`) to protect against Cross-Site Scripting (XSS).
Prior to the fix, the Angular compiler determined the `SecurityContext` for directive host bindings (`host: {'[attr.href]': 'value'}` or `@HostBinding('attr.href')`) based solely on the declaring directive or component selector at compile time, rather than the concrete host element that the directive was applied to.
When a directive with a security-sensitive host binding was applied to a different concrete host element—such as through:
• `hostDirectives` composition,
• Class inheritance of host bindings,
• Dynamic component instantiation (`createComponent` with custom `hostElement` or dynamic directives),
• Elements with SVG/MathML namespaces (e.g. ``, ``), or
• Elements using tag-neutral selectors (e.g. `:not(...)`),
the compiler either failed to associate a sanitizer with the host binding or attached an incorrect security context. As a result, untrusted inputs (e.g. `javascript:...` URLs) bound via the host binding would be written to the DOM attribute without passing through Angular's built-in sanitizer.
Impact
An attacker capable of controlling the value bound to an affected directive host binding could execute arbitrary JavaScript in the user's browser context (Cross-Site Scripting).
Patches
This issue has been resolved in versions:
• `22.1.0`
• `21.2.20`
• `20.3.28`
Workarounds
Ensure that any user-controlled values assigned to properties bound via directive host bindings are explicitly sanitized using `DomSanitizer.sanitize(SecurityContext.URL, ...)` before assignment, or restrict the input to validated safe URL schemes (e.g. `http://`, `https://`).
Related
Alias · CVE (1)
- CVE-2026-88057 Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness
References
- https://github.com/angular/angular/security/advisories/GHSA-hh8m-fm6v-7cvg web
- https://github.com/angular/angular/issues/69550 web
- https://github.com/angular/angular/pull/69558 web
- https://github.com/angular/angular/commit/2f96c8020f85ccb715a76de4b79a0c680c2c7264 web
- https://github.com/angular/angular/commit/6afe6fa781c2f0931f0aedd729b9884a8fe212ee web
- https://github.com/angular/angular/commit/6caa298dee58319b2d674dc91364e26ffe3ecb2b web
- https://github.com/angular/angular package
- https://github.com/angular/angular/releases/tag/v20.3.28 web
- https://github.com/angular/angular/releases/tag/v21.2.20 web
- https://github.com/angular/angular/releases/tag/v22.1.0 web