Skip to main content

proxy-addr CVE-2026-90711

| EUVDEUVD-2026-78300 CRITICAL
Authentication Bypass by Spoofing (CWE-290)
2026-09-15 openjs GHSA-jqcg-44mw-7w3h
9.1
CVSS 3.1 · Vendor: openjs
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify Express/proxy-addr app trusting mapped IPv6 subnet
  2. Delivery
    Craft HTTP request with spoofed X-Forwarded-For
  3. Exploit
    proxy-addr trusts socket peer at hop 0
  4. Execution
    App reads forged req.ip
  5. Impact
    Bypass IP ACL / rate limit / audit

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Anti-spoofing controls
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires the target application to use proxy-addr 1.1.0-2.0.7 with a trusted-proxy subnet expressed in IPv4-mapped IPv6 notation using an IPv4-sized prefix (e.g. ::ffff:10.0.0.0/8 rather than /104) - this specific, non-default misconfiguration is the exact enabling condition; correctly written subnets or plain IPv4 notation are NOT affected. When present, no further conditions apply: exploitation is remote, unauthenticated (PR:N), needs no user interaction, and works against any client because the socket peer is trusted at hop 0 and can set an arbitrary X-Forwarded-For header. The primary limiter is thus the presence of the flawed trust-subnet configuration, not attacker capability.

Impact

The published CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N, 9.1) treats this as a trivially exploitable remote unauthenticated flaw, which is accurate ONLY once the vulnerable configuration exists. The decisive limiting factor - not reflected in AC:L - is that exploitation requires the operator to have written a trust subnet in IPv4-mapped IPv6 notation with an IPv4-sized prefix; default and correctly-configured deployments are unaffected. I therefore assess attack complexity as high (AC:H) because a specific, non-default misconfiguration must be present. No EPSS score was provided, there is no POC referenced, and it is not KEV-listed, so there is no evidence of active or automated exploitation; the priority is driven by proxy-addr's enormous deployment footprint rather than by observed attacks. Where the misconfiguration does exist, real impact is severe and reliably reachable: complete bypass of IP-based access control, rate limiting, geofencing, and trustworthy audit logging.

Exploit ScenarioDerived

An Express app behind a proxy uses 'trust proxy' set to ::ffff:10.0.0.0/8 to trust its internal network; because proxy-addr treats this as trusting all IPv4, the attacker's own connection is trusted at hop 0. The attacker sends a normal HTTP request with a spoofed header such as 'X-Forwarded-For: 10.0.0.5' (or an allowlisted admin IP), and the application reads that forged value as req.ip, bypassing IP allowlists and rate limits and poisoning audit logs. No authentication or user interaction is needed once the misconfiguration is present; no public exploit is currently identified, so the attack would be hand-crafted.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 PoC candidate (unverified) Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 15, 2026

Trust-boundary spoofing in the proxy-addr Node.js module (versions 1.1.0 through 2.0.7), the library that backs Express req.ip and req.ips, lets unauthenticated clients forge their apparent source address. When an operator declares a trusted-proxy subnet in IPv4-mapped IPv6 notation with an IPv4-sized prefix (e.g. ::ffff:10.0.0.0/8 rather than the correct /104), proxy-addr silently accepts it but trusts every IPv4 address on the internet, so the direct socket peer becomes trusted at hop 0 and any client can set an arbitrary X-Forwarded-For header. This is a fail-open regression introduced in 1.1.0, fixed in 2.0.8; no public exploit identified at time of analysis, and it is not in CISA KEV.

RemediationAI

Vendor-released patch: 2.0.8 - upgrade proxy-addr to 2.0.8 or later (including via updating Express and running npm/yarn dependency resolution so the transitive copy is bumped), per GHSA-jqcg-44mw-7w3h. If you cannot upgrade immediately, correct the configuration: any IPv4-mapped IPv6 trust subnet must use a prefix length of at least 97 (use /104 for a /8, /120 for a /24, and so on), or express the range in plain IPv4 notation (e.g. 10.0.0.0/8) instead of ::ffff:10.0.0.0. The trade-off of the workaround is that it depends on auditing every place trust proxy / trusted subnets are set and getting the prefix math right by hand, whereas the upgrade fixes the parsing centrally; after either change, re-verify that req.ip resolves to the proxy-forwarded address only for genuinely trusted hops. Advisory URLs: https://github.com/jshttp/proxy-addr/security/advisories/GHSA-jqcg-44mw-7w3h and https://cna.openjsf.org/security-advisories.html.

Affected VersionsENISA

proxy-addr 1.1.0 <2.0.8

Affected Packages

npm proxy-addr fix: 2.0.8

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

proxy-addr resolves the real client IP for applications sitting behind reverse proxies by walking the X-Forwarded-For chain and honoring only addresses that fall within an operator-configured 'trust' set. The bug is in how it interprets CIDR prefixes for IPv4-mapped IPv6 ranges (the ::ffff:0:0/96 space). An IPv4 address embedded in IPv6 occupies the last 32 bits, so a /8 IPv4 block must be written as /104 in mapped notation (96 + 8). Supplying an IPv4-scale prefix like /8 against a 128-bit address instead masks almost the entire address to zero, collapsing the range to effectively 'all mapped IPv4'. The root cause maps to CWE-290 (Authentication Bypass by Spoofing): the trust decision that gates identity is made on attacker-controllable input because the configured boundary is far wider than intended. CPE cpe:2.3:a:proxy-addr:proxy-addr covers the standalone npm package; because it is a core Express dependency, the blast radius extends to any Express app that both uses 'trust proxy' and configures it with this notation.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (openjs) PRIMARY 9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
vuln.today AI 7.4 HIGH

Remote unauthenticated once triggered (AV:N/PR:N/UI:N), but AC:H because it manifests only under a specific IPv4-mapped IPv6 trust-subnet misconfiguration; spoofed identity yields high C/I, no availability impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
SUSE CRITICAL
Red Hat 7.5 HIGH

Primary rating from Vendor (openjs).

CVSS VectorVendor: openjs

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Sep 15, 2026 - 08:01 EUVD
CVE Published
Sep 15, 2026 - 06:19 cve.org
CRITICAL 9.1

DescriptionCVE.org

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.

Technical POC Analysis

Primary weakness: CWE-290 Authentication Bypass by Spoofing.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 PoC candidate from github (unverified)

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

Express.js deployments using the proxy-addr module (versions 1.1.0-2.0.7) are vulnerable to IP address spoofing when IPv6 trust subnets are misconfigured, potentially bypassing firewall rules, rate limiting, and access controls. This exposes organizations to unauthorized access and detection evasion if the vulnerable configuration exists. Immediate action is required to audit and patch affected systems.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Ubiquitous
core Express dependency backing req.ip in most Node.js web apps
Threat Intel
1
1 source
Social Media
4
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

66
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

Vendor StatusVendor

SUSE

Severity: Critical
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 12 Not-Affected
SUSE Linux Enterprise Micro 5.3 Affected
SUSE Linux Enterprise Micro 5.4 Affected
SUSE Linux Enterprise Micro 5.5 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy