Files
vuln-osv/data/Go/GHSA-pgvm-wxw2-hrv9.json

1 line
3.9 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"schema_version":"1.9.0","id":"GHSA-pgvm-wxw2-hrv9","published":"2026-02-17T18:53:58Z","modified":"2026-02-27T22:07:05Z","aliases":["CVE-2026-25766","GO-2026-4502"],"summary":"Echo has a Windows path traversal via backslash in middleware.Static default filesystem","details":"### Summary\nOn Windows, Echo’s `middleware.Static` using the default filesystem allows path traversal via backslashes, enabling\nunauthenticated remote file read outside the static root.\n\n### Details \n\n In `middleware/static.go`, the requested path is unescaped and normalized with `path.Clean` (URL semantics).\n `path.Clean` does **not** treat `\\` as a path separator, so `..\\` sequences remain in the cleaned path. The resulting\n path is then passed to `currentFS.Open(...)`. When the filesystem is left at the default (nil), Echo uses `defaultFS`\n which calls `os.Open` (`echo.go:792`). On Windows, `os.Open` treats `\\` as a path separator and resolves `..\\`,\n allowing traversal outside the static root.\n\n Relevant code:\n - `middleware/static.go` (path unescape + `path.Clean` + `currentFS.Open`)\n - `echo.go` `defaultFS.Open` → `os.Open`\n\n This is the same class as CVE-2020-36565 (fixed in v4 by switching to OS-aware cleaning), but in v5 the `path.Clean`\n + defaultFS combination reintroduces the Windows backslash traversal.\n\n\n### PoC\n Windows only.\n\n **Sample code (main.go):**\n ```go\n package main\n\n import (\n \"log\"\n \"net/http\"\n\n \"github.com/labstack/echo/v5\"\n \"github.com/labstack/echo/v5/middleware\"\n )\n\n func main() {\n e := echo.New()\n\n // Important: use middleware.Static with default filesystem (nil)\n e.Use(middleware.Static(\"public\"))\n\n e.GET(\"/healthz\", func(c *echo.Context) error {\n return c.String(http.StatusOK, \"ok\")\n })\n\n addr := \":1323\"\n log.Printf(\"listening on %s\", addr)\n if err := e.Start(addr); err != nil && err != http.ErrServerClosed {\n log.Fatal(err)\n }\n }\n ```\n Static file:\n\n public/index.html\n\n (content can be any HTML)\n\n **Run:**\n go run .\n\n **Verify:**\n\n curl http://localhost:1323/index.html\n curl --path-as-is \"http://localhost:1323/..%5c..%5cWindows%5cSystem32%5cdrivers%5cetc%5chosts\"\n Expected: 404 \n\n **Screenshot:**\n<img width=\"884\" height=\"689\" alt=\"image\" src=\"https://github.com/user-attachments/assets/acb14d70-2a43-47c1-8927-2f3da491a853\" />\n<img width=\"1022\" height=\"162\" alt=\"image\" src=\"https://github.com/user-attachments/assets/f2b92aa2-541e-461d-81a2-8a5907d7a447\" />\n\n\n\n ### Impact\n Path traversal leading to arbitrary file read outside the static root. Any unauthenticated remote user can\n read local files that the Echo process has access to on Windows, if `middleware.Static` is used with the default\n filesystem.","affected":[{"package":{"name":"github.com/labstack/echo/v5","ecosystem":"Go","purl":"pkg:golang/github.com/labstack/echo/v5"},"ranges":[{"type":"SEMVER","events":[{"introduced":"5.0.0"},{"fixed":"5.0.3"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/02/GHSA-pgvm-wxw2-hrv9/GHSA-pgvm-wxw2-hrv9.json"}}],"references":[{"type":"WEB","url":"https://github.com/labstack/echo/security/advisories/GHSA-pgvm-wxw2-hrv9"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-25766"},{"type":"WEB","url":"https://github.com/labstack/echo/pull/2891"},{"type":"WEB","url":"https://github.com/labstack/echo/commit/b1d443086ea27cf51345ec72a71e9b7e9d9ce5f1"},{"type":"PACKAGE","url":"https://github.com/labstack/echo"},{"type":"WEB","url":"https://pkg.go.dev/vuln/GO-2026-4502"}],"database_specific":{"cwe_ids":["CWE-22"],"github_reviewed":true,"github_reviewed_at":"2026-02-17T18:53:58Z","nvd_published_at":"2026-02-19T16:27:15Z","severity":"MODERATE"},"severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N"}]}