Echo has a Static Middleware Double-Unescape Path Traversal
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| labstack | echo | — | — |
| go | github.com/labstack/echo/v5 |
5.2.0 未満 |
5.2.0 |
| go | github.com/labstack/echo/v4 |
4.15.3 未満 |
4.15.3 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
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:
// 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
// AFTER (fixed)
pathUnescape := false
The commit's test TestStatic_percentEncodedTraversalIsBlocked 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 r…
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory