CVE-2026-90711: proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet

Published Sep 15, 2026
·
Updated

proxy-addr is a Node.js module that determines a request's client address behind trusted reverse proxies, and it backs Express req.ip and req.ips. In versions 1.1.0 through 2.0.7, a trust subnet written in IPv4-mapped IPv6 notation with an IPv4-sized prefix, such as ::ffff:10.0.0.0/8 instead of the correct ::ffff:10.0.0.0/104, is accepted without error but trusts every IPv4 address on the internet rather than the block it names. Because the socket peer then becomes trusted at hop 0, any unauthenticated client can supply an arbitrary X-Forwarded-For header and control the address the application reads, which defeats IP-based access control, rate limiting, geolocation, and audit logging. This is a fail-open regression introduced in version 1.1.0. The issue is fixed in proxy-addr 2.0.8, and users should upgrade to 2.0.8 or later. As a workaround, ensure any IPv4-mapped IPv6 trust subnet uses a prefix length of at least 97, or express the range in plain IPv4 notation.

Affected Software

1 affected component
npm/proxy-addr>=1.1.0<=2.0.7

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade proxy-addr to a version that resolves this vulnerability.

    Fixed in 2.0.8
  2. Configuration

    Update any IPv4-mapped IPv6 trust subnet configuration so the prefix length is at least 97 (e.g., ::ffff:10.0.0.0/104) or rewrite the trusted range using plain IPv4 notation, since ::ffff:10.0.0.0/8 in v1.1.0–2.0.7 is accepted fail-open and trusts all IPv4 addresses.

    proxy-addr trust subnet notation for IPv4-mapped IPv6 = Use a prefix length of at least 97 (e.g., ::ffff:10.0.0.0/104) or express the range in plain IPv4 notation instead of IPv4-sized prefixes (e.g., avoid ::ffff:10.0.0.0/8).

Event History

Sep 15, 2026
CVE Published
via MITRE·06:19 AM
Data Sourced
via MITRE·06:19 AM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are exposed to this issue?

Deployments using proxy-addr versions 1.1.0 through 2.0.7 are exposed if they configure a trusted proxy subnet in IPv4-mapped IPv6 notation with an IPv4-sized prefix, such as ::ffff:10.0.0.0/8. Plain IPv4 notation is not identified as affected.

2

What does an attacker need to exploit it?

An unauthenticated network client only needs to reach the application and send an arbitrary X-Forwarded-For header. The malformed trust subnet causes the socket peer to be trusted, allowing the attacker to control the client address read by the application.

3

How can this be mitigated before upgrading?

Upgrade to proxy-addr 2.0.8 or later when possible. Until then, ensure IPv4-mapped IPv6 trust subnets use a prefix length of at least 97, or express the trusted range in plain IPv4 notation.

4

What application controls can be bypassed?

Any control that relies on the address returned through proxy-addr, including Express req.ip and req.ips, may be affected. This includes IP-based access control, rate limiting, geolocation, and audit logging.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203