CVE-2026-104871 json
Angular SSR: Path Traversal to Sibling Directories in CommonEngine on Windows
published last mo. modified last mo. also EUVD-2026-91778 , GHSA-7g7c-h8rr-7p6q
- cvss
- 6.3
- version 4.0, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 36%
- public exploits
- 0
- none known
Summary
The Angular SSR is a server-rise rendering tool for Angular applications. Prior to versions 20.3.36, 21.2.23, and 22.1.7, the CommonEngine retrieveSSGPage prerendered-page retrieval logic in @angular/ssr/node, and in @angular/ssr for versions 17 through 18, accepts a relative request URL containing a backslash parent-traversal segment on Windows. The non-special resolve:// URL base preserves the backslash, path.join interprets it as a Windows separator, and the pagePath.startsWith(normalize(publicPath)) check incorrectly accepts a sibling output directory whose name shares the configured public-directory prefix. An unauthenticated requester can therefore retrieve a sibling prerendered HTML page when that page contains the Angular SSG marker. The issue is limited to Windows deployments that pass relative request URLs to CommonEngine.render, have a prefix-sharing sibling output directory, and contain qualifying prerendered Angular HTML; it does not provide arbitrary file read. This issue is fixed in versions 20.3.36, 21.2.23, and 22.1.7.
Patch / fix
- npm @angular/ssr 20.3.36, 21.2.23, 22.1.7
- angular angular_cli 20.3.36, 21.2.23, 22.1.7
- github.com/angular/angular-cli@645e41a commit
- github.com/angular/angular-cli@70748ca commit
- github.com/angular/angular-cli@bb72145 commit
- github.com/angular/angular-cli@c3e5982 commit
- github.com/angular/angular-cli/releases/tag/v20.3.36 release
- github.com/angular/angular-cli/releases/tag/v21.2.23 release
- github.com/angular/angular-cli/releases/tag/v22.1.7 release
Is CVE-2026-104871 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- last mo.
Exploit prediction
0.42% chance of exploitation in the next 30 days, higher than 36% of all scored CVEs (FIRST EPSS, 2026-11-09).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 4.0 | 6.3 | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N |
| CNA | 4.0 | 6.3 | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| npm | @angular/ssr | >=22.0.0, <22.1.7 >=21.0.0, <21.2.23 >=20.0.0, <20.3.36 <=19.2.27 |
22.1.7 21.2.23 20.3.36 |
Affected products
- angular angular-cli
Classification
- Weakness
-
- CWE-22 Improper Limitation of a Pathname to a Restricted Directory
References
-
github.com
/angular/angular-cli/commit/645e41a47d21b7651837a4250de99af0509626e2
web
-
github.com
/angular/angular-cli/commit/70748ca8e76fe4b42798719410336119d943e755
web
-
github.com
/angular/angular-cli/commit/bb72145f9ab45aee29f523236b3a25cd0813a841
web
-
github.com
/angular/angular-cli/commit/c3e5982e49705f0f6a913cb94622b4c555d2d914
web
-
github.com
/angular/angular-cli/security/advisories/GHSA-7g7c-h8rr-7p6q
web
-
github.com
/angular/angular-cli/releases/tag/v20.3.36
web
-
github.com
/angular/angular-cli/releases/tag/v21.2.23
web
-
github.com
/angular/angular-cli/releases/tag/v22.1.7
web
-
nvd.nist.gov
/vuln/detail/CVE-2026-104871
advisory
-
github.com
/angular/angular-cli
package
Sources
- CVE List CVE-2026-104871
- GitHub Advisory GHSA-7g7c-h8rr-7p6q
- NVD CVE-2026-104871
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.