Skip to content
Heist/ feed
Back to feed
High

Server-Side Request Forgery (SSRF) in Angular SSR

Type: advisorySources: OSV

The Angular SSR is a server-rise rendering tool for Angular applications. The vulnerability is a Server-Side Request Forgery (SSRF) flaw within the URL resolution mechanism of Angular's Server-Side Rendering package (@angular/ssr) before 19.2.18, 20.3.6, and 21.0.0-next.8. 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. This vulnerability is fixed in 19.2.18, 20.3.6, and 21.0.0-next.8.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2025-62427
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 18:38 UTC · Revision 1

Source evidence

Server-Side Request Forgery (SSRF) in Angular SSR

core-osv · Original source

Published 16 Oct 2025, 18:50 UTC

The Angular SSR is a server-rise rendering tool for Angular applications. The vulnerability is a Server-Side Request Forgery (SSRF) flaw within the URL resolution mechanism of Angular's Server-Side Rendering package (@angular/ssr) before 19.2.18, 20.3.6, and 21.0.0-next.8. 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. This vulnerability is fixed in 19.2.18, 20.3.6, and 21.0.0-next.8.

osv:CVE-2025-62427
Complete source record
{
  "id": "5f4b28423089da01f1083e26ec13fd70c15ad68198c3ad8df4a243736019ddb3",
  "url": "https://osv.dev/vulnerability/CVE-2025-62427",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Server-Side Request Forgery (SSRF) in Angular SSR",
    "summary": "The Angular SSR is a server-rise rendering tool for Angular applications. The vulnerability is a Server-Side Request Forgery (SSRF) flaw within the URL resolution mechanism of Angular's Server-Side Rendering package (@angular/ssr) before 19.2.18, 20.3.6, and 21.0.0-next.8. 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. This vulnerability is fixed in 19.2.18, 20.3.6, and 21.0.0-next.8.",
    "evidence": "osv:CVE-2025-62427",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2025-62427",
      "aliases": [
        "CVE-2025-62427",
        "GHSA-q63q-pgmf-mxhr"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "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"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/angular/angular-cli",
              "type": "GIT",
              "events": [
                {
                  "introduced": "a7f466a5fa87c51b914441524bd0dff5b3957ced"
                },
                {
                  "fixed": "8590f19236e2ccc30c0b93c415ee716933628e93"
                },
                {
                  "introduced": "896d98a31326d88acc3b8ddb80f9de34a71bf3a0"
                },
                {
                  "fixed": "f7bd5679e6de24063a806eaf2fbde4ffdc1e1d8c"
                },
                {
                  "introduced": "2c99210e47b22342fea48e86bc61e8ba27fafb63"
                },
                {
                  "fixed": "08e13a84fd3d916fceedb68fdffe2870f44e7ac7"
                },
                {
                  "fixed": "5271547c80662de10cb3bcb648779a83f6efedfb"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "19.0.0-next.0"
                      },
                      {
                        "fixed": "19.2.18"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "introduced": "20.0.0-next.0"
                      },
                      {
                        "fixed": "20.3.6"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "introduced": "21.0.0-next.0"
                      },
                      {
                        "fixed": "21.0.0-next.8"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "5271547c80662de10cb3bcb648779a83f6efedfb"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "19.2.17",
            "20.3.5",
            "21.0.0-next.7",
            "20.3.4",
            "21.0.0-next.6",
            "20.3.3",
            "21.0.0-next.5",
            "20.3.2",
            "21.0.0-next.4",
            "20.3.1",
            "19.2.16",
            "20.3.0",
            "21.0.0-next.3",
            "20.3.0-rc.0",
            "20.2.2",
            "21.0.0-next.2",
            "20.2.1",
            "21.0.0-next.1",
            "20.2.0",
            "21.0.0-next.0",
            "20.2.0-rc.1",
            "20.2.0-rc.0",
            "20.2.0-next.3",
            "20.2.0-next.2",
            "20.2.0-next.1",
            "20.2.0-next.0",
            "20.1.0-next.3",
            "20.1.0-next.2",
            "20.1.0-next.1",
            "19.2.15",
            "19.2.14",
            "20.1.0-next.0",
            "19.2.13",
            "19.2.12",
            "19.2.11",
            "19.2.10",
            "19.2.9",
            "20.0.0-next.8",
            "20.0.0-next.7",
            "20.0.0-next.6",
            "19.2.8",
            "19.2.7",
            "20.0.0-next.5",
            "19.2.6",
            "20.0.0-next.4",
            "19.2.5",
            "20.0.0-next.3",
            "20.0.0-next.2",
            "19.2.4",
            "19.2.3",
            "20.0.0-next.1",
            "19.2.2",
            "19.2.1",
            "20.0.0-next.0",
            "19.2.0",
            "19.2.0-rc.0",
            "19.2.0-next.2",
            "19.2.0-next.1",
            "19.2.0-next.0",
            "19.1.0-next.2",
            "19.1.0-next.1",
            "19.1.0-next.0",
            "19.0.0-next.12",
            "19.0.0-next.11",
            "19.0.0-next.10",
            "19.0.0-next.9",
            "19.0.0-next.8",
            "19.0.0-next.7",
            "19.0.0-next.6",
            "19.0.0-next.5",
            "19.0.0-next.4",
            "19.0.0-next.3",
            "19.0.0-next.2",
            "19.0.0-next.1",
            "19.0.0-next.0"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2025-62427.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:22.258624521Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/62xxx/CVE-2025-62427.json",
        "https://github.com/angular/angular-cli/security/advisories/GHSA-q63q-pgmf-mxhr",
        "https://nvd.nist.gov/vuln/detail/CVE-2025-62427",
        "https://github.com/angular/angular-cli/commit/5271547c80662de10cb3bcb648779a83f6efedfb"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-918"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/62xxx/CVE-2025-62427.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2025-62427",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 488643,
  "published_at": "2025-10-16T18:50:11.598+00:00"
}