Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Echo v5 directly or via header-preserving proxy
-
ExploitSend request with spoofed X-Real-IP (loopback or private address)
-
Executionc.RealIP() returns attacker-controlled address
-
ImpactBypass IP allowlist / evade rate limit / poison audit logs
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V6 - Authentication IP-independent access control
|
| Exploitation Conditions | Exploitable only when the application (1) runs Echo v5 between 5.0.0 and 5.4.0 and (2) explicitly uses the ExtractIPFromRealIPHeader extractor with default trust options for Context.RealIP - the default direct IP extractor (ExtractIPDirect) and Echo v4 are NOT affected. The attacker must be able to reach Echo directly or send requests through an intervening proxy that passes the client-supplied X-Real-IP value through unchanged; a correctly configured reverse proxy that overwrites/strips X-Real-IP neutralizes the attack. Impact materializes only where RealIP feeds a security or accounting decision - IP allowlists, IP-based rate limiting, audit logs, or forwarding headers. Limiting factors: requires the non-default extractor configuration, requires a header-preserving path to Echo, and yields only a spoofed identity (no code execution or data read). Vendor-stated workarounds until upgrading: use ExtractIPDirect, or ensure only trusted proxies can reach Echo and that they replace client-supplied forwarding headers, with trusted proxy ranges configured narrowly. |
| Impact | This is a medium-severity (CVSS 5.3) identity-spoofing regression, not a critical priority. The provided CVSS vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) is internally consistent with the GHSA: network-reachable, no authentication, and a single low integrity impact (a spoofed client identity) with no confidentiality or availability impact. The vuln.today decision label is 'this_month' rather than act_now/emergency, which aligns with the signal set. No EPSS score was supplied and the CVE is not listed in CISA KEV, so there is no evidence of active exploitation - exploitation status is 'no public exploit identified at time of analysis' (the provided references are the vendor fix commit, the v5.4.1 release, and the GHSA advisory - patch artifacts, not proof-of-concept exploit code). The real-world risk is tightly scoped: it only affects applications that both run Echo v5 (5.0.0-5.4.0) AND opt into the non-default ExtractIPFromRealIPHeader extractor; the default direct extractor and all of Echo v4 are unaffected per the vendor. The CVSS AV:N is accurate but should be read alongside the exploitation precondition that an attacker must reach Echo directly or traverse a proxy that passes the client-supplied X-Real-IP through unchanged - a condition the CVSS base metrics do not capture. Net: a legitimate issue to patch on a normal cadence for affected deployments, not a drop-everything emergency. |
| Exploit ScenarioDerived | An application runs Echo v5 configured to derive client IP via ExtractIPFromRealIPHeader and uses c.RealIP() for an IP allowlist or rate-limit bucket. An unauthenticated attacker who can reach Echo directly (or through a proxy that forwards the header) sends a request carrying X-Real-IP: 127.0.0.1, causing RealIP to return the spoofed loopback address and bypass the allowlist or poison audit logs. No public exploit code was identified, though the fix commit's added test cases demonstrate the exact spoofing inputs (127.0.0.1 and 10.240.0.1). |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Identity spoofing in Labstack Echo v5 (5.0.0 through 5.4.0) allows remote attackers to forge the client address returned by Context.RealIP when an application configures the ExtractIPFromRealIPHeader extractor with default trust options: the extractor validates the client-supplied X-Real-IP value against trusted ranges rather than validating the actual network peer, so a loopback or private address in that header is accepted from an untrusted sender. Only deployments that both run Echo v5 between 5.0.0 and 5.4.0 and explicitly use this non-default extractor for IP allowlists, IP-based rate limiting, audit logging or forwarding headers are exposed, and the attacker must reach Echo directly or through a proxy that passes the header through unchanged; the default direct extractor and Echo v4 are unaffected. The consequence is a spoofed client identity rather than code execution or data disclosure, no public exploit code has been identified at time of analysis, and the issue is fixed in v5.4.1.
RemediationAI
Vendor-released patch: Echo v5.4.1 - upgrade every module pinned to go/github.com/labstack/echo/v5 in the range 5.0.0 through 5.4.0 to v5.4.1 (https://github.com/labstack/echo/releases/tag/v5.4.1), which validates the direct peer before accepting X-Real-IP as documented in advisory GHSA-h53f-rm2w-w7rg and implemented in commit 1855061e572ae9dab727c811d8382f266bfbaaeec. If upgrading must be deferred, the vendor-stated workaround is to switch Context.RealIP to ExtractIPDirect, with the trade-off that the application will then see the proxy's address rather than the originating client, which degrades IP allowlists, rate-limit buckets and audit records behind a proxy; alternatively ensure only trusted proxies can reach Echo and that those proxies replace (not append or pass through) client-supplied X-Real-IP, configuring trusted proxy ranges narrowly for the deployment, with the trade-off that any header-preserving path - a direct exposure or a misconfigured load balancer - re-enables the spoofing. Neither workaround requires changes to Echo itself, but both depend on correct deployment configuration rather than code.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Echo is a Go HTTP web framework, and this defect lives in its client-IP resolution layer (ip.go). Go's net/http only exposes the direct connection peer via Request.RemoteAddr; applications behind proxies therefore rely on extractors that derive the real client from forwarding headers. Echo v5's ExtractIPFromRealIPHeader took the value of the X-Real-IP header, parsed it with net.ParseIP, and accepted it if it fell inside the configured trusted ranges, without first confirming that the direct peer (RemoteAddr) was itself a trusted proxy - the root cause class tracked as CWE-348, Use of Less Trusted Source. The upstream fix commit 1855061e572ae9dab727c811d8382f266bfbaaeec restructures extractIP so that directIP is derived from the request and only when checker.trust(peerIP) is true is a syntactically valid X-Real-IP honoured; otherwise the direct peer address is returned, restoring the v4 trust model. Added regression tests in ip_test.go assert that an untrusted external peer (203.0.113.1) spoofing 127.0.0.1 or 10.240.0.1 receives its own address back, while trusted loopback and private-network proxies forwarding legitimate public addresses (203.0.113.199, 198.51.100.22) still have the header honoured. Note that the referenced commit also carries unrelated middleware/body_dump.go changes, so consumers should pin to the tagged v5.4.1 release rather than the bare commit.
Know when Go 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
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Network-reachable and unauthenticated (AV:N/PR:N); the vulnerable extractor is an application config choice, not an attacker privilege; single integrity impact (spoofed identity) with no confidentiality or availability effect.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
Echo is a Go web framework. From 5.0.0 until 5.4.1, Echo v5's ExtractIPFromRealIPHeader validates whether the client-supplied X-Real-IP value belongs to a trusted range instead of validating the direct network peer. A client reaching Echo directly, or through a proxy that preserves the header, can supply a loopback or private address and have Context.RealIP return that spoofed identity. Applications using the extractor for IP allowlists, rate limiting, audit logs, or forwarding headers can consequently trust an attacker-controlled address; the default direct extractor and Echo v4 are unaffected. This issue is fixed in 5.4.1.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
The net/http package in Go through 1.6 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and there
Critical certificate validation bypass in Go crypto/tls during session resumption. If ClientCAs or RootCAs fields are mu
net/url in Go before 1.11.13 and 1.12.x before 1.12.8 mishandles malformed hosts in URLs, leading to an authorization by
Casdoor through 4.4.0 exposes its instance-wide built-in JWT signing private key unmasked through the /api/get-certs and
Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re
Session cross-wiring in SUSE NeuVector before 5.6.1 allows an unauthenticated remote attacker to obtain another user's a
Unauthenticated path traversal in Uber Kraken through 0.1.29 allows remote attackers to read files outside the configure
The "go get" implementation in Go 1.9.4, when the -insecure command-line option is used, does not validate the import pa
Denial of service in Temporal Server allows an authenticated caller holding at least namespace read permission to crash
Account takeover in Klever-Go's KleverUpdateAccountPermission built-in (all versions prior to 1.7.20) allows an attacker
Maliciously crafted on-chain account names processed by Klever-Go prior to 1.7.20 are spliced into Elasticsearch _bulk r
EUVD-2026-112397
NVD
CVE.org
GitHub
Exploit-DB