-
Notifications
You must be signed in to change notification settings - Fork 0
Update dependency @angular/compiler to v19 [SECURITY] #526
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
aoe-renovate
wants to merge
1
commit into
main
Choose a base branch
from
github-renovate/npm-angular-compiler-vulnerability
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Update dependency @angular/compiler to v19 [SECURITY] #526
aoe-renovate
wants to merge
1
commit into
main
from
github-renovate/npm-angular-compiler-vulnerability
Conversation
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
Contributor
Author
|
d5b761a to
4c3545c
Compare
auto-merge was automatically disabled
December 11, 2025 15:24
Pull request was closed
07eee39 to
4c3545c
Compare
4c3545c to
e481890
Compare
3d21d9b to
03f20cd
Compare
c96930d to
f45a0f1
Compare
f562a08 to
c52a936
Compare
c52a936 to
2afae4a
Compare
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:
^15.2.10->^19.0.0Angular 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
compiler-cli
core
platform-server
PlatformRefwhen error happens during thebootstrap()phase (#58112) (#58135)v18.2.7Compare Source
common
compiler-cli
core
http
| Commit | Type | Description |
| --
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ 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 has been generated by Renovate Bot.