Summary
CVE-2026-90711 is a critical IP spoofing vulnerability (CWE-290: Authentication Bypass by Spoofing) affecting the widely-used proxy-addr npm package, a dependency relied on by Express and many other Node.js frameworks to determine the true client IP address behind a proxy. Applications that configure a trust subnet using IPv4-mapped IPv6 notation with an incorrect prefix length silently end up trusting every IPv4 address on the internet, allowing unauthenticated remote attackers to spoof their source IP via the X-Forwarded-For header. The flaw carries a CVSS v3.1 score of 9.1 (Critical).
Technical details
- Root cause: When a trust subnet is specified using IPv4-mapped IPv6 notation (e.g.
::ffff:10.0.0.0/8) instead of the correct, fully-expanded prefix (e.g.::ffff:10.0.0.0/104),proxy-addrcompiles the subnet mask incorrectly. The resulting mask ends up with all-zero leading bits, causing it to match every IPv4 address rather than the intended, narrower block. - Trigger conditions: The application must configure
proxy-addr(directly or via a framework such as Express’strust proxysetting) with an IPv4-mapped IPv6 trust subnet whose prefix length is shorter than 96+the intended IPv4 prefix (i.e., not using the full/104-style notation). No error or warning is raised when the misconfiguration occurs. - Attack vector: Network — an unauthenticated attacker sends a crafted
X-Forwarded-Forheader in an HTTP request; because the trust check erroneously matches, the attacker-supplied IP is treated as trusted. - Impact: Attackers can bypass IP-based access controls, rate limiting, geolocation restrictions, and audit/logging mechanisms that rely on the client IP resolved by
proxy-addr. This can lead to unauthorized access to IP-restricted resources and falsified audit trails (High confidentiality and integrity impact; no direct availability impact).
Affected software
proxy-addr(npm package) versions >= 1.1.0 and < 2.0.8- Any application or framework (e.g., Express-based services) that depends on a vulnerable
proxy-addrversion and configures IP trust subnets using IPv4-mapped IPv6 notation with a short/incorrect prefix length
Severity
- CVSS v3.1 Base Score: 9.1 (Critical)
- Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Mitigation and recommended actions
- Immediate: Upgrade
proxy-addrto version 2.0.8 or later, which correctly handles IPv4-mapped IPv6 prefix lengths. - If immediate patching is not possible:
- Avoid IPv4-mapped IPv6 shorthand for trust subnets; use plain IPv4 notation instead (e.g.,
10.0.0.0/8). - If IPv6 notation must be used, always specify the full, correctly-expanded prefix (e.g.,
::ffff:10.0.0.0/104) rather than a shortened prefix. - Audit existing
trust proxy/ trusted-subnet configurations in Express and other frameworks that depend onproxy-addrto confirm no IPv4-mapped IPv6 subnets with short prefixes are in use.
- Avoid IPv4-mapped IPv6 shorthand for trust subnets; use plain IPv4 notation instead (e.g.,

