GitHub Advisoryadvisory · npm

GHSA-q63q-pgmf-mxhr Angular SSR has a Server-Side Request Forgery (SSRF) flaw

HIGH Published 2025-10-16 Modified 2025-10-16 Official page ↗
Aliases
CVE-2025-62427
Ecosystem
npm
Packages
@angular/ssr
Severity
High
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weaknesses
CWE-918
Reviewed
2025-10-16

Affected packages

• npm @angular/ssr: >= 19.0.0-next.0, < 19.2.18 → fixed in 19.2.18 • npm @angular/ssr: >= 20.0.0-next.0, < 20.3.6 → fixed in 20.3.6 • npm @angular/ssr: >= 21.0.0-next.0, < 21.0.0-next.8 → fixed in 21.0.0-next.8

Description

Impact The vulnerability is a Server-Side Request Forgery (SSRF) flaw within the URL resolution mechanism of Angular's Server-Side Rendering package (`@angular/ssr`). The function `createRequestUrl` uses the native `URL` constructor. When an incoming request path (e.g., `originalUrl` or `url`) begins with a double forward slash (`//`) or backslash (`\\`), the `URL` constructor treats it as a schema-relative URL. This behavior overrides the security-intended base URL (protocol, host, and port) supplied as the second argument, instead resolving the URL against the scheme of the base URL but adopting the attacker-controlled hostname. This allows an attacker to specify an external domain in the URL path, tricking the Angular SSR environment into setting the page's virtual location (accessible via `DOCUMENT` or `PlatformLocation` tokens) to this attacker-controlled domain. Any subsequent relative HTTP requests made during the SSR process (e.g., using `HttpClient.get('assets/data.json')`) will be incorrectly resolved against the attacker's domain, forcing the server to communicate with an arbitrary external endpoint. Exploit Scenario A request to `http://localhost:4200//attacker-domain.com/some-page` causes Angular to believe the host is attacker-domain.com. A relative request to api/data then becomes a server-side request to `http://attacker-domain.com/api/data`. Patches • `@angular/ssr` 19.2.18 • `@angular/ssr` 20.3.6 • `@angular/ssr` 21.0.0-next.8 Mitigation The application's internal location must be robustly determined from the incoming request. The fix requires sanitizing or validating the request path to prevent it from being interpreted as a schema-relative URL (i.e., ensuring it does not start with `//`). Server-Side Middleware If you can't upgrade to a patched version, implement a middleware on the Node.js/Express server that hosts the Angular SSR application to explicitly reject or sanitize requests where the path begins with a double slash (`//`). Example (Express/Node.js): ```ts // Place this middleware before the Angular SSR handler app.use((req, res, next) => { if (req.originalUrl?.startsWith('//')) { // Sanitize by forcing a single slash req.originalUrl = req.originalUrl.replace(/^\/\/+/, '/'); req.url = req.url.replace(/^\/\/+/, '/'); } next(); }); ``` References • Report: https://github.com/angular/angular-cli/issues/31464 • Fix: https://github.com/angular/angular-cli/pull/31474

Related

Alias · CVE (1)

  • CVE-2025-62427 The Angular SSR is a server-rise rendering tool for Angular applications. vulnerability

Weakness · CWE (1)

  • CWE-918 Server-Side Request Forgery weakness

References