fix(deps): update dependency @angular/common to v20 [security] - #121
Open
renovate[bot] wants to merge 1 commit into
Open
fix(deps): update dependency @angular/common to v20 [security]#121renovate[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-common-vulnerability
branch
2 times, most recently
from
March 29, 2026 08:42
b8813e1 to
c037074
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-common-vulnerability
branch
from
July 16, 2026 00:39
c037074 to
4ddf486
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-common-vulnerability
branch
from
July 20, 2026 03:32
4ddf486 to
3e64453
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-common-vulnerability
branch
from
July 20, 2026 07:58
3e64453 to
985368b
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:
^16.2.3→^20.0.0Angular is Vulnerable to XSRF Token Leakage via Protocol-Relative URLs in Angular HTTP Client
CVE-2025-66035 / GHSA-58c5-g7wp-6w37
More information
Details
The vulnerability is a Credential Leak by App Logic that leads to the unauthorized disclosure of the Cross-Site Request Forgery (XSRF) token to an attacker-controlled domain.
Angular's HttpClient has a built-in XSRF protection mechanism that works by checking if a request URL starts with a protocol (
http://orhttps://) to determine if it is cross-origin. If the URL starts with protocol-relative URL (//), it is incorrectly treated as a same-origin request, and the XSRF token is automatically added to theX-XSRF-TOKENheader.Impact
The token leakage completely bypasses Angular's built-in CSRF protection, allowing an attacker to capture the user's valid XSRF token. Once the token is obtained, the attacker can perform arbitrary Cross-Site Request Forgery (CSRF) attacks against the victim user's session.
Attack Preconditions
POST) to a protocol-relative URL (e.g.,//attacker.com) that they control.Patches
Workarounds
Developers should avoid using protocol-relative URLs (URLs starting with
//) in HttpClient requests. All backend communication URLs should be hardcoded as relative paths (starting with a single/) or fully qualified, trusted absolute URLs.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
@angular/common: Denial of Service (DoS) via OOM in Number Formatting (digitsInfo)
CVE-2026-50171 / GHSA-p3vc-36g9-x9gr
More information
Details
A Denial of Service (DoS) vulnerability exists in the
@angular/commonpackage of Angular. TheformatNumberfunction, which is also utilized byDecimalPipe,PercentPipe, andCurrencyPipe, does not properly validate the upper bounds of thedigitsInfoparameter. Specifically, the minimum and maximum fraction digits parsed from thedigitsInfostring (e.g.,1.2-4) are converted to integers and used without limits.When parsing a maliciously crafted
digitsInfostring with excessively large fraction digit values (e.g.,1.200000000-200000000), the internalroundNumberfunction attempts to pad the digits array to match the requested fraction size. This results in an unbounded loop that repeatedly pushes elements into an array.Impact
Successful exploitation of this vulnerability allows an attacker to trigger resource exhaustion, leading to a Denial of Service (DoS):
@angular/ssr), an attacker can crash the Node.js server process due to aJavaScript heap out of memoryerror. This affects the availability of the application for all users.Attack Preconditions
For this vulnerability to be exploitable, the following conditions must be met:
formatNumberfunction directly, or via template pipes (DecimalPipe,PercentPipe,CurrencyPipe).digitsInfoparameter passed to these utilities must be customizable or directly controlled by untrusted user input (e.g., parsed from query parameters, user preference settings, or API responses that accept user-defined formatting options). IfdigitsInfois trusted or limited to a known, defined range for its value, the vulnerability is not exploitable by external attackers.Patches
Credits
This vulnerability was discovered and reported by CodeMender from Google DeepMind.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
@angular/common: Information Leak via Default Caching of Credentialed Requests in HttpTransferCache
CVE-2026-50170 / GHSA-q6f4-qqrg-jv6x
More information
Details
A vulnerability was discovered in
@angular/commonwhen Server-Side Rendering (SSR) and hydration are enabled. TheHttpTransferCacheutility optimizes hydration by caching outgoing HTTP requests performed during SSR and transferring the cached state to the client-side application viaTransferState.However, the caching mechanism fails to inspect the
withCredentialsflag or theCookieheader of outgoing requests. As a result, credentialed, user-specific responses may be cached by default in the sharedTransferStatepayload. When these responses are serialized into the HTML, any caching layer (such as a CDN, reverse proxy, or shared server cache) that caches the SSR-rendered HTML page could inadvertently cache and leak one user's private data to other users, leading to a high-severity information disclosure vulnerability.Impact
Successful exploitation allows an unauthenticated attacker to obtain sensitive, user-specific information of other authenticated users. This occurs when:
Attack Preconditions
provideClientHydration()).withCredentials: true) during the initial server-side render.Patches
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
@angular/common: Weak 32-Bit Cache Key Hashing in
HttpTransferCacheLeading to Cross-Request Data Leakage and State PoisoningCVE-2026-54266 / GHSA-39pv-4j6c-2g6v
More information
Details
Angular's
HttpTransferCachecaches HTTP requests made during Server-Side Rendering (SSR) so that they can be reused during client-side hydration. This avoids repeating the same HTTP requests on the client. The cached responses are stored inTransferStateusing a cache key generated by hashing request properties (method, response type, mapped URL, serialized body, and sorted query parameters).The cache keys are generated using a weak 32-bit DJB2-like polynomial rolling hash. The 32-bit hash space is extremely small, allowing attackers to find hash collisions.
An attacker can easily find a query parameter string (e.g.,
q=aaCAZMMMfor a search request) that produces the exact same 32-bit hash as a sensitive endpoint (e.g.,/api/user/profile). When a victim visits a crafted link containing the colliding parameter, the SSR process executes both the search request and the profile request. Due to the hash collision, the search response overwrites the profile response in theTransferStatecache.Impact
When the application attempts to retrieve the cached response for the sensitive endpoint (such as the user's profile), it receives the attacker-controlled response instead. This results in:
Patched Versions
Framework-Level Fix
The logic has been updated to use a cryptographically secure SHA-256 hash algorithm for generating
TransferStatecache keys inHttpTransferCache. The cache keys are now 256-bit hexadecimal strings.Workarounds
If you cannot upgrade immediately, configure your
HttpClientrequests to skip transfer caching for sensitive endpoints:Alternatively, disable the HTTP transfer cache globally in your application bootstrap config:
Credits
This vulnerability was discovered and reported by CodeMender from Google DeepMind.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/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/common: Denial of Service (DoS) via OOM in Date Formatting (formatDate)
CVE-2026-54268 / GHSA-48r7-hpm6-gfxm
More information
Details
A Denial of Service (DoS) vulnerability exists in the
@angular/commonpackage of the Angular framework. TheformatDatefunction, which is also utilized by the standard AngularDatePipe, does not properly limit or validate the length of theformatparameter.When parsing a maliciously crafted, excessively long date format string (e.g., a repeating pattern or very large string), the internal parser splits the string iteratively using a regular expression loop. This results in uncontrolled resource consumption (high CPU utilization and excessive memory allocations), leading to a Denial of Service (DoS).
Impact
1. Server-Side Rendering (SSR)
In Angular applications that leverage Server-Side Rendering, an attacker can supply a malicious payload with an excessively long date format string. Processing this on the server causes high CPU usage and triggers a
JavaScript heap out of memorycrash, rendering the application unavailable to all users.2. Client-Side Rendering (CSR)
In standard client-side applications, executing the vulnerable function with an excessively long format string blocks the browser's main thread, causing the browser tab to freeze and become completely unresponsive.
Patched Versions
Attack Preconditions
For this vulnerability to be exploitable, both of the following conditions must be met:
formatDateutility or theDatePipe.If the date format is hardcoded (e.g.,
'mediumDate','shortTime', or static strings) or properly validated to be within a reasonable length limit, the application is not vulnerable.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Angular: Cache-Key Ambiguity in HttpTransferCache Leading to Cross-Request Response Reuse and State Poisoning
CVE-2026-68945 / GHSA-jhpw-976m-542j
More information
Details
Angular's
HttpTransferCachecaches HTTP requests made during Server-Side Rendering (SSR) so that they can be reused during client-side hydration.During SSR,
HttpTransferCachepreviously generated identical key material for distinct request parameters when repeated values were present because repeated values were joined with commas:Both requests previously serialized as
role=user,admin, allowing distinctHttpClientrequests to produce the same transfer-cache key material.Impact
In an SSR application, this cache-key ambiguity can make a later security-sensitive
HttpClientrequest receive the response from an earlier semantically different request in the same render. For example, an attacker-influenced scalar-comma request can be cached and then replayed as the response for a trusted repeated-param authorization or data request to the same URL. As a result, Angular's server-rendered output can be based on the wrong backend response because the trusted request is not dispatched. This can lead to:Patched Versions
Workarounds
If you cannot upgrade immediately, configure your
HttpClientrequests to skip transfer caching for sensitive endpoints where repeated parameter keys are used:Alternatively, disable the HTTP transfer cache globally in your application bootstrap config:
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/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).
Release Notes
angular/angular (@angular/common)
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)hasPendingTasksobservers (#59723)forceRootflag for effects (#60535)rejectErrorsoption encourages uncaught exceptions (#60397)CDR.detectChanges(#60056)ApplicationRef.prototype.bootstrapinNgZone(#60720)ApplicationRef.tickto callsite (#60102)ngIf/ngFor/ngSwitch. (#60492)ng-reflectattributes by default (#60973)forms
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.