Answer in brief
CVE-2026-55677 records a High severity (CVSS 7.5) vulnerability in Encoded slash (%2F) bypasses route-level protection and exposes static files in github.com/labstack/echo/v4 and github.com/labstack/echo/v5. The current sources do not mark it as known exploited. The current feed maps github.com/labstack/echo (go), github.com/labstack/echo (go), github.com/labstack/echo/v4 (go), github.com/labstack/echo/v4 (go) and additional mapped packages. Check affected ranges and fixed versions before updating.
Analysis pending evidence review
HOL Guard separates source facts from reviewed analysis. See the methodology.
CVSS is 7.5. The current sources do not mark it as known exploited. Treat this as a source-backed prioritization signal, not a statement about your environment.
Analysis status
Analysis pending evidence review
Factual feed record only; HOL analysis is not approved for indexing. Read the methodology.
The current feed maps github.com/labstack/echo (go), github.com/labstack/echo (go), github.com/labstack/echo/v4 (go), github.com/labstack/echo/v4 (go) and additional mapped packages. Check affected ranges and fixed versions before updating.
| Package | Affected range | Fixed version |
|---|---|---|
| github.com/labstack/echogo | <=3.3.10 | Not reported |
| github.com/labstack/echogo | >=0 | Not reported |
| github.com/labstack/echo/v4go | <4.15.3 | 4.15.3 |
| github.com/labstack/echo/v4go | >=0 <4.15.3 | 4.15.3 |
| github.com/labstack/echo/v5go | <5.2.0 | 5.2.0 |
| github.com/labstack/echo/v5go | >=0 <5.2.0 | 5.2.0 |
Published upstream
Jun 26, 2026
Evidence: source:ghsa:source_dates:source-dates:recordSource modified
Aug 26, 2026
Evidence: source:ghsa:source_dates:source-dates:recordFirst seen by HOL
Jun 26, 2026
### Summary Echo's router and static file handler disagree on URL path decoding. The router matches routes using the raw encoded path (preserving `%2F` as-is), while `StaticDirectoryHandler` unescapes `%2F` to `/` before resolving filesystem paths. This allows an attacker to bypass route-level access controls and read static files without authorization. ### Details **Root cause 1 — `router.go` lines 798-802:** The router uses `req.URL.RawPath` for route matching when `useEscapedPathForRouting` is false (the default). This means `/admin%2Fsecret.txt` is treated as a single path segment and does NOT match the `/admin/*` route pattern. ```go if !r.useEscapedPathForRouting && req.URL.RawPath != "" { path = req.URL.RawPath } ``` **Root cause 2 — `echo.go` lines 559-568:** `StaticDirectoryHandler` calls `url.PathUnescape()` on the path parameter before opening files. This converts `%2F` back to `/`, resolving `admin/secret.txt` on disk. ```go if !disablePathUnescaping { tmpPath, err := url.PathUnescape(p) p = tmpPath } name := filepath.ToSlash(filepath.Clean(strings.TrimPrefix(p, "/"))) ``` ### PoC (Screenshot) Sample: <img width="1291" height="970" alt="image" src="https://github.com/user-attachments/assets/0bc58059-3e6d-4678-ab25-a5c79b006738" /> 403: <img width="526" height="194" alt="image" src="https://github.com/user-attachments/assets/2f55ffdd-87b2-4a1b-8a13-130ebad0f257" /> Bypass with encoded slash: <img width="592" height="203" alt="image" src="https://github.com/user-attachments/assets/1191cd39-ae8f-4d7e-8fb1-cb9cf31f484f" /> ### Impact Unauthorized static file disclosure. Applications that protect route prefixes with authentication middleware while also serving static files from a broader root are vulnerable. An attacker only needs to encode the slash (`/` → `%2F`) in the URL to bypass all route-level protection. Common affected pattern: ```go adminGroup := e.Group("/admin", authMiddleware) e.StaticFS("/", os.DirFS("public")) ```
Quoted source text, attributed separately from HOL analysis.