CVE-2026-90711: proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet
proxy-addr determines which network hops are trusted proxies so that X-Forwarded-For can be believed. When an application configures a trust subnet as an IPv4-mapped IPv6 address with a short prefix, such as ::ffff:10.0.0.0/8 (the correct spelling is ::ffff:10.0.0.0/104), the subnet compiles with all-zero leading bits and matches every IPv4 address instead of the block it names. The same happens for any IPv6 trust subnet with zero leading bits, such as ::/1.
Every unauthenticated client is then trusted as a proxy at hop 0, so proxyaddr(req, trust), and therefore req.ip and req.ips in Express, returns whatever the client sends in X-Forwarded-For. This defeats IP-based access control, rate limiting, geolocation, and audit logging. The misconfiguration compiles without any error, and the same block written correctly behaves correctly, so the difference is not visible from the configuration.
References
- cna.openjsf.org/security-advisories.html
- github.com/advisories/GHSA-jqcg-44mw-7w3h
- github.com/jshttp/proxy-addr/commit/780911d84d18e2c5fa008ed0c0d387631ec11965
- github.com/jshttp/proxy-addr/releases/tag/v2.0.8
- github.com/jshttp/proxy-addr/security/advisories/GHSA-jqcg-44mw-7w3h
- nvd.nist.gov/vuln/detail/CVE-2026-90711
Code Behaviors & Features
Detect and mitigate CVE-2026-90711 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →