VDB
Sign up
MEDIUM

GHSA-hh8m-fm6v-7cvg

Angular: Sanitization bypass via directive host bindings on concrete host elements in @angular/core and @angular/compiler

Quick fix

GHSA-hh8m-fm6v-7cvg — @angular/core: upgrade to the fixed version with the command below.

npm install @angular/core@22.1.0

Details

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. `<svg:a>`, `<math>`), 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://`).

Are you affected?

Enter the version of the package you're using.

Affected packages

npm/@angular/core
Introduced in: 22.0.0Fixed in: 22.1.0
Fixnpm install @angular/core@22.1.0
npm/@angular/compiler
Introduced in: 22.0.0Fixed in: 22.1.0
Fixnpm install @angular/compiler@22.1.0
npm/@angular/core
Introduced in: 21.0.0Fixed in: 21.2.20
Fixnpm install @angular/core@21.2.20
npm/@angular/compiler
Introduced in: 21.0.0Fixed in: 21.2.20
Fixnpm install @angular/compiler@21.2.20
npm/@angular/core
Introduced in: 20.0.0Fixed in: 20.3.28
Fixnpm install @angular/core@20.3.28
npm/@angular/compiler
Introduced in: 20.0.0Fixed in: 20.3.28
Fixnpm install @angular/compiler@20.3.28
npm/@angular/core
Introduced in: 0

No fixed version published yet for @angular/core (npm). Pin to a known-safe version or switch to an alternative.

npm/@angular/compiler
Introduced in: 0

No fixed version published yet for @angular/compiler (npm). Pin to a known-safe version or switch to an alternative.

References