---
title: "GHSA-jqcg-44mw-7w3h: proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet"
description: "Critical severity. proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet. Affects proxy-addr; fixed in 2.0.8."
url: https://inlinr.com/advisories/GHSA-jqcg-44mw-7w3h
lang: en
---

[Packages](https://inlinr.com/packages) / [proxy-addr](https://inlinr.com/packages/proxy-addr) / [Security](https://inlinr.com/packages/proxy-addr/security)

Critical Vulnerability GHSA-jqcg-44mw-7w3h CVE-2026-90711 Published 5 Oct 2026

# proxy-addr vulnerable to IP spoofing via IPv4-mapped IPv6 trust subnet

Your version 

Affected releases · [proxy-addr](https://inlinr.com/packages/proxy-addr)

- 2.x 2.0.0 – 2.0.7 Fixed in 2.0.8
- 1.x 1.1.0 – 1.1.5 No fix on this line yet

On 2.x, the newest line:

```
npm install proxy-addr@2.0.8
```

Every release on a timeline

2.x 

1. Affected

2.0.0 – 2.0.7  
8 releases
2. Fixed

2.0.8  
1 release, latest

1.x 

1. Not affected

1.0.0 – 1.0.10  
11 releases
2. Affected

1.1.0 – 1.1.5  
6 releases

28 stable releases of proxy-addr, oldest to newest, one row per major.

## What happens

Impact

`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.

Patches

Upgrade to `proxy-addr` 2.0.8\. An IPv4 address now matches an IPv6 trust subnet only when that subnet is a genuine IPv4-mapped subnet whose prefix covers the mapped marker.

Workarounds

Write IPv4 trust subnets in plain IPv4 notation (for example `10.0.0.0/8`). If IPv4-mapped IPv6 notation is required, use the full form so the prefix covers the mapped marker (for example `::ffff:10.0.0.0/104` for the `10.0.0.0/8` block).

## How it is exploited

Exploitable over the network, with no account and no action from a user.

- **Confidentiality**: high
- **Integrity**: high
- **Availability**: none

CVSS:3.1/​AV:N/​AC:L/​PR:N/​UI:N/​S:U/​C:H/​I:H/​A:N

## References

- [Reference](https://github.com/jshttp/proxy-addr/security/advisories/GHSA-jqcg-44mw-7w3h "https://github.com/jshttp/proxy-addr/security/advisories/GHSA-jqcg-44mw-7w3h")  
github.com/jshttp/proxy-addr/security/advisorie…
- [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-90711 "https://nvd.nist.gov/vuln/detail/CVE-2026-90711")  
nvd.nist.gov/vuln/detail/CVE-2026-90711
- [Fix commit](https://github.com/jshttp/proxy-addr/commit/780911d84d18e2c5fa008ed0c0d387631ec11965 "https://github.com/jshttp/proxy-addr/commit/780911d84d18e2c5fa008ed0c0d387631ec11965")  
780911d
- [Reference](https://cna.openjsf.org/security-advisories.html "https://cna.openjsf.org/security-advisories.html")  
cna.openjsf.org/security-advisories.html
- [Package](https://github.com/jshttp/proxy-addr "https://github.com/jshttp/proxy-addr")  
github.com/jshttp/proxy-addr
- [Reference](https://github.com/jshttp/proxy-addr/releases/tag/v2.0.8 "https://github.com/jshttp/proxy-addr/releases/tag/v2.0.8")  
github.com/jshttp/proxy-addr/releases/tag/v2.0.8
