CVE-2026-50168: Angular SSR Host Allowlist Bypass Leading to SSRF
Angular Server-Side Rendering (SSR) applications running on Node.js are vulnerable to Server-Side Request Forgery (SSRF) attacks when they enforce host allowlists to restrict backend requests. An attacker can craft a malformed URL with a double port (e.g., http://evil.com:80:80/path) that bypasses the allowlist validation but is still accepted by the underlying DOM parser, allowing the attacker to redirect server-side requests to arbitrary external endpoints. This affects versions prior to 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 8.2 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N
- Weaknesses (CWE)
- CWE-346, CWE-918
- Affected products
- 16 configuration(s)
- Published / Modified
- 2026-06-22 / 2026-07-09
NVD description (verbatim)
Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23, an issue in the @angular/platform-server package allows remote attackers to bypass host allowlist constraints and direct server-side outgoing requests to arbitrary external endpoints. This occurs due to a parser differential between the strict WHATWG URL parser used for allowlist validation and the lenient Domino URL parser used to initialize the server emulated DOM. When a server-side request contains a malformed URL with a double port structure (e.g., http://evil.com:80:80/path), Node's strict URL.canParse(url) logic returns false and skips host check validation entirely. However, the same malformed URL is later accepted and parsed leniently by Domino's internal parser, which resolves the origin to http://evil.com:80. The Angular SSR HTTP request interceptor (relativeUrlsTransformerInterceptorFn) then resolves all relative backend HTTP requests against this adopted origin, executing the SSRF attack. This vulnerability is fixed in 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability stems from a parser differential in the @angular/platform-server package. Angular's allowlist validation relies on Node.js's strict WHATWG URL parser (URL.canParse()), which correctly rejects malformed double-port URLs and skips host validation when parsing fails. However, the same malformed URL is later accepted and leniently parsed by Domino's internal URL parser during DOM initialization, which resolves the origin to a valid endpoint (http://evil.com:80). The Angular SSR HTTP request interceptor (relativeUrlsTransformerInterceptorFn) then uses this adopted origin to resolve relative backend HTTP requests, effectively bypassing the allowlist constraint and enabling SSRF. The attack exploits the semantic gap between two parsers operating on the same input without consistent validation.
Business impact
Organizations deploying Angular SSR applications with host allowlists to restrict backend API calls face exposure to SSRF attacks that could allow attackers to: (1) exfiltrate sensitive data from internal services not intended for external access, (2) pivot to internal network resources and systems behind the application server, (3) probe internal infrastructure and enumerate services, and (4) potentially trigger unintended state changes on internal systems. The attack requires no authentication and can be triggered remotely, making it a significant supply-chain risk for companies relying on Angular SSR for production applications.
Affected systems
The vulnerability affects Angular versions prior to 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23. Only applications using the @angular/platform-server package with Server-Side Rendering (SSR) enabled are at risk. Applications using Angular for client-side rendering exclusively are not affected. The vulnerability is specific to Node.js SSR implementations; other server-side platforms or frameworks are not directly impacted by this Angular-specific parser differential.
Exploitability
This vulnerability has a high exploitability profile: no authentication is required, the attack is network-accessible, and the payload (a malformed double-port URL) is trivial to craft. An attacker need only make a request to the Angular SSR application with a specially formed URL parameter or request body that the application will then use as a backend request origin. The attack succeeds silently without requiring user interaction. However, practical exploitation depends on the application accepting and processing user-controlled URL inputs that are later used to construct backend requests—common in API proxies, universal rendering scenarios, and dynamic backend routing.
Remediation
Apply patches immediately: upgrade to Angular 22.0.0-rc.2 or later, 21.2.15 or later, 20.3.22 or later, or 19.2.23 or later, depending on your current version. These patches fix the parser differential by ensuring consistent URL validation before the Domino DOM parser accepts the input. Organizations should inventory all SSR deployments and prioritize patching in development, staging, and production environments. Review current host allowlist configurations to ensure they are still appropriate after patching and consider additional network-level controls to restrict backend service access.
Patch guidance
The fix is available in the specified patch versions across all supported release lines. Update your Angular dependencies via npm or yarn: `npm update @angular/platform-server` or `yarn upgrade @angular/platform-server`. Verify the installed version matches or exceeds 22.0.0-rc.2, 21.2.15, 20.3.22, or 19.2.23 for your respective major version line. No breaking changes are expected from these patches; they are drop-in security updates. Test in a staging environment before deploying to production, particularly if you have custom URL interceptors or allowlist logic.
Detection guidance
Monitor access logs for requests containing malformed URLs with double-port structures (e.g., http://evil.com:80:80/). Check application logs for unexpected redirects or requests to external hosts from your SSR server. If you have network-level monitoring, look for outbound connections from your Node.js SSR process to external hosts not in your allowlist. Review server access logs for patterns of probing internal services or unusual backend API calls originating from the SSR layer. A Web Application Firewall (WAF) can be configured to block requests with malformed URLs before they reach the application.
Why prioritize this
This vulnerability merits immediate attention due to its high CVSS score (8.2), direct bypass of security controls (host allowlists), and attack simplicity. SSRF vulnerabilities are consistently valuable to attackers for lateral movement and data exfiltration. The parser differential is subtle but exploitable in real-world deployments. The fact that it affects multiple Angular versions across the 19.x through 22.x lines indicates broad exposure across organizations using maintained Angular versions.
Risk score, explained
The CVSS 3.1 score of 8.2 (HIGH) reflects: network-accessible attack vector, low complexity, no privilege or user interaction required, and confidentiality impact (potential data exfiltration via SSRF). The integrity impact is rated lower because SSRF typically affects availability and confidentiality more directly than integrity. The score appropriately captures the serious nature of an unauthenticated, remote allowlist bypass.
Frequently asked questions
Do client-side Angular applications need to be patched?
No. This vulnerability is specific to @angular/platform-server and only affects Server-Side Rendering (SSR) deployments. Client-side Angular Single Page Applications (SPAs) are not vulnerable.
What is the parser differential, and why does it matter?
Angular uses Node.js's strict WHATWG URL parser for allowlist validation and Domino's lenient parser for DOM initialization. A malformed URL (like http://evil.com:80:80/path) fails strict parsing and bypasses validation, but succeeds in lenient parsing, creating a security gap. The fix ensures consistent validation before Domino parses the URL.
Can an attacker exploit this without knowing the allowlist?
Yes. The attacker exploits the allowlist mechanism itself by crafting a malformed URL that the strict parser rejects (thus skipping validation) but the lenient parser accepts. The attacker doesn't need to know which hosts are on the allowlist; they're bypassing the validation entirely.
Does this affect production if we don't use host allowlists?
If your application doesn't configure host allowlists on SSR requests, you may have already been exposed to SSRF risks. However, this specific CVE exploits the allowlist bypass. Patching is still essential, and you should implement allowlist controls if your SSR application makes backend requests on behalf of user input.
This analysis is based on the published CVE description and patch information as of the modification date (2026-07-09). Organizations should verify patch availability and compatibility with their specific Angular and Node.js versions before deploying updates. This vulnerability has not been added to the CISA Known Exploited Vulnerabilities (KEV) catalog as of the analysis date, but active exploitation may occur following public disclosure. For the most current guidance, consult the official Angular security advisory and your vendor's vulnerability management platform. SEC.co does not provide legal, compliance, or liability advice; consult your security and legal teams regarding organizational response and risk acceptance decisions. Source: NVD (public-domain), retrieved 2026-07-28. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-46417MEDIUMAngular SSR Server-Side Request Forgery Vulnerability
- CVE-2026-10068HIGHSSRF in Shibby Tomato 1.28 miniupnpd (Unmaintained)
- CVE-2026-10107HIGHMoviePilot v2 SSRF in Image Proxy Allows Internal Network Access
- CVE-2026-10280HIGHServer-Side Request Forgery in Horizon921 mcpilot 0.1.0
- CVE-2026-10287HIGHSSRF in SourceCodester SEO Meta Tag Extractor 1.0
- CVE-2026-10586HIGHGutenberg Essential Blocks SSRF Vulnerability – High Risk Server-Side Request Forgery
- CVE-2026-10771HIGHCRMEB Java SSRF Vulnerability in QR Code Endpoint
- CVE-2026-10846HIGHNLnet Labs ldns DNS Spoofing Vulnerability - Off-Path Poisoning Attack