GHSA-xwq5-6cqp-vx96: Path Traversal
Summary
Commit a9ede66a (PR #3006, issue #2599) silently fixed a path traversal vulnerability in the Echo web framework's static file middleware.
Vulnerability
The static middleware double-unescaped URL paths. Go's net/http already decodes Request.URL.Path, but middleware/static.go unconditionally called url.PathUnescape() again:
go // BEFORE (vulnerable) pathUnescape := true
This reassembled path traversal sequences from double-encoded input. An attacker could send GET /%2e%2e%2fsecret.txt or /..%252fsecret.txt and the double-unescape would produce ../secret.txt.
Fix go // AFTER (fixed) pathUnescape := false
The commit's test TestStaticpercentEncodedTraversalIsBlocked explicitly verifies traversal vectors are blocked.
Impact Arbitrary file read from server filesystem via percent-encoded path traversal.
References - Fix: https://github.com/labstack/echo/commit/a9ede66a - Issue: https://github.com/labstack/echo/issues/2599 - PR: https://github.com/labstack/echo/pull/3006
Patches
Fixed in github.com/labstack/echo/v5 v5.2.0 and github.com/labstack/echo/v4 v4.15.3, where the Static middleware stopped unescaping an already decoded path. Maintainer analysis: reading files outside the configured root could not be reproduced; the confirmed impact was that a double-encoded slash (%252F) could reach a file under a guarded route when the Static middleware is registered globally. Upgrade to v5.4.0 / v4.16.0 or later, which also includes related fixes for encoded and dot-segment paths.
Workarounds
Keep files that need protection outside the Static middleware's root directory.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/labstack/echo/v4to a version that resolves this vulnerability.Fixed in 4.15.3 - Upgrade
Upgrade
go/github.com/labstack/echo/v5to a version that resolves this vulnerability.Fixed in 5.2.0 - Upgrade
Upgrade
github.com/labstack/echo/v5to a version that resolves this vulnerability.Fixed in 5.4.0 - Upgrade
Upgrade
github.com/labstack/echo/v4to a version that resolves this vulnerability.Fixed in 4.16.0 - Compensating control
Keep files that need protection outside the Echo Static middleware's configured root directory.
Event History
Frequently Asked Questions
Which deployments are exposed?
Deployments using Echo v4 or v5 Static middleware are affected if they run versions earlier than v4.15.3 or v5.2.0. The issue can expose files readable by the server process through the static-file path.
Does exploitation require authentication or user interaction?
No. The reported vector is a network GET request and is rated as requiring no privileges or user interaction, although it has high attack complexity.
How can I determine whether the fix is present?
Echo v4.15.3 and v5.2.0 contain the fix, which changes Static middleware so it no longer unescapes an already decoded request path. The added TestStatic_percentEncodedTraversalIsBlocked test covers percent-encoded traversal vectors.