Skip to main content

Echo CVE-2026-118655

| EUVDEUVD-2026-112461 MEDIUM
Double Decoding of the Same Data (CWE-174)
2026-10-28 security-advisories@github.com GHSA-xwq5-6cqp-vx96
5.9
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Send double-encoded request path (/..%252fsecret.txt)
  2. Exploit
    Static middleware re-decodes already-decoded URL.Path
  3. Execution
    Separator reconstructed before filesystem resolution
  4. Impact
    Reach guarded file and read contents

Vulnerability Assessment

Weakness
CWE
Exploitation Conditions

Exploitable only when Echo's middleware.Static is registered GLOBALLY and a file meant to be protected sits under that Static root behind a separate guarded route; the attacker then supplies a double-encoded separator (e.g. %252F or %2e%2e%2f) that the middleware decodes a second time, reconstructing the path before filesystem resolution. Limiting factors: no authentication is required (PR:N per the vector) and no user interaction (UI:N), but the specific global-registration-plus-guarded-route deployment and the double-encoding requirement give it high attack complexity (AC:H); per the maintainer, reading files outside the configured root could not be reproduced, so impact is bounded to in-root files reachable past the route guard. Upgrading to the fixed versions is the stated remedy, with the only noted workaround being to keep protected files outside the Static middleware's root directory.

Impact

Signals point to a real but moderate, config-dependent issue rather than a drop-everything emergency. The CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N, base 5.9, C:H/I:N/A:N) describes a network-reachable, unauthenticated confidentiality-only flaw whose exploitation is gated by high attack complexity. No EPSS score and no KEV status were supplied, and the vuln.today decision label is 'this_month' (not act_now/emergency), so the aggregate urgency is patch-this-cycle, not immediate. There is no input flag of a confirmed public exploit; however, the fix commit (a9ede66a) ships regression tests that spell out the exact triggering vectors (/..%252fsecret.txt and /%2e%2e%2fsecret.txt), so the mechanism is fully public even if no packaged exploit is listed. A key conflict must be flagged: the GHSA 'Impact' line claims 'arbitrary file read from server filesystem,' but the same advisory's maintainer analysis states that reading files OUTSIDE the configured root could NOT be reproduced, and the confirmed impact was only that a double-encoded slash (%252F) could reach a file UNDER a guarded route when the Static middleware is registered globally - i.e. a route-guard/access-control bypass to in-tree static content, not unbounded filesystem disclosure. This materially lowers real-world impact versus the headline path-traversal framing, and the C:H in the supplied vector is arguably optimistic given the maintainer's narrower reproduction. Net: a genuine access-control bypass worth remediating on a normal patch cadence, with the true blast radius depending on whether sensitive files sit under a globally-registered Static root behind a route guard.

Exploit ScenarioDerived

An app registers Echo's middleware.Static globally and relies on a separate route guard (e.g. auth on a group) to protect certain static files. A remote attacker requests a double-encoded path such as GET /..%252fsecret.txt or /%2e%2e%2fsecret.txt; the middleware decodes the already-decoded path a second time, reconstructing the separator before filesystem resolution and reaching a file the guarded route was meant to shield. No packaged exploit is listed in the inputs, but the fix commit's regression tests publicly document the precise vectors, and the high attack complexity reflects the specific global-registration-plus-guarded-route layout required.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – Oct 28, 2026

Path traversal in the Echo Go web framework's middleware.Static (all versions prior to 4.15.3 on the v4 branch and prior to 5.2.0 on the v5 branch) allows unauthenticated remote attackers to have Go's already-decoded Request.URL.Path unescaped a second time, so double-encoded separators such as %252F or %2e%2e%2f are reconstructed into traversal sequences before filesystem resolution. Successful exploitation is configuration-dependent: the Static middleware must be registered globally and a file intended to be protected must sit under that Static root behind a separate guarded route, which is why the issue is rated high complexity with confidentiality-only impact; the maintainer could not reproduce reads outside the configured root, bounding impact to in-root files reachable past the route guard. Fixes are released in v4.15.3 and v5.2.0, and no public exploit code or active exploitation has been identified at the time of analysis.

