Path Traversal in Echo Go
How Path Traversal Manifests in Echo Go
Path Traversal in Echo Go typically arises when user-controlled path components are concatenated directly with a base directory and passed to file operations without validation. Attackers can supply sequences like ../../../etc/passwd or encoded forms to escape the intended directory scope. Echo Go handlers often bind path parameters using echo.Param and then use those values in functions such as os.Open or http.ServeFile, creating opportunities for unauthorized file access.
Concrete attack patterns include directory climbing via repeated ../, null byte injection in older Go behavior (rare on modern Go), and misuse of http.Dir with insufficient sanitization. For example, an endpoint like /files/:filename that serves documents from ./uploads can be abused if the handler does not canonicalize and constrain the resolved path. A vulnerable Echo Go handler might look like this:
c := echo.Context{} // *echo.Context
filename := c.Param("filename")
path := filepath.Join("/var/app/uploads", filename)
c.File(path)An attacker requesting /files/../../../etc/hosts can cause filepath.Join to produce /var/app/uploads/../../../etc/hosts, which may resolve to /etc/hosts depending on how the filesystem cleans the path. Echo Go’s Static middleware can similarly expose traversal if a prefix is not tightly controlled, allowing requests like /static/../../../secret.txt to escape the configured root.
Echo Go-Specific Detection
To identify Path Traversal in Echo Go, focus on handlers that accept path inputs and invoke file operations. Look for direct use of c.Param or c.Query values in functions like os.Stat, os.Open, or http.ServeFile without canonicalization and prefix checks. In many cases, the resolved path is not verified to remain under the intended directory.
Using middleBrick, you can scan an unauthenticated Echo Go endpoint with a URL such as https://api.example.com/files/:filename. middleBrick’s checks include input validation and unsafe consumption tests that can surface signs of insufficient path restrictions, alongside a full OpenAPI/Swagger analysis if a spec is available. For example, if your API exposes an openapi.yaml, middleBrick resolves $ref references and cross-references definitions with runtime behavior, highlighting endpoints where path parameters flow into file-system interactions.
In the CLI, you can run middlebrick scan https://api.example.com to receive a security risk score and findings. The report will include specifics tied to the Echo Go implementation, mapping each issue to relevant categories such as Input Validation and Data Exposure, and providing remediation guidance.
Echo Go-Specific Remediation
Remediation centers on strict path validation and ensuring resolved paths remain within the intended directory. Use filepath.Clean and filepath.Rel to canonicalize paths and confirm they are relative to the base. Prefer http.Dir with http.ServeFile, which performs its own safe resolution, and avoid manually joining paths when serving static content.
Example of a secure Echo Go handler:
import (
"net/http"
"path/filepath"
"github.com/labstack/echo/v4"
)
func safeFileHandler(baseDir string) echo.HandlerFunc {
return func(c echo.Context) error {
filename := c.Param("filename")
// Clean and validate the filename
cleanName := filepath.Clean(filename)
if cleanName != filename || filepath.IsAbs(cleanName) {
return echo.NewHTTPError(http.StatusBadRequest, "invalid path")
}
// Ensure resolved path stays within baseDir
resolved := filepath.Join(baseDir, cleanName)
if !strings.HasPrefix(resolved, filepath.Clean(baseDir)+string(os.PathSeparator)) {
return echo.NewHTTPError(http.StatusForbidden, "path traversal attempt")
}
return c.File(resolved)
}
}For static assets, use Echo Go’s built-in Static with a tightly scoped root:
e := echo.New()
e.Static("/static", "/var/app/public")Additionally, apply allowlists for filenames or extensions where feasible, and log suspicious path patterns for further analysis. These steps reduce the attack surface while preserving functionality in an Echo Go service.
Related CWEs: inputValidation
| CWE ID | Name | Severity |
|---|---|---|
| CWE-20 | Improper Input Validation | HIGH |
| CWE-22 | Path Traversal | HIGH |
| CWE-74 | Injection | CRITICAL |
| CWE-77 | Command Injection | CRITICAL |
| CWE-78 | OS Command Injection | CRITICAL |
| CWE-79 | Cross-site Scripting (XSS) | HIGH |
| CWE-89 | SQL Injection | CRITICAL |
| CWE-90 | LDAP Injection | HIGH |
| CWE-91 | XML Injection | HIGH |
| CWE-94 | Code Injection | CRITICAL |