Angular has XSS Vulnerability via Unsanitized SVG Script Attributes
Affected releases · @angular/compiler
- 21.x21.0.0 – 21.0.6Fixed in 21.0.7
- 20.x20.0.0 – 20.3.15Fixed in 20.3.16
- 19.x19.0.0 – 19.2.17Fixed in 19.2.18
- 18.x and older2.0.0 – 18.2.14No fix, no longer updated
On 21.x, the newest line:
npm install @angular/compiler@21.0.7Not affected
22.0.0 – 22.2.3
22 releases, latest
Affected
21.0.0 – 21.0.6
7 releases
Fixed
21.0.7 – 21.2.25
36 releases
Affected
20.0.0 – 20.3.15
37 releases
Fixed
20.3.16 – 20.3.34
19 releases
Affected
19.0.0 – 19.2.17
35 releases
Fixed
19.2.18 – 19.2.25
8 releases
Affected
18.0.0 – 18.2.14
29 releases
Affected
17.0.0 – 17.3.12
32 releases
Affected
16.0.0 – 16.2.12
30 releases
Affected
15.0.0 – 15.2.10
22 releases
Affected
14.0.0 – 14.3.0
26 releases
Affected
13.0.0 – 13.4.0
30 releases
Affected
12.0.0 – 12.2.17
30 releases
Affected
11.0.0 – 11.2.14
28 releases
Affected
10.0.0 – 10.2.5
28 releases
Affected
9.0.0 – 9.1.13
22 releases
Affected
8.0.0 – 8.2.14
23 releases
Affected
7.0.0 – 7.2.16
27 releases
Affected
6.0.0 – 6.1.10
20 releases
Affected
5.0.0 – 5.2.11
22 releases
Affected
4.0.0 – 4.4.7
30 releases
Affected
2.0.0 – 2.4.10
24 releases
Affected releases · @angular/core
- 21.x21.0.0 – 21.0.6Fixed in 21.0.7
- 20.x20.0.0 – 20.3.15Fixed in 20.3.16
- 19.x19.0.0 – 19.2.17Fixed in 19.2.18
- 18.x and older2.0.0 – 18.2.14No fix, no longer updated
On 21.x, the newest line:
npm install @angular/core@21.0.7Not affected
22.0.0 – 22.2.3
22 releases, latest
Affected
21.0.0 – 21.0.6
7 releases
Fixed
21.0.7 – 21.2.25
36 releases
Affected
20.0.0 – 20.3.15
37 releases
Fixed
20.3.16 – 20.3.34
19 releases
Affected
19.0.0 – 19.2.17
35 releases
Fixed
19.2.18 – 19.2.25
8 releases
Affected
18.0.0 – 18.2.14
29 releases
Affected
17.0.0 – 17.3.12
32 releases
Affected
16.0.0 – 16.2.12
30 releases
Affected
15.0.0 – 15.2.10
22 releases
Affected
14.0.0 – 14.3.0
26 releases
Affected
13.0.0 – 13.4.0
30 releases
Affected
12.0.0 – 12.2.17
30 releases
Affected
11.0.0 – 11.2.14
28 releases
Affected
10.0.0 – 10.2.5
28 releases
Affected
9.0.0 – 9.1.13
22 releases
Affected
8.0.0 – 8.2.14
23 releases
Affected
7.0.0 – 7.2.16
27 releases
Affected
6.0.0 – 6.1.10
20 releases
Affected
5.0.0 – 5.2.11
22 releases
Affected
4.0.0 – 4.4.7
30 releases
Affected
2.0.0 – 2.4.10
24 releases
Is your project affected?
Paste your package.json, or type the range you declare for @angular/compiler. It is read in your browser and sent nowhere.
Is your project affected?
Paste your package.json, or type the range you declare for @angular/core. It is read in your browser and sent nowhere.
What happens
A Cross-Site Scripting (XSS) vulnerability has been identified in the Angular Template Compiler. The vulnerability exists because Angular’s internal sanitization schema fails to recognize the href and xlink:href attributes of SVG <script> elements as a Resource URL context.
In a standard security model, attributes that can load and execute code (like a script's source) should be strictly validated. However, because the compiler does not classify these specific SVG attributes correctly, it allows attackers to bypass Angular's built-in security protections.
When template binding is used to assign user-controlled data to these attributes for example, <script [attr.href]="userInput"> the compiler treats the value as a standard string or a non-sensitive URL rather than a resource link. This enables an attacker to provide a malicious payload, such as a data:text/javascript URI or a link to an external malicious script.
Impact
When successfully exploited, this vulnerability allows for arbitrary JavaScript execution within the context of the victim's browser session. This can lead to:
Session Hijacking: Stealing session cookies, localStorage data, or authentication tokens.
Data Exfiltration: Accessing and transmitting sensitive information displayed within the application.
Unauthorized Actions: Performing state-changing actions (like clicking buttons or submitting forms) on behalf of the authenticated user.
Attack Preconditions
The victim application must explicitly use SVG
<script>elements within its templates.The application must use property or attribute binding (interpolation) for the
hreforxlink:hrefattributes of those SVG scripts.The data bound to these attributes must be derived from an untrusted source (e.g., URL parameters, user-submitted database entries, or unsanitized API responses).
Patches
19.2.18
20.3.16
21.0.7
21.1.0-rc.0
Workarounds
Until the patch is applied, developers should:
Avoid Dynamic Bindings: Do not use Angular template binding (e.g.,
[attr.href]) for SVG<script>elements.Input Validation: If dynamic values must be used, strictly validate the input against a strict allowlist of trusted URLs on the server side or before it reaches the template.
Resources