- Description
- The Angular SSR is a server-rise rendering tool for Angular applications. Versions on the 22.x branch prior to 22.0.0-next.2, the 21.x branch prior to 21.2.3, and the 20.x branch prior to 20.3.21 have an Open Redirect vulnerability in `@angular/ssr` due to an incomplete fix for CVE-2026-27738. While the original fix successfully blocked multiple leading slashes (e.g., `///`), the internal validation logic fails to account for a single backslash (`\`) bypass. When an Angular SSR application is deployed behind a proxy that passes the `X-Forwarded-Prefix` header, an attacker provides a value starting with a single backslash, the internal validation failed to flag the single backslash as invalid, the application prepends a leading forward slash, resulting in a `Location` header containing the URL, and modern browsers interpret the `/\` sequence as `//`, treating it as a protocol-relative URL and redirecting the user to the attacker-controlled domain. Furthermore, the response lacks the `Vary: X-Forwarded-Prefix` header, allowing the malicious redirect to be stored in intermediate caches (Web Cache Poisoning). Versions 22.0.0-next.2, 21.2.3, and 20.3.21 contain a patch. Until the patch is applied, developers should sanitize the `X-Forwarded-Prefix` header in their `server.ts` before the Angular engine processes the request.
- Source
- security-advisories@github.com
- NVD status
- Analyzed
- Products
- angular_cli
[
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:angular:angular_cli:*:-:*:*:*:node.js:*:*",
"matchCriteriaId": "38155A4F-04D4-4EB4-B7B4-DC5BA37638C4",
"versionEndExcluding": "20.3.21",
"versionStartIncluding": "20.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:angular:angular_cli:*:-:*:*:*:node.js:*:*",
"matchCriteriaId": "386A3C02-930D-4B48-BFC9-16AB1A763DD5",
"versionEndExcluding": "21.2.3",
"versionStartIncluding": "21.0.0",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:angular:angular_cli:22.0.0:next0:*:*:*:node.js:*:*",
"matchCriteriaId": "1BD57930-760B-43CB-8BD1-25D79A7E60FC",
"vulnerable": true
},
{
"criteria": "cpe:2.3:a:angular:angular_cli:22.0.0:next1:*:*:*:node.js:*:*",
"matchCriteriaId": "81D13997-DAC1-472B-93D2-8BF19ACC6BFC",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
]