CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-32635

CVE-2026-32635: Cross-Site Scripting (XSS) via i18n Attribute Binding in Angular

Alon Barad
Alon Barad
Software Engineer

Mar 14, 2026·6 min read·606 visits

Executive Summary (TL;DR)

Angular's i18n attribute parsing bypasses sanitization, allowing arbitrary XSS execution via data-bound sensitive attributes like `href` or `src`.

Angular framework versions 17.x through 22.0.0-next.2 contain a cross-site scripting (XSS) vulnerability due to an improper sanitization bypass in the internationalization (i18n) compiler pipeline. When sensitive HTML attributes like `href` or `src` are marked for translation using the `i18n-` prefix, the Angular Ivy renderer fails to apply default security sanitization to their bound values. This permits the injection of malicious `javascript:` URIs.

Vulnerability Overview

CVE-2026-32635 is a Cross-Site Scripting (XSS) vulnerability located within the Angular framework's internationalization (i18n) and template compilation subsystems. The flaw manifests when developers utilize Angular's i18n tagging feature on security-sensitive DOM attributes. Specifically, prepending the i18n- directive to attributes such as href or src causes the Angular Ivy renderer to process the attribute bindings through a distinct compilation path.

This distinct compilation path omits the framework's built-in URI sanitization routines. Angular typically inspects dynamic property bindings to ensure they do not contain dangerous protocol handlers like javascript: or vbscript:. The i18n parsing logic entirely circumvents this inspection step, trusting the bound value without validation.

Consequently, applications dynamically binding untrusted user data to translated sensitive attributes are exposed to arbitrary JavaScript execution in the client browser. An attacker providing a malicious payload can achieve full execution context within the victim's session. The vulnerability affects multiple major releases, spanning from Angular 17.x to the 22.0.0 next-release candidates.

Root Cause Analysis

The root cause of CVE-2026-32635 resides in the Angular Ivy (Render3) compiler's processing instructions for i18n-marked attributes. When the compiler encounters a standard dynamic binding on a sensitive attribute (e.g., [href]="userUrl"), it emits specific operational codes (OpCodes) that mandate runtime sanitization. This ensures the bound value passes through functions like _sanitizeUrl before DOM insertion.

When the i18n- prefix is introduced, the compiler delegates processing to the i18nAttributesFirstPass function located within packages/core/src/render3/i18n/i18n_parse.ts. This function is responsible for generating the update instructions for translated attributes. During this generation phase, the function explicitly passes a null value for the sanitizer argument, regardless of the target attribute's inherent risk profile.

Passing null instructs the runtime environment to execute a direct property write without any preceding validation or transformation. The framework loses the ability to distinguish between benign HTTP URLs and dangerous script execution URIs. This omission effectively disables the primary XSS defense mechanism for specifically targeted template components.

Code Analysis

An examination of the Angular core repository reveals the exact location of the security bypass in the i18n parsing pipeline. The generateBindingUpdateOpCodes function handles the orchestration of binding updates for translated attributes. Prior to the patch, the function call explicitly hardcoded the sanitizer parameter to null.

// packages/core/src/render3/i18n/i18n_parse.ts (Vulnerable)
export function i18nAttributesFirstPass(...) {
    // ...
    generateBindingUpdateOpCodes(
        updateOpCodes,
        previousElementIndex,
        attrName,
        countBindings(updateOpCodes),
        null, // <--- Sanitizer explicitly set to null
    );
    // ...
}

The remediation requires the compiler to dynamically determine the appropriate sanitization function based on the attribute name. The patch modifies packages/core/src/render3/i18n/i18n_parse.ts to query the internal URI_ATTRS map. If the target attribute requires URL sanitization, the _sanitizeUrl function is passed instead of null.

// packages/core/src/render3/i18n/i18n_parse.ts (Patched)
export function i18nAttributesFirstPass(...) {
    // ...
    generateBindingUpdateOpCodes(
        updateOpCodes,
        previousElementIndex,
        attrName,
        countBindings(updateOpCodes),
        URI_ATTRS[attrName.toLowerCase()] ? _sanitizeUrl : null, // <--- Dynamic sanitizer assignment
    );
    // ...
}

Additionally, the patch hardens the TRUSTED_TYPES_SINKS schema in packages/compiler/src/schema/trusted_types_sinks.ts. By explicitly appending 'iframe|src' to the set of trusted type sinks, the compiler ensures that iframe sources are rigidly validated, closing a secondary vector for the same underlying bypass.

Exploitation and Attack Methodology

Exploitation of CVE-2026-32635 requires specific conditions within the target application's codebase. A developer must bind untrusted, user-controllable data to a sensitive HTML attribute while simultaneously enabling Angular's i18n translation for that exact attribute. The application must also lack strict Content Security Policy (CSP) headers that would otherwise block inline script execution.

An attacker constructs a specialized URI payload utilizing the javascript: protocol scheme. This payload is delivered to the application through standard input vectors, such as profile configuration fields, URL parameters, or manipulated API responses. The application then stores or reflects this payload into the vulnerable component's state.

When the Angular rendering engine processes the template, the i18nAttributesFirstPass function applies the payload directly to the DOM element without sanitization. For example, a template defined as <a [href]="userUrl" i18n-href>Link</a> will render as <a href="javascript:alert(document.domain)">Link</a>. User interaction, such as clicking the link, triggers immediate execution of the malicious script in the context of the vulnerable application.

Impact Assessment

CVE-2026-32635 carries a CVSS v4.0 base score of 8.6, reflecting a high severity rating. Successful exploitation grants an attacker arbitrary JavaScript execution capabilities within the victim's browser session. This access level permits the complete bypass of same-origin policy protections intended to isolate application contexts.

Once code execution is achieved, adversaries can hijack active authentication sessions by exfiltrating local storage, session storage, or non-HttpOnly cookies. The attacker can also perform unauthorized actions on behalf of the user by issuing authenticated API requests directly from the compromised client. This constitutes a severe violation of both system confidentiality and integrity.

The impact is magnified by the widespread use of Angular's i18n features in enterprise applications targeting global audiences. Applications that frequently handle user-supplied URLs, such as social platforms or content management systems, are at an elevated risk. The attack requires user interaction, but typical phishing or social engineering techniques make triggering the payload highly probable.

Remediation and Mitigation Guidance

The definitive remediation for CVE-2026-32635 is updating the @angular/core and @angular/compiler packages to a patched release. Organizations must upgrade to versions 19.2.20, 20.3.18, 21.2.4, or 22.0.0-next.3 depending on their current release train. These versions contain the updated i18nAttributesFirstPass logic that correctly applies the _sanitizeUrl function.

If immediate patching is technically unfeasible, security teams can implement compensating controls via Content Security Policy (CSP). Deploying a strict CSP that prohibits unsafe-inline execution will neutralize the primary javascript: URI attack vector. Furthermore, restricting the base-uri and object-src directives adds defense-in-depth against variant payload structures.

Engineering teams should also consider enabling Trusted Types within the application architecture. Trusted Types compel the browser to reject dangerous string assignments to DOM sinks entirely. By configuring Angular to strictly enforce Trusted Types, the application gains runtime immunity to this class of DOM-based XSS, even if underlying framework vulnerabilities exist.

Official Patches

AngularOfficial GitHub Security Advisory

Fix Analysis (2)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Affected Systems

@angular/compiler@angular/core

Affected Versions Detail

Product
Affected Versions
Fixed Version
@angular/compiler
Angular
>= 22.0.0-next.0, < 22.0.0-next.322.0.0-next.3
@angular/compiler
Angular
>= 21.0.0-next.0, < 21.2.421.2.4
@angular/compiler
Angular
>= 20.0.0-next.0, < 20.3.1820.3.18
@angular/compiler
Angular
>= 17.0.0.next.0, < 19.2.2019.2.20
@angular/core
Angular
>= 22.0.0-next.0, < 22.0.0-next.322.0.0-next.3
@angular/core
Angular
>= 21.0.0-next.0, < 21.2.421.2.4
@angular/core
Angular
>= 20.0.0-next.0, < 20.3.1820.3.18
@angular/core
Angular
>= 17.0.0.next.0, < 19.2.2019.2.20
AttributeDetail
Vulnerability TypeCross-Site Scripting (XSS)
CWE IDCWE-79
CVSS v4.0 Score8.6 (High)
Attack VectorNetwork
User InteractionRequired
Exploit StatusProof of Concept Available

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

The software does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.

Vulnerability Timeline

Fix commits authored and pushed to the Angular repository
2026-03-10
Cherry-picked fixes applied to older version branches (19.x, 20.x, 21.x)
2026-03-12
Official Security Advisory (GHSA-g93w-mfhg-p222) published
2026-03-13
CVE-2026-32635 assigned and published
2026-03-13

References & Sources

  • [1]GHSA-g93w-mfhg-p222 Security Advisory
  • [2]Fix Commit (Core)
  • [3]Fix Commit (Compiler)
  • [4]Angular Pull Request #67541
  • [5]Angular Pull Request #67561

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•27 minutes ago•CVE-2026-87012
4.3

CVE-2026-87012: Instance-Wide Denial of Service via Calendar Alert Metadata Type Confusion in Open WebUI

Open WebUI is a self-hosted AI platform. Versions 0.9.0 through 0.11.0 contain a denial-of-service vulnerability where an authenticated user can inject non-numeric values into calendar event alert metadata. The shared scheduler process fails to validate the type, leading to an unhandled TypeError that halts the execution of instance-wide alerts, suppressing notifications for all users.

Amit Schendel
Amit Schendel
0 views•5 min read
•about 1 hour ago•CVE-2026-87011
7.5

CVE-2026-87011: Denial of Service via Event-Loop Starvation in Open WebUI OIDC Back-Channel Logout

CVE-2026-87011 is a critical vulnerability in Open WebUI versions 0.9.0 through 0.11.0. It allows unauthenticated remote attackers to trigger a Denial of Service (DoS) by sending crafted tokens to the back-channel logout endpoint, causing synchronous network calls that block the single-worker ASGI event loop.

Amit Schendel
Amit Schendel
1 views•8 min read
•about 2 hours ago•CVE-2026-88045
7.5

CVE-2026-88045: Denial of Service via Uncontrolled Memory Preallocation and Integer Overflow in rclone S3 Compatibility Layer

A high-severity Denial of Service (DoS) vulnerability in the S3 compatibility layer of rclone allows unauthenticated remote attackers (or authenticated attackers depending on configuration) to trigger rapid memory exhaustion and process termination. The flaw lies in the handling of S3 multipart uploads, where rclone eagerly allocates buffers based on untrusted size headers and fails to prevent integer overflows in its concurrent request admission control.

Alon Barad
Alon Barad
3 views•7 min read
•about 3 hours ago•CVE-2026-88046
5.3

CVE-2026-88046: Directory Traversal and Root Confinement Escape in rclone Core Engine

CVE-2026-88046 (also tracked via GHSA-38xv-hf3p-h7mq) is a directory traversal and root confinement escape vulnerability residing in the core listing and transfer logic of rclone. Prior to version 1.75.1, raw relative parent-directory sequences returned by flat-keyspace source backends are trusted and processed without proper sanitization, enabling writes outside the designated target root or bucket.

Amit Schendel
Amit Schendel
2 views•5 min read
•about 4 hours ago•CVE-2026-88017
7.3

CVE-2026-88017: Cross-Session Authentication-Proxy Backend Confusion in rclone FTP Server

The FTP server implementation of rclone is vulnerable to a cross-session identity and credential confusion flaw when configured with an authentication proxy. Under specific multi-tenant configurations where multiple distinct sessions authenticate with the same username, a global map caches credentials globally instead of isolating them inside the session context. This allows a concurrent attacker to hijack the active session backend of a victim using the same username.

Alon Barad
Alon Barad
3 views•7 min read
•about 5 hours ago•CVE-2026-88044
9.1

CVE-2026-88044: Authentication Bypass in rclone Dynamic Server Execution via Remote Control API

An authentication bypass vulnerability exists in rclone when dynamically starting FTP, S3, or SFTP servers via the Remote Control (RC) 'serve/start' API. The server constructors incorrectly check the global process configuration rather than request-scoped options, resulting in a silent bypass of the authentication proxy and enabling unauthenticated access.

Alon Barad
Alon Barad
4 views•6 min read