Loading...
Skip to main content

CVE-2026-27739 — Vulnerability in @angular/ssr — CVE Details

CRITICAL

Angular SSR is vulnerable to SSRF and Header Injection via request handling pipeline

Published February 25, 2026Updated February 25, 2026Source: osv

Summary

A [Server-Side Request Forgery (SSRF)](https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/SSRF) vulnerability has been identified in the Angular SSR request handling pipeline. The vulnerability exists because Angular’s internal URL reconstruction logic directly trusts and consumes user-controlled HTTP headers specifically the Host and `X-Forwarded-*` family to determine the application's base origin without any validation of the destination domain. Specifically, the framework didn't have checks for the following: - **Host Domain**: The `Host` and `X-Forwarded-Host` headers were not checked to belong to a trusted origin. This allows an attacker to redefine the "base" of the application to an arbitrary external domain. - **Path & Character Sanitization**: The `X-Forwarded-Host` header was not checked for path segments or special characters, allowing manipulation of the base path for all resolved relative URLs. - **Port Validation**: The `X-Forwarded-Port` header was not verified as numeric, leading to malformed URI construction or injection attacks. This vulnerability manifests in two primary ways: - **Implicit Relative URL Resolution**: Angular's `HttpClient` resolves relative URLs against this unvalidated and potentially malformed base origin. An attacker can "steer" these requests to an external server or internal service. - **Explicit Manual Construction**: Developers injecting the `REQUEST` object to manually construct URLs (for fetch or third-party SDKs) directly inherit these unsanitized values. By accessing the `Host` / `X-Forwarded-*` headers, the application logic may perform requests to attacker-controlled destinations or malformed endpoints. ### Impact When successfully exploited, this vulnerability allows for arbitrary internal request steering. This can lead to: - **Credential Exfiltration**: Stealing sensitive `Authorization` headers or session cookies by redirecting them to an attacker's server. - **Internal Network Probing**: Accessing and transmitting data from internal services, databases, or cloud metadata endpoints (e.g., `169.254.169.254`) not exposed to the public internet. - Confidentiality Breach: Accessing sensitive information processed within the application's server-side context. ### Attack Preconditions - The victim application must use Angular SSR (Server-Side Rendering). - The application must perform `HttpClient` requests using relative URLs OR manually construct URLs using the unvalidated `Host` / `X-Forwarded-*` headers using the `REQUEST` object. - **Direct Header Access**: The application server is reachable by an attacker who can influence these headers without strict validation from a front-facing proxy. - **Lack of Upstream Validation**: The infrastructure (Cloud, CDN, or Load Balancer) does not sanitize or validate incoming headers. ### Patches - 21.2.0-rc.1 - 21.1.5 - 20.3.17 - 19.2.21 ### Workarounds - **Use Absolute URLs:** Avoid using `req.headers` for URL construction. Instead, use trusted variables for your base API paths. - **Implement Strict Header Validation (Middleware)**: If you cannot upgrade immediately, implement a middleware in your `server.ts` to enforce numeric ports and validated hostnames. ```ts const ALLOWED_HOSTS = new Set(['your-domain.com']); app.use((req, res, next) => { const hostHeader = (req.headers['x-forwarded-host'] ?? req.headers['host'])?.toString(); const portHeader = req.headers['x-forwarded-port']?.toString(); if (hostHeader) { const hostname = hostHeader.split(':')[0]; // Reject if hostname contains path separators or is not in allowlist if (/^[a-z0-9.:-]+$/i.test(hostname) || (!ALLOWED_HOSTS.has(hostname) && hostname !== 'localhost')) { return res.status(400).send('Invalid Hostname'); } } // Ensure port is strictly numeric if provided if (portHeader && !/^\d+$/.test(portHeader)) { return res.status(400).send('Invalid Port'); } next(); }); ``` ### References - [Fix](https://github.com/angular/angular-cli/pull/32516) - [Docs](https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf)

Advisory Timeline

  • First published February 25, 2026 (229 days ago).
  • Last revised February 25, 2026 — 0 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

npm
Update @angular/ssr to 20.3.17 or later
npm install @angular/ssr@20.3.17
npm
Update @angular/ssr to 21.1.5 or later
npm install @angular/ssr@21.1.5
npm
Update @angular/ssr to 19.2.21 or later
npm install @angular/ssr@19.2.21
npm
Update @angular/ssr to 21.2.0-rc.1 or later
npm install @angular/ssr@21.2.0-rc.1

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (6)

Affects 1 ecosystem: npm (3).

PackageEcosystemAffectedFixed In
@angular/ssr
npm
All versions20.3.17
@angular/ssr
npm
All versions21.1.5
@angular/ssr
npm
All versions19.2.21
@nguniversal/common
npm
All versionsRange-based data available
@angular/ssr
npm
All versions21.2.0-rc.1
@nguniversal/express-engine
npm
All versionsRange-based data available

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-918
    Server-Side Request Forgery (SSRF)MITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.3 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N

Frequently Asked Questions

What is CVE-2026-27739?
Angular SSR is vulnerable to SSRF and Header Injection via request handling pipeline This vulnerability has been assigned a severity rating of CRITICAL (CVSS score: 9.3/10).
How do I check if my project is affected by CVE-2026-27739?
CVE-2026-27739 affects @angular/ssr, @nguniversal/common and @nguniversal/express-engine. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-27739 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.3

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-x288-3778-4hhx

Related CVEs

  • CVE-2026-41423
    HIGH

    Angular: SSRF via protocol-relative and backslash URLs in Angular Platform-Server

  • CVE-2025-66035
    HIGH

    Angular is Vulnerable to XSRF Token Leakage via Protocol-Relative URLs in Angular HTTP Client

  • CVE-2026-88056
    HIGH

    Angular: SSRF and Cross-Origin Credential Disclosure via URL Resolution Discrepancy in SSR

  • CVE-2026-32635
    HIGH

    Angular vulnerable to XSS in i18n attribute bindings

  • CVE-2026-50556
    HIGH

    @angular/platform-server: Missing `<noscript>` Raw-Text Serialization Escaping leads to Cross-Site Scripting (XSS) in Angular SSR

  • CVE-2026-88058
    HIGH

    Angular SSR: XSS via Unescaped Processing Instruction (<?...?>) Nodes in Fallback Raw-Content Elements

  • CVE-2026-69151
    HIGH

    Angular i18n: Cross-Site Scripting (XSS) via event-handler attributes

  • CVE-2026-22610
    HIGH

    Angular has XSS Vulnerability via Unsanitized SVG Script Attributes

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies