Repository navigation
chore(deps): update dependency @angular/platform-server to v20.3.33 [security] - #2484
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
requested review from
Carniatto,
arturovt,
joaqcid,
kuncevic,
markwhitfeld and
poloagustin
as code owners
August 26, 2026 11:35
|
View your CI Pipeline Execution ↗ for commit d82a958
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗ ☁️ Nx Cloud last updated this comment at |
@ngxs/devtools-plugin
@ngxs/form-plugin
@ngxs/hmr-plugin
@ngxs/router-plugin
@ngxs/storage-plugin
@ngxs/store
@ngxs/websocket-plugin
commit: |
BundleMonUnchanged files (6)
No change in files bundle size Unchanged groups (1)
Final result: ❌ View report in BundleMon website ➡️ |
BundleMon (NGXS Plugins)Unchanged files (9)
No change in files bundle size Unchanged groups (1)
Final result: ✅ View report in BundleMon website ➡️ |
BundleMon (Integration Projects)Unchanged files (1)
No change in files bundle size Final result: ✅ View report in BundleMon website ➡️ |
renovate
Bot
force-pushed
the
renovate/npm-angular-platform-server-vulnerability
branch
17 times, most recently
from
August 30, 2026 21:22
5632a14 to
3e5c4e6
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-platform-server-vulnerability
branch
8 times, most recently
from
September 2, 2026 15:40
065e988 to
59903b5
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-platform-server-vulnerability
branch
from
September 11, 2026 12:07
59903b5 to
40ceac7
Compare
renovate
Bot
force-pushed
the
renovate/npm-angular-platform-server-vulnerability
branch
from
October 20, 2026 20:15
40ceac7 to
d82a958
Compare
This branch has not been deployed
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:
20.3.25→20.3.33Angular SSR: Missing Fallback Raw-Content Serialization Escaping leads to Cross-Site Scripting (XSS)
CVE-2026-69149 / GHSA-vpx6-8pjr-4g3v
More information
Details
A Cross-Site Scripting (XSS) vulnerability exists in
@angular/platform-server's DOM emulation dependency (domino) when serializing the content of fallback raw-content elements (<iframe>,<noembed>,<noframes>, and<noscript>).When rendering dynamic text content inside fallback raw-content elements via template bindings, the template engine expects the browser to render the content safely. Under Server-Side Rendering (SSR),
dominois configured with scripting enabled, meaning these elements are treated as raw-text elements.However,
domino's serializer previously did not escape text nodes within fallback raw-content elements (<iframe>,<noembed>,<noframes>,<noscript>) during DOM serialization. As a result, any occurrence of closing tags in the bound dynamic text was not escaped.The unescaped closing tag could be serialized directly into the output HTML. When parsed by a browser or re-parsed during SSR post-processing without preserving raw-content parser state, an injected closing tag closes the element early, allowing an injected script block to execute in the user's browser context, causing same-origin Cross-Site Scripting (XSS).
Impact
This vulnerability allows an attacker to perform same-origin Cross-Site Scripting (XSS) attacks against any user visiting an SSR-rendered page that binds user-controlled data inside fallback raw-content elements (
<iframe>,<noembed>,<noframes>,<noscript>). This can lead to session hijacking, credentials theft, unauthorized actions on behalf of users, and defacement.Patched Versions
Workarounds
If you cannot immediately update your dependencies, you can mitigate this issue using any of the following approaches:
domino. Disabling this step preventsdominofrom re-parsing and re-serializing the HTML during server-side rendering.angular.json, setinlineCriticaltofalseunder style optimization options:{ "projects": { "my-app": { "architect": { "build": { "builder": "@angular/build:application", "options": { "optimization": { "styles": { "inlineCritical": false } } } } } } } }CommonEngine, setinlineCriticalCss: falsein your render options.<iframe>,<noembed>,<noframes>,<noscript>).Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Angular: SSRF and Cross-Origin Credential Disclosure via URL Resolution Discrepancy in SSR
CVE-2026-88056 / GHSA-f6mr-pjwc-34m4
More information
Details
Summary
A discrepancy between WHATWG URL parsing and Angular SSR's URL resolution allows attackers to bypass same-origin checks and cause Server-Side Request Forgery (SSRF), potentially leaking sensitive server-side credentials.
Technical Description
When applications validate incoming URLs using the WHATWG URL standard (
new URL(input, trustedOrigin)), Unicode whitespace characters (such as NO-BREAK SPACEU+00A0or ZERO WIDTH NO-BREAK SPACEU+FEFF) are not stripped and are evaluated as part of a same-origin relative path (e.g.http://trusted-origin/%C2%A0//attacker.example/collect). Consequently, these URLs successfully pass application-level same-origin checks.However,
@angular/platform-server's URL resolution utility (resolveUrl/parseUrl) previously executedString.prototype.trim(). Because JavaScript'sString.prototype.trim()strips all Unicode whitespace (includingU+00A0), the leading non-breaking space was removed, converting the string into a cross-origin protocol-relative URL (//attacker.example/collect). When resolved during server-side rendering (such as inrelativeUrlsTransformerInterceptorFn), this caused the HTTP request to be dispatched to the attacker-controlled origin (http://attacker.example/collect), leaking any credentials (such asAuthorizationheaders) attached by the application for the intended same-origin request.Impact & Reachability
HttpClient, an application-level same-origin check is performed before dispatching, and sensitive server-side credentials (such as API keys or Bearer tokens) are attached to approved requests.Proof of Concept:
Workarounds
\u00A0) before performing origin checks or passing them toHttpClient.new URL(input, trustedOrigin).originfor authorization if the input string may be trimmed or processed by utilities that normalize whitespace differently from the WHATWG URL standard.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Angular: SSR XSS via Unescaped Content Across DocumentFragment Boundaries in Fallback Raw-Content Elements
CVE-2026-88060 / GHSA-v3p8-whq6-r5jg
More information
Details
Summary
An XSS vulnerability exists in
@angular/platform-serverduring server-side rendering (SSR) HTML serialization when traversing ancestor tags across<template>element boundaries. When an application renders untrusted user input within raw-text tags (<xmp>,<style>,<script>), comments, or text nodes inside a<template>that is nested within a fallback raw-content element (<noscript>,<iframe>,<noembed>,<noframes>), matching closing tags (e.g.,</noscript>) are not escaped during HTML serialization. When rendered in a browser, this unescaped closing tag prematurely terminates the fallback container and executes trailing markup as active DOM elements.Technical Description
In HTML5 parsing, fallback raw-content elements (
<noscript>,<iframe>,<noembed>,<noframes>) place the browser's tokenizer intoRAWTEXTmode. In this mode, inner content is parsed as literal text until an end tag matching the container tag name (e.g.,</noscript>) is encountered.To prevent XSS breakout vectors during SSR serialization, the DOM serializer inspects a node's ancestors to escape any matching fallback closing tags (
</tag-></tag). However:<template>element reside in a separateDocumentFragment(template.content), whose ownparentNodeisnull.template.content, traversal terminated immediately at theDocumentFragmentboundary.<noscript>or<iframe>) were not discovered. As a result, closing sequences like</noscript>within<template>content were emitted unescaped.Impact & Reachability
<xmp>or<style>directly inside a component's<template>markup requires relaxed template schema checks (CUSTOM_ELEMENTS_SCHEMAorNO_ERRORS_SCHEMA). However, standard HTML comments and text nodes inside<template>within<noscript>are reachable without relaxed schemas.Renderer2bypass template compiler schema checks entirely and are unconditionally affected.Proof of Concept (Minimal Reproduction)
Vulnerable SSR Output:
Workarounds
<template>elements nested within<noscript>,<iframe>,<noembed>, or<noframes>in server-rendered templates.<template>elements inside fallback containers when handling untrusted data.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Angular SSR: XSS via Unescaped Processing Instruction () Nodes in Fallback Raw-Content Elements
CVE-2026-88058 / GHSA-j3r3-mxqp-r2p4
More information
Details
Summary
An XSS vulnerability exists in
@angular/platform-serverduring server-side rendering (SSR) HTML serialization ofProcessingInstructionDOM nodes (<?target data?>,nodeType === 7) when nested inside fallback raw-content elements (<noscript>,<iframe>,<noembed>,<noframes>). While processing instruction data escaped>to>, it did not check for or escape matching closing tags of ancestor fallback elements (e.g.,</noscript>). When rendered in a browser with scripting enabled, an unescaped closing tag sequence in a processing instruction prematurely closes the fallback raw-content tag and causes subsequent sibling elements to execute as live HTML.Technical Description
In HTML5 parsing, fallback raw-content elements (
<noscript>,<iframe>,<noembed>,<noframes>) place the browser's HTML tokenizer intoRAWTEXTmode. InRAWTEXTmode, processing instruction tokens (<?...?>) are treated as literal raw text rather than bogus comments, and the parser ignores>or?>. The only token sequence that terminates the container is an end tag matching the container tag name (</noscript,</iframe, etc.).During server-side HTML serialization, processing instruction nodes previously only replaced
>with>(preventing bogus comment breakouts in normal HTML data states) but left<untouched. Crucially, processing instruction serialization never inspected ancestor fallback raw-content tags. As a result, if aProcessingInstructionnode inside<noscript>contained</noscriptin its data payload, it was emitted unescaped as<?x </noscript ?>.Impact & Reachability
<?...>into comment nodes in DOM position). Reaching this vulnerability requires application or library code callinginject(DOCUMENT).createProcessingInstruction(target, data)orRenderer2DOM insertion methods with untrusted user input passed todatainside a fallback raw-content container.Proof of Concept (Minimal Reproduction)
Vulnerable SSR Output:
Workarounds
document.createProcessingInstruction(target, data)when the node is inserted into<noscript>,<iframe>,<noembed>, or<noframes>during server-side rendering.<with<in any untrusted data passed to processing instruction nodes on the server.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
@angular/platform-server: Open Redirect via Protocol-Relative URLs in Server-Side Rendering (SSR)
CVE-2026-111754 / GHSA-w739-gvwx-grc3
More information
Details
An open redirect vulnerability was identified in
@angular/platform-serverwhen Server-Side Rendering (SSR) is enabled.When Angular SSR renders an incoming request, URL resolution and platform navigation are managed by
ServerPlatformLocationusingresolveUrl(orparseUrlin v20). WhileresolveUrlrejected protocol-relative URLs whose raw string directly started with//, this check ran prior to WHATWG URL normalization.When a request URL includes a popping dot-segment followed by multiple slashes (such as
/.//evil.testor serialized from router route shapes like/.;/(//evil.test)), the input bypassed the initialurlStr.startsWith('//')check. Subsequent WHATWG URL parsing resolved the dot-segments and resulted in apathnamestarting with//(//evil.test).Consequently,
ServerPlatformLocationstoredpathname = '//evil.test'. When@angular/ssrdetected a mismatch between the rendered URL and the router's final location state, it emitted the unnormalized pathname into the HTTPLocationresponse header, producing an HTTP 302 redirect withLocation: //evil.test, which browsers resolve as a protocol-relative navigation off-origin.Impact
Successful exploitation allows an unauthenticated remote attacker to craft URLs that trick Angular SSR into redirecting users to an arbitrary external domain.
!returnUrl.startsWith('//')before invokingrouter.navigateByUrl) accept/.//evil.testor/.;/(//evil.test)as a safe relative path, allowing attackers to bypass redirect allowlists.ServerPlatformLocationis only utilized in server-side execution environments.Attack Preconditions & Vulnerable Configurations
An application is affected if the following conditions are met:
@angular/platform-serverand@angular/ssr./:tenantmatching.and serializing secondary outlet groups(//evil.test)to/.//evil.test), or passes user-provided navigation targets (e.g.returnUrl).;) or dot-segments without stripping or normalizing them.Exploit Payload Example
An attacker sends a request targeting a route with parameters and child segments:
Response:
The client browser resolves
//evil.testprotocol-relatively and redirects the user away fromexample.comtoevil.test.Patches
The issue is resolved by updating
resolveUrl(andparseUrlin v20) in@angular/platform-serverto verify that the normalized URL pathname does not start with//whenallowProtocolRelativeisfalse.22.2.121.2.2520.3.33Workarounds & Mitigations
If you cannot immediately upgrade to a patched version, apply one of the following mitigations at your edge reverse proxy or WAF:
Configure your reverse proxy (e.g., Nginx, Cloudflare, AWS WAF) to block requests containing
/.//,/..//, or/.;/:Ensure edge proxies or API gateways rewrite or disallow protocol-relative (
//)Locationresponse headers originating from the SSR upstream.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
angular/angular (@angular/platform-server)
v20.3.33Compare Source
platform-server
router
v20.3.32Compare Source
router
v20.3.31Compare Source
platform-server
v20.3.30Compare Source
platform-server
v20.3.29Compare Source
platform-browser
v20.3.28Compare Source
core
http
v20.3.27Compare Source
compiler
http
platform-server
v20.3.26Compare Source
compiler-cli
core
http
service-worker
Configuration
📅 Schedule: (in timezone UTC)
🚦 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 was generated by Mend Renovate. View the repository job log.