Angular SSR
CVE-2026-111754
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft dot-segment URL on SSR site
-
DeliveryVictim clicks link to trusted origin
-
ExploitProxy passes path unnormalized to SSR
-
ExecutionresolveUrl check bypassed, pathname becomes //evil.test
-
PersistServer returns 302 Location: //evil.test
-
ImpactBrowser redirects off-origin to attacker domain
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Redirect URL validation
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires all of: (1) the application runs Server-Side Rendering using both |
| Impact | This is a CWE-601 open redirect in @angular/platform-server's SSR URL resolution ( |
| Exploit ScenarioDerived | An attacker sends a victim a link to a legitimate SSR Angular site such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 20, 2026
An open redirect in @angular/platform-server lets remote attackers craft request URLs that make Angular's server-side rendering layer emit a 302 response with a protocol-relative Location header (//evil.test), sending users off-origin. Only applications actively using SSR with @angular/platform-server and @angular/ssr are affected (pure client-side SPAs are not), and the router must expose parameter/wildcard routes or pass user-controlled navigation targets such as a returnUrl. Successful exploitation requires the victim to follow the crafted link and requires the upstream reverse proxy to pass dot-segments and semicolons unnormalized; no public exploit code or confirmed active exploitation was identified at time of analysis, and vendor patches are available.
RemediationAI
Vendor-released patch: upgrade @angular/platform-server to 22.2.1 (for 22.x), 21.2.25 (for 21.x), or 20.3.33 (for 20.x), as documented in the release tags https://github.com/angular/angular/releases/tag/v22.2.1, https://github.com/angular/angular/releases/tag/v21.2.25 and https://github.com/angular/angular/releases/tag/v20.3.33; the fixes land via PRs 71077, 71078 and 71079 and commits 450af9c8, 83944fc8, 928dcfd2 and d7d81e18 (advisory: https://github.com/angular/angular/security/advisories/GHSA-w739-gvwx-grc3). No fixed version is published for the <= 19.2.25 line, so those deployments should either upgrade to a patched major or apply the compensating controls below. Until patching, block the payload shape at the edge: on Nginx reject request URIs matching /\.(/|\.\.)?/ style sequences such as /.//, /..// and /.;/ with a 400 (trade-off: legitimate paths containing dot-segments or semicolons will also be refused, so scope the rule to SSR routes); on Cloudflare/AWS WAF add equivalent path-normalization rules; and have the gateway strip or reject any Location response header beginning with // from the SSR upstream (trade-off: legitimate protocol-relative redirects, if any are intended, will break). Enabling strict path normalization at the proxy also neutralizes the bypass, but verify it does not alter routing for encoded or semicolon-bearing URLs.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is a CWE-601 URL redirection to an untrusted site, rooted in the ordering of validation versus normalization. In SSR mode, URL resolution and platform navigation are handled by ServerPlatformLocation, which calls resolveUrl (or parseUrl in the v20 line) from packages/platform-server/src/url.ts. That function previously rejected protocol-relative URLs only by testing the raw input string with urlStr.startsWith('//') - a check performed before WHATWG URL parsing collapses dot-segments. Payloads such as /.//evil.test or the router-serialized form /.;/(//evil.test) pass the raw-string test because they begin with a single slash, but after WHATWG normalization the resulting URL.pathname becomes //evil.test. ServerPlatformLocation then stores that pathname, and when @angular/ssr detects a mismatch between the rendered URL and the router's final location state, it writes the unnormalized pathname into the HTTP Location header; browsers interpret a leading // as a protocol-relative authority and navigate to the attacker's domain. Because the bypass occurs below the router layer, application-level allowlists that check !returnUrl.startsWith('//') treat these payloads as safe relative paths. The upstream fix adds an isDisallowedProtocolRelative() helper that re-validates the *normalized* resolved.pathname (throwing NG05702 when allowProtocolRelative is false) at multiple exit points in resolveUrl, plus regression tests covering //, ///, /.//, /..//, /.\/ and absolute-URL variants. Affected package coordinates are pkg:npm/@angular_platform-server.
Know when Open Redirect gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
Remotely reachable crafted URL (AV:N/AC:L/PR:N), victim must follow the redirect (UI:R), and off-origin navigation crosses a security authority (S:C) enabling phishing (C:L/I:L).
Estimated by vuln.today — no official severity rating has been published for this CVE yet.
DescriptionCVE.org
An open redirect vulnerability was identified in @angular/platform-server when Server-Side Rendering (SSR) is enabled.
When Angular SSR renders an incoming request, URL resolution and platform navigation are managed by ServerPlatformLocation using resolveUrl (or parseUrl in v20). While resolveUrl rejected 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.test or serialized from router route shapes like /.;/(//evil.test)), the input bypassed the initial urlStr.startsWith('//') check. Subsequent WHATWG URL parsing resolved the dot-segments and resulted in a pathname starting with // (//evil.test).
Consequently, ServerPlatformLocation stored pathname = '//evil.test'. When @angular/ssr detected a mismatch between the rendered URL and the router's final location state, it emitted the unnormalized pathname into the HTTP Location response header, producing an HTTP 302 redirect with Location: //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.
- Bypasses Application-Level Guards: Common application-level validation routines (such as checking
!returnUrl.startsWith('//')before invokingrouter.navigateByUrl) accept/.//evil.testor/.;/(//evil.test)as a safe relative path, allowing attackers to bypass redirect allowlists. - Client-side SPAs Unaffected: Pure client-side Angular applications (Single Page Applications without SSR) are not vulnerable, as
ServerPlatformLocationis only utilized in server-side execution environments.
Attack Preconditions & Vulnerable Configurations
An application is affected if the following conditions are met:
- SSR Enabled: The application runs in a Server-Side Rendering environment using
@angular/platform-serverand@angular/ssr. - Parameter Route Shapes: The router contains parameter routes with wildcard or child segments (e.g.
/:tenantmatching.and serializing secondary outlet groups(//evil.test)to/.//evil.test), or passes user-provided navigation targets (e.g.returnUrl). - Reverse Proxy Passthrough: Upstream reverse proxies (Nginx, Cloudflare, ALB) pass semicolons (
;) or dot-segments without stripping or normalizing them.
Exploit Payload Example
An attacker sends a request targeting a route with parameters and child segments:
GET /.;/(//evil.test) HTTP/1.1
Host: example.comResponse:
HTTP/1.1 302 Found
Location: //evil.testThe client browser resolves //evil.test protocol-relatively and redirects the user away from example.com to evil.test.
Patches
The issue is resolved by updating resolveUrl (and parseUrl in v20) in @angular/platform-server to verify that the normalized URL pathname does not start with // when allowProtocolRelative is false.
22.2.121.2.2520.3.33
Workarounds & Mitigations
If you cannot immediately upgrade to a patched version, apply one of the following mitigations at your edge reverse proxy or WAF:
- Reject Paths with Dot-Segments Followed by Slashes:
Configure your reverse proxy (e.g., Nginx, Cloudflare, AWS WAF) to block requests containing /.//, /..//, or /.;/:
# Nginx example: reject suspicious path normalization sequences
if ($request_uri ~* "(\n/\.\/|\/\.\;)") {
return 400;
}- Sanitize Redirect Headers:
Ensure edge proxies or API gateways rewrite or disallow protocol-relative (//) Location response headers originating from the SSR upstream.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
Affected Products (CPE)CVE.org
More in Open Redirect
View allA malicious third-party can give a crafted "ssh://..." URL to an unsuspecting victim, and an attempt to visit the URL ca
GFI Kerio Control versions 9.2.5 through 9.4.5 contain an HTTP response splitting vulnerability in the dest parameter of
PHP through 7.0.8 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and therefore does not protect
Multiple open redirect vulnerabilities in Apache Struts 2.0.0 through 2.3.15 allow remote attackers to redirect users to
When the default servlet in Apache Tomcat versions 9.0.0.M1 to 9.0.11, 8.5.0 to 8.5.33 and 7.0.23 to 7.0.90 returned a r
Open redirect vulnerability in age-verification.php in the Age Verification plugin 0.4 and earlier for WordPress allows
Open redirect vulnerability in Kaseya Virtual System Administrator (VSA) 7.x before 7.0.0.29, 8.x before 8.0.0.18, 9.0 b
Vulnerability in the Oracle Applications Framework component of Oracle E-Business Suite (subcomponent: Popup windows (li
Unspecified vulnerability in the Oracle Application Server Single Sign-On component in Oracle Fusion Middleware 10.1.4.3
Flarum is open source discussion platform software. Rated medium severity (CVSS 6.5), this vulnerability is remotely exp
Open redirect vulnerability in Novius OS 5.0.1 (Elche) allows remote attackers to redirect users to arbitrary web sites
Open redirect vulnerability in the Redirect function in stageshow_redirect.php in the StageShow plugin before 5.0.9 for
GHSA-w739-gvwx-grc3
CVE.org
Exploit-DB