fix(deps): update dependency @angular/compiler to v20 [security] - #802
Open
renovate[bot] wants to merge 1 commit into
Open
fix(deps): update dependency @angular/compiler to v20 [security]#802renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
Contributor
Author
|
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
2 times, most recently
from
December 7, 2025 04:36
c0bca57 to
dced01e
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
December 13, 2025 05:16
dced01e to
1ae7886
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
2 times, most recently
from
December 23, 2025 01:33
1ae7886 to
b97744a
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
February 10, 2026 14:57
b97744a to
7fc987d
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
2 times, most recently
from
February 27, 2026 14:01
7fc987d to
f1665f1
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
2 times, most recently
from
March 4, 2026 04:51
f1665f1 to
4503163
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
March 27, 2026 05:02
4503163 to
1798514
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
April 10, 2026 01:52
1798514 to
6c4b786
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
May 5, 2026 22:30
6c4b786 to
0b1adb4
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
May 29, 2026 22:46
0b1adb4 to
853afc6
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
from
July 16, 2026 01:00
853afc6 to
0f98f5b
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-compiler-vulnerability
branch
2 times, most recently
from
July 20, 2026 23:11
0f98f5b to
fab880d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
~18.2.0→~20.0.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Angular: Template and Attribute Namespace Sanitization Bypass (XSS)
CVE-2026-50557 / GHSA-f3m7-gqxr-g87x
More information
Details
An issue in the
@angular/compilerand@angular/corepackages allows bypassing element and attribute sanitization/validation through specific namespace workarounds.Specifically, namespaced script elements (e.g.,
<svg:script>or<:svg:script>) were not properly identified as script elements by the Angular template preparser, allowing them to pass through template compilation without being stripped.Furthermore, security context schema mappings for element attributes did not consistently handle attributes within namespaced elements (like SVG and MathML), opening up gaps where malicious namespaced attributes could bypass runtime and compile-time sanitizers.
Combined, these flaws enable an attacker who can inject or supply a template/tag structure with custom namespaces to bypass Angular's script-stripping logic and attribute sanitizers, leading to client-side Cross-Site Scripting (XSS).
Impact
Any Angular application that compiles user-controlled templates at runtime, or relies on sanitization of namespaced elements/attributes, is vulnerable to this security bypass.
Once exploited, this allows a malicious actor to inject a namespaced script element or dynamic attribute bindings, bypassing core sanitization constraints to execute arbitrary JavaScript within the target user's browser context. This could lead to session hijacking, sensitive data exposure, or unauthorized actions on behalf of the user.
Attack Preconditions
To successfully exploit these vulnerabilities, the following environment parameters and application states must all concurrently exist:
<svg:script>) to evade standard tag-name blocklists/checks.Patches
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular vulnerable to XSS in i18n attribute bindings
CVE-2026-32635 / GHSA-g93w-mfhg-p222
More information
Details
A Cross-Site Scripting (XSS) vulnerability has been identified in the Angular runtime and compiler. It occurs when the application uses a security-sensitive attribute (for example href on an anchor tag) together with Angular's ability to internationalize attributes. Enabling internationalization for the sensitive attribute by adding
i18n-<attribute>name bypasses Angular's built-in sanitization mechanism, which when combined with a data binding to untrusted user-generated data can allow an attacker to inject a malicious script.The following example illustrates the issue:
The following attributes have been confirmed to be vulnerable:
actionbackgroundcitecodebasedataformactionhrefitemtypelongdescpostersrcxlink:hrefImpact
When exploited, this vulnerability allows an attacker to execute arbitrary code within the context of the vulnerable application's domain. This enables:
Attack Preconditions
i18n-<name>attribute on the same element.Patches
Workarounds
The primary workaround is to ensure that any data bound to the vulnerable attributes is never sourced from untrusted user input (e.g., database, API response, URL parameters) until the patch is applied, or when it is, it shouldn't be marked for internationalization.
Alternatively, users can explicitly sanitize their attributes by passing them through Angular's
DomSanitizer:References
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular has XSS Vulnerability via Unsanitized SVG Script Attributes
CVE-2026-22610 / GHSA-jrmj-c5cx-3cw6
More information
Details
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
hrefandxlink:hrefattributes 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 adata:text/javascriptURI 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:
Attack Preconditions
<script>elements within its templates.hreforxlink:hrefattributes of those SVG scripts.Patches
Workarounds
Until the patch is applied, developers should:
[attr.href]) for SVG<script>elements.Resources
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular Stored XSS Vulnerability via SVG Animation, SVG URL and MathML Attributes
CVE-2025-66412 / GHSA-v4hv-rgfq-gp49
More information
Details
A Stored Cross-Site Scripting (XSS) vulnerability has been identified in the Angular Template Compiler. It occurs because the compiler's internal security schema is incomplete, allowing attackers to bypass Angular's built-in security sanitization. Specifically, the schema fails to classify certain URL-holding attributes (e.g., those that could contain
javascript:URLs) as requiring strict URL security, enabling the injection of malicious scripts.Additionally, a related vulnerability exists involving SVG animation elements (
<animate>,<set>,<animateMotion>,<animateTransform>). TheattributeNameattribute on these elements was not properly validated, allowing attackers to dynamically target security-sensitive attributes likehreforxlink:hrefon other elements. By bindingattributeNameto "href" and providing ajavascript:URL in thevaluesortoattribute, an attacker could bypass sanitization and execute arbitrary code.Attributes confirmed to be vulnerable include:
xlink:href), and various MathML attributes (e.g.,math|href,annotation|href).attributeNameattribute when bound to "href" or "xlink:href".When template binding is used to assign untrusted, user-controlled data to these attributes (e.g.,
[attr.xlink:href]="maliciousURL"or<animate [attributeName]="'href'" [values]="maliciousURL">), the compiler incorrectly falls back to a non-sanitizing context or fails to block the dangerous attribute assignment. This allows an attacker to inject ajavascript:URLpayload. Upon user interaction (like a click) on the element, or automatically in the case of animations, the malicious JavaScript executes in the context of the application's origin.Impact
When exploited, this vulnerability allows an attacker to execute arbitrary code within the context of the vulnerable application's domain. This enables:
Patches
Attack Preconditions
attributeNameof an SVG animation element.Workarounds
If you cannot upgrade, you can workaround the issue by ensuring that any data bound to the vulnerable attributes is never sourced from untrusted user input (e.g., database, API response, URL parameters).
[attr.xlink:href]="maliciousURL") to assign untrusted data to the vulnerable SVG/MathML attributes.attributeNameon SVG Animations: Do not bind untrusted data to theattributeNameattribute of SVG animation elements (<animate>,<set>, etc.).javascript:URLs.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
@angular/compiler: Two-Way Property Binding Sanitization Bypass (XSS)
CVE-2026-54265 / GHSA-58w9-8g37-x9v5
More information
Details
An issue in the
@angular/compilerpackage allows bypassing DOM property sanitization through the use of two-way property bindings.Specifically, when a native DOM property that requires sanitization (such as
innerHTML,srcdoc,src,href,data, orsandbox) is bound using the two-way binding syntax (e.g.,[(innerHTML)]="value"orbindon-innerHTML="value"), the Angular template compiler failed to apply the appropriate schema-derived sanitizer resolution to theTwoWayPropertyoperation. As a result, native two-way DOM bindings were emitted without the required sanitizer function, whereas equivalent one-way bindings would be properly sanitized.This flaw enables an attacker who can control the value of a two-way bound sensitive property to bypass Angular's built-in sanitization logic, potentially leading to client-side Cross-Site Scripting (XSS).
Impact
Any Angular application that uses two-way data binding (
[()]orbindon-) on security-sensitive native DOM properties (likeinnerHTML,hrefon<a>,srcon<img>/<iframe>, etc.) is vulnerable to this security bypass.Once exploited, this allows a malicious actor to supply an unsanitized property binding value that bypasses core sanitization constraints. This could lead to the execution of arbitrary JavaScript within the target user's browser context, potentially resulting in session hijacking, sensitive data exposure, or unauthorized actions on behalf of the user.
Attack Preconditions
To successfully exploit this vulnerability, the following environment parameters and application states must concurrently exist:
<div [(innerHTML)]="userContent"></div>).DomSanitizer) before passing the value to the bound property.Patches
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular: Sanitization bypass via directive host bindings on concrete host elements in @angular/core and @angular/compiler
CVE-2026-88057 / GHSA-hh8m-fm6v-7cvg
More information
Details
Angular automatically sanitizes untrusted values bound to security-sensitive DOM sinks (such as
href,src,action,xlink:href, anddata) to protect against Cross-Site Scripting (XSS).Prior to the fix, the Angular compiler determined the
SecurityContextfor 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:
hostDirectivescomposition,createComponentwith customhostElementor dynamic directives),<svg:a>,<math>), or: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.021.2.2020.3.28Workarounds
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://).Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular i18n: Cross-Site Scripting (XSS) via event-handler attributes
CVE-2026-69151 / GHSA-jj27-h5hq-8x99
More information
Details
A 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
onclickandonerrorthrough standard attribute validation (validateAttribute()/validateProperty()), the i18n metadata collection path allowed these same attribute names to be marked for translation usingi18n-on*attributes (e.g.,i18n-onerror).When 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.The following example illustrates a vulnerable pattern:
Impact
When 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:
Patched Versions
Workarounds
Ensure 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.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
angular/angular (@angular/compiler)
v20.0.0Compare Source
Blog post: https://blog.angular.dev/announcing-angular-v20-b5c9c06cf301
Breaking Changes
common
Yformatter (week-numbering year) without also includingw(week number) is now detected as suspicious date pattern, asyis typically intended.AsyncPipenow directly catches unhandled errors insubscriptions and promises and reports them to the application's
ErrorHandler. For Zone-based applications, these errors would havebeen caught by ZoneJS and reported to
ErrorHandlerso the result isgenerally the same. The change to the exact mechanism for reporting can
result in differences in test environments that will require test
updates.
compiler
'in' in an expression now refers to the operator
voidin an expression now refers to the operatorPreviously an expression in the template like
{{void}}referred to aproperty on the component class. After this change it now refers to the
voidoperator, which would make the above example invalid. If you haveexisting expressions that need to refer to a property named
void,change the expression to use
this.voidinstead:{{this.void}}.Parenthesis are always respected.
This can lead to runtime breakages when a nullish coalescing operator is nested within parentheses.
eg.
{{ (foo?.bar).baz }}will throw iffoois nullish. This is the same behavior as native JavaScript.core
TypeScript versions less than 5.8 are no longer supported.
the
TestBed.flushEffects()was removed - usethe
TestBed.tick()instead.provideExperimentalCheckNoChangesForDebughas severalbreaking changes:
provideCheckNoChangesConfiguseNgZoneOnStableoption is removed. This wasn't found to be generallymore useful than
intervalprovideExperimentalZonelessChangeDetectionisrenamed to
provideZonelessChangeDetectionas it is now "DeveloperPreview" rather than "Experimental".
InjectFlagshas been removed.injectno longer acceptsInjectFlags.Injector.getno longer acceptsInjectFlags.EnvironmentInjector.getno longer acceptsInjectFlags.TestBed.getno longer acceptsInjectFlags.TestBed.injectno longer acceptsInjectFlags.TestBed.gethas been removed. UseTestBed.injectinstead.afterRender was renamed to afterEveryRender.
Before upgrading to Angular v20, ensure the Node.js version is at least 20.11.1.
For the full list of supported versions, visit: https://angular.dev/reference/versions
PendingTasks.runno longer returns the result of theasync function. If this behavior is desired, it can be re-implemented
manually with the
PendingTasks.add. Be aware, however, that promise rejectionswill need to be handled or they can cause the node process to shut down
when using SSR.
Uncaught errors in listeners which were previously only reported to
ErrorHandlerare now also reported to Angular's internal errorhandling machinery. For tests, this means that the error will be
rethrown by default rather than only logging the error. Developers
should fix these errors, catch them in the test if the test is
intentionally covering an error case, or use
rethrowApplicationErrors: falseinconfigureTestingModuleas a last resort.The
anyoverload has been removed frominjector.get. It now only supportsProviderToken<T>and (deprecatedsince v4)
string.Animations are guaranteed to be flushed when Angular
runs automatic change detection or manual calls to
ApplicationRef.tick.Prior to this change, animations would not be flushed in some situations
if change detection did not run on any views attached to the
application. This change can affect tests which may rely on the old
behavior, often by making assertions on DOM elements that should have
been removed but weren't because DOM removal is delayed until animations
are flushed.
ApplicationRef.tickwill no longer catch and reporterrors to the application
ErrorHandler. Errors will instead be thrown out ofthe method and will allow callers to determine how to handle these
errors, such as aborting follow-up work or reporting the error and
continuing.
This commit deprecates
ng-reflect-*attributes and updates the runtime to stop producing them by default. Please refactor application and test code to avoid relying onng-reflect-*attributes.To enable a more seamless upgrade to v20, we've added the
provideNgReflectAttributes()function (can be imported from the@angular/corepackage), which enables the mode in which Angular would be producing those attribites (in dev mode only). You can add theprovideNgReflectAttributes()function to the list of providers within the bootstrap call.router
RedirectFncan now returnObservableorPromise. Any code that directly calls functions returning this typemay need to be adjusted to account for this.
required writable arrays have now been updated to accept readonly
arrays when no mutations are done.
Routeno longer includeanyinthe type union. The union includes functions for the functional guards
as well as a type matching
Injector.get:ProviderToken<T>|string.Note that string is still deprecated on both the route guards and
Injector.get.Deprecations
core
ngIf/ngFor/ngSwitchare deprecated. Use the control flow blocks instead (@for/@if/@switch).platform-browser
@angular/platform-browser-dynamicplatform-server
@angular/platform-server/testingUse e2e tests to verify SSR behavior instead.
common
updateLatestValueif view is destroyed before promise resolves (#58041)NgOptimizedImageexceeds the preload limit (#60879)compiler
@forblocks (#60495)inkeyword in Binary expression (#58432)compiler-cli
core
Injector.destroyonInjectorcreated withInjector.create(#60054)toObservableas stable (#60449)provideExperimentalCheckNoChangesForDebugtoprovideCheckNoChangesConfig(#60906)PendingTasks.run(#60044)withEventReplay()is invoked (#61077)@Attributeas optional (#60916)zone.jsas an optional peer dependency (#61616)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.