RemediationAI

Vendor-released patch: upgrade github.com/labstack/echo/v4 to 4.15.3 and github.com/labstack/echo/v5 to 5.2.0, the versions in which middleware/static.go stops unescaping an already-decoded URL.Path; the advisory further recommends v4.16.0 / v5.4.0 or later, which bundle additional fixes for encoded and dot-segment paths. Because Go modules are vendored or pinned, verify the resolved module version in go.mod/go.sum and in any container image rebuilds, then redeploy. The advisory's stated workaround, for teams that cannot upgrade immediately, is to keep files that need protection outside the Static middleware's root directory, so no traversal or double-decoded path can resolve to them; additionally, avoid registering Static globally where a route-level guard is expected to protect co-located files, since global registration is the condition that makes the guarded route reachable. Note that neither workaround removes the underlying double-unescape, and the vendor treats upgrading as the complete fix; relevant advisories are https://github.com/labstack/echo/security/advisories/GHSA-xwq5-6cqp-vx96, https://github.com/labstack/echo/pull/3006, https://github.com/labstack/echo/issues/2599 and the release pages at https://github.com/labstack/echo/releases/tag/v4.15.3 and https://github.com/labstack/echo/releases/tag/v5.2.0.

Affected VersionsENISA

Echo 5.0.0, < 5.2.0
Echo < 4.15.3

Affected Packages

go github.com/labstack/echo/v4 fix: 4.15.3
go github.com/labstack/echo/v5 fix: 5.2.0
euvd echo fix: 4.15.3, 5.2.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 3 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 its static file serving is implemented in middleware/static.go through StaticConfig.ToMiddleware(). Go's net/http package already percent-decodes http.Request.URL.Path before a handler sees it, but the vulnerable code unconditionally set pathUnescape := true and called url.PathUnescape() a second time on the already-decoded value. This is a classic CWE-174 double-decoding flaw (the GitHub advisory also frames it as CWE-22 path traversal): an attacker-supplied %252F becomes %2F after the first decode and / after the second, and %2e%2e%2f likewise collapses back into ../, so traversal sequences are re-assembled at the point where the middleware resolves the path against the configured Root/Filesystem. The fix sets pathUnescape := false, with the code comment noting that only the wildcard param from a group route may still be escaped. The commit (a9ede66) also added regression tests: TestStatic_servesFileWithPercentInName confirms files with literal percent signs (e.g. /100%25.txt, /foo%2520bar.txt) are served correctly, and TestStatic_percentEncodedTraversalIsBlocked confirms /..%2fsecret.txt, /..%252fsecret.txt and /%2e%2e%2fsecret.txt do not escape the root or leak files above it. Affected Go modules are go/github.com/labstack/echo/v4 and go/github.com/labstack/echo/v5; any application embedding those module versions and enabling the Static middleware inherits the behavior.

Know when the next one hits your stack

  • 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 (github) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 3.7 LOW

Network and unauthenticated (PR:N) but AC:H for the global-Static-plus-guarded-route and double-encoding prerequisites; C:L (not H) because the maintainer confirmed only guarded in-root files, not arbitrary filesystem read; no integrity or availability impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

1
Patch available
Oct 28, 2026 - 21:19 EUVD

DescriptionCVE.org

Echo is a Go web framework. Prior to 4.15.3 and 5.2.0, middleware.Static can decode an already decoded Request.URL.Path a second time. Double-encoded separators can consequently be reconstructed before filesystem resolution. This can reach a file under a guarded route when the static middleware is registered globally. This issue is fixed in 4.15.3 and 5.2.0.

Threat Intelligence Overview

Prevalence
Medium
popular Go web framework, but impact needs global Static middleware config
Threat Intel
1
1 source
Data Quality
3 sources
Confidence: Low

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 MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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