{"id":"CVE-2026-69151","aliases":["GHSA-jj27-h5hq-8x99"],"title":"Angular i18n: Cross-Site Scripting (XSS) via event-handler attributes","summary":"Angular i18n: Cross-Site Scripting (XSS) via event-handler attributes","severity":"high","cwe":["CWE-79"],"vendor":"angular","product":"@angular/compiler","ecosystem":"npm","affected":["@angular/compiler >= 22.0.0-next.0, < 22.0.1","@angular/compiler >= 21.0.0-next.0, < 21.2.19","@angular/compiler >= 20.0.0-next.0, < 20.3.27","@angular/compiler <= 19.2.25","@angular/core >= 22.0.0-next.0, < 22.0.1","@angular/core >= 21.0.0-next.0, < 21.2.19","@angular/core >= 20.0.0-next.0, < 20.3.27","@angular/core <= 19.2.25"],"patched":["@angular/compiler 22.0.1","@angular/compiler 21.2.19","@angular/compiler 20.3.27","@angular/core 22.0.1","@angular/core 21.2.19","@angular/core 20.3.27"],"published":"2026-08-03","updated":"2026-08-03","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-jj27-h5hq-8x99","references":[{"url":"https://github.com/angular/angular/security/advisories/GHSA-jj27-h5hq-8x99"},{"url":"https://github.com/angular/angular/pull/68821"},{"url":"https://github.com/angular/angular/pull/69306"},{"url":"https://github.com/angular/angular/commit/417a4071a776464d549509ed3aec121dbd2fda5e"},{"url":"https://github.com/angular/angular/commit/6c41f5ca01c0ae045fc7d929b72853a11eb55865"},{"url":"https://github.com/advisories/GHSA-jj27-h5hq-8x99"}],"tags":["ghsa","npm"],"ingestedAt":"2026-08-03T16:26:24.143Z","epss":0.00199,"epssPercentile":0.09958,"slug":"CVE-2026-69151","body":"## Overview\n\nA Cross-Site Scripting (XSS) vulnerability has been identified in the Angular compiler's internationalization (i18n) pipeline. Although Angular disallows binding to event-handler attributes such as `onclick` and `onerror` through standard attribute validation (`validateAttribute()` / `validateProperty()`), the i18n metadata collection path allowed these same attribute names to be marked for translation using `i18n-on*` attributes (e.g., `i18n-onerror`).\n\nWhen exploited, a lower-trust translation file could replace a benign static handler such as `onerror=\"void 0\"` with arbitrary executable JavaScript in the localized build.\n\nThe following example illustrates a vulnerable pattern:\n```html\n<img src=\"foo.jpg\" onerror=\"void 0\" i18n-onerror />\n```\n\n### Impact\n\nWhen exploited, this vulnerability allows arbitrary JavaScript execution within the context of the vulnerable application's domain if an attacker can control or influence the translation files used during localization. This can lead to:\n- **Session Hijacking**: Accessing session cookies, tokens, or sensitive user data.\n- **Unauthorized Actions**: Performing actions on behalf of the authenticated user.\n\n### Patched Versions\n\n- 22.0.1\n- 21.2.19\n- 20.3.27\n\n### Workarounds\n\nEnsure that static event-handler attributes (e.g., `onerror`, `onclick`) are never marked for internationalization (`i18n-on*`) in application templates, and ensure translation files are sourced from trusted origins.\n\n## Affected packages\n\n- `@angular/compiler >= 22.0.0-next.0, < 22.0.1`\n- `@angular/compiler >= 21.0.0-next.0, < 21.2.19`\n- `@angular/compiler >= 20.0.0-next.0, < 20.3.27`\n- `@angular/compiler <= 19.2.25`\n- `@angular/core >= 22.0.0-next.0, < 22.0.1`\n- `@angular/core >= 21.0.0-next.0, < 21.2.19`\n- `@angular/core >= 20.0.0-next.0, < 20.3.27`\n- `@angular/core <= 19.2.25`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `@angular/compiler 22.0.1`\n- `@angular/compiler 21.2.19`\n- `@angular/compiler 20.3.27`\n- `@angular/core 22.0.1`\n- `@angular/core 21.2.19`\n- `@angular/core 20.3.27`","depth":"twilight","depthScore":41,"depthScoreParts":{"impact":41.3,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}