chore(deps): update dependency @angular/compiler to v19 [security] #1090
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:
14.3.0→19.0.0Angular 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).
Release Notes
angular/angular (@angular/compiler)
v19.0.0Compare Source
Blog post: https://blog.angular.dev/meet-angular-v19-7b29dfd05b84
Breaking Changes
compiler
this.fooproperty reads no longer refer to template context variables. If you intended to read the template variable, do not usethis..:where()and:is(),parsing of
:hostandhost-context, parsing selectors within pseudo selector arguments (for instance comma separated selectors).These changes could lead to a different specificity of the resulting selectors and/or previously broken selectors being applied now,
for example
:where(:host)used to transform to:where()[ng-host]and is being:where([ng-host])now. Unlike the previous outcome,the new result can target elements and therefore could lead to breakages.
core
Angular directives, components and pipes are now standalone by default.
standalone: falsefor declarations that are currently declared in@NgModules.ng updatefor v19 will take care of this automatically.TypeScript versions less than 5.5 are no longer supported.
Timing changes for
effectAPI (in developer preview):effects which are triggered outside of change detection run as part of
the change detection process instead of as a microtask. Depending on the
specifics of application/test setup, this can result in them executing
earlier or later (or requiring additional test steps to trigger; see below
examples).
effects which are triggered during change detection (e.g. by input
signals) run earlier, before the component's template.
ExperimentalPendingTaskshas been renamed toPendingTasks.The
autoDetectfeature ofComponentFixturewill nowattach the fixture to the
ApplicationRef. As a result, errors duringautomatic change detection of the fixture be reported to the
ErrorHandler.This change may cause custom error handlers to observe new failures that were previously unreported.
createComponentwill now render default fallback with emptyprojectableNodes.projectableNodesin thecreateComponentAPI, the default fallback contentof the
ng-contentwill be rendered if present. To prevent rendering the default content, passdocument.createTextNode('')as aprojectableNode.Errors that are thrown during
ApplicationRef.tickwill now be rethrown when using
TestBed. These errors should beresolved by ensuring the test environment is set up correctly to
complete change detection successfully. There are two alternatives to
catch the errors:
it synchronously and expect the error. For example, a jasmine test
could write
expect(() => TestBed.inject(ApplicationRef).tick()).toThrow()TestBedwill reject any outstandingComponentFixture.whenStablepromises. A jasmine test,for example, could write
expectAsync(fixture.whenStable()).toBeRejected().As a last resort, you can configure errors to not be rethrown by
setting
rethrowApplicationErrorstofalseinTestBed.configureTestingModule.The timers that are used for zone coalescing and hybrid
mode scheduling (which schedules an application state synchronization
when changes happen outside the Angular zone) will now run in the zone
above Angular rather than the root zone. This will mostly affect tests
which use
fakeAsync: these timers will now be visible tofakeAsyncand can be affected by
tickorflush.The deprecated
factoriesproperty inKeyValueDiffershas been removed.elements
hybrid scheduler, timing of change detection around custom elements has
changed subtly. These changes make elements more efficient, but can cause
tests which encoded assumptions about how or when elements would be checked
to require updating.
localize
nameoption in theng add@localize``schematic has been removed in favor of theprojectoption.platform-browser
BrowserModule.withServerTransitionmethod has been removed. Please use theAPP_IDDI token to set the application id instead.router
Router.errorHandlerproperty has been removed.Adding an error handler should be configured in either
withNavigationErrorHandlerwithprovideRouteror theerrorHandlerproperty in the extra options of
RouterModule.forRoot. In addition,the error handler cannot be used to change the return value of the
router navigation promise or prevent it from rejecting. Instead, if you
want to prevent the promise from rejecting, use
resolveNavigationPromiseOnError.Resolveinterface now includesRedirectCommand.common
compiler
typeofkeyword in template expressions. (#58183)this.ashould always refer to class propertya(#55183):hostparsing in pseudo-selectors (#58681):host:host-context(.foo)(#58681)compiler-cli
core
standalone: false. (#57643)runmethod onExperimentalPendingTasks(#56546)undefinedwithout needing to include it in the type argument ofinput(#57621)allowSignalWrites(#57874)resource()API for async dependencies (#58255)rxResource()(#58255)standalonetotrue(#58169)afterRenderEffect(#57549)outputFromObservable&outputToObservableto stable. (#58214)takeUntilDestroyedto stable. (#58200)@letsyntax (#57813)ViewContextis retained after closure minification (#57903)Nonefor empty component styles (#57130)factoriesProperty inKeyValueDiffers(#58064)elements
output()-shaped outputs (#57535)ComponentRef.setInput& remove custom scheduler (#56728)forms
http
withRequestsMadeViaParentto stable. (#58221)language-service
@Inputto signal-input (#57214)localize
nameoption. (#58063)migrations
ng generateschematic (#57805)platform-browser
BrowserModule.withServerTransitionmethod (#58062)platform-server
PlatformRefwhen error happens during thebootstrap()phase (#58112)router
routerOutletDatainput toRouterOutletdirective (#57051)injectoronOutletContext(#58343)service-worker
v18.2.14Compare Source
Breaking Changes
core
The server-side bootstrapping process has been changed to eliminate the reliance on a global platform injector.
Before:
After:
A schematic is provided to automatically update
main.server.tsfiles to pass theBootstrapContextto thebootstrapApplicationcall.In addition,
getPlatform()anddestroyPlatform()will now returnnulland be a no-op respectively when running in a server environment.(cherry picked from commit
8bf80c9)core
BootstrapContextfor improved server bootstrapping (#63640)v18.2.13Compare Source
migrations
v18.2.12Compare Source
compiler-cli
v18.2.11Compare Source
core
v18.2.10Compare Source
compiler
localize
v18.2.9Compare Source
compiler-cli
v18.2.8Compare Source
compiler
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.