Go source review
When it applies
Reviewing Go source (an API, a CLI, a microservice). Go is memory-safe, so the bugs are logic and injection: command exec, the wrong template package, string-built SQL, and path/SSRF handling.
Why it works
Go's stdlib gives a safe and an unsafe option side by side (html/template vs text/template;
parameterised db.Query(?, x) vs fmt.Sprintf into a query). Reviews find code that reached for the
unsafe one, or that shells out with sh -c.
Sinks & patterns (grep, then trace to user input)
- Command exec:
exec.Command("sh","-c", …)/exec.CommandContextwith concatenated input (safe form passes args separately — flag thesh -cvariant). - XSS:
text/templateused to render HTML (no auto-escaping); manualw.Write([]byte(userHTML)). - SQLi:
fmt.Sprintf/string concat intodb.Query/db.Execinstead of placeholders. - Path traversal:
filepath.Join(base, userInput)withoutfilepath.Clean+ prefix check;http.ServeFilewith user paths. - SSRF:
http.Get/http.NewRequeston user-supplied URLs; missing host allowlist. - Other:
text/template/html/templateinjection from user-controlled template strings, unvalidatedUnmarshalinto structs (mass assignment),unsafepointer use, weakmath/randfor tokens (usecrypto/rand).
Framework specifics
- gin/echo/fiber:
c.Param/c.Query/c.Bindsources; check bound structs for mass assignment and missing auth middleware on state-changing routes. - Templates: confirm
html/template(nottext/template) for anything rendered to a browser.
Method
- Run
gosecandgovulncheckfor a first pass; treat as leads, not verdicts. rg 'exec.Command|text/template|Sprintf.*Query|filepath.Join'and trace to request input.- Check auth/authorization middleware coverage on each route group.
- Confirm exploitable classes with the matching runtime skill.
Gotchas
exec.Command(name, arg1, arg2)(no shell) is safe — only thesh -c "...user..."form injects.html/templatecontext-escapes; the bug is usually usingtext/templateby mistake.- Errors ignored with
_can hide security-relevant failures (e.g. an auth check's error).
References
Go security best practices; gosec rule set; OWASP Go SCP; govulncheck (known-vuln deps).