Common Go Vulnerabilities
Go has become the dominant language for cloud-native infrastructure—Docker, Kubernetes, Terraform, and most cloud tooling is written in Go. Its memory safety and strong standard library prevent many vulnerability classes, but Go applications are far from immune to security issues.
The most prevalent Go vulnerability classes include:
- SQL injection (CWE-89): String concatenation in
database/sqlqueries instead of using parameterized queries withdb.Query()placeholders. - Command injection (CWE-78): Passing user input to
exec.Command()with shell expansion or unsanitized arguments. - Path traversal (CWE-22): File serving with
http.ServeFile()oros.Open()using user-controlled paths withoutfilepath.Clean()validation. - Insecure TLS configuration: Using
InsecureSkipVerify: trueintls.Config, disabling certificate validation in HTTP clients. - Race conditions (CWE-362): Concurrent access to shared state without proper synchronization. Go's goroutine model makes concurrency easy to use but easy to get wrong.
- Unsafe package usage: Direct memory manipulation through the
unsafepackage bypasses Go's type safety and garbage collection.
Go's compile-time checks and garbage collection eliminate buffer overflows and use-after-free bugs, but its HTTP-centric standard library and concurrency model introduce their own attack surface.
How Go Attacks Work
Go-specific attack vectors target the patterns common in API servers, microservices, and DevOps tooling.
SQL Injection in Go
Go's database/sql package supports parameterized queries, but developers still concatenate strings:
// VULNERABLE: String concatenation
query := "SELECT * FROM users WHERE id = " + userID
rows, err := db.Query(query)
// SECURE: Parameterized query
rows, err := db.Query("SELECT * FROM users WHERE id = $1", userID)
Path Traversal in HTTP Handlers
// VULNERABLE: User-controlled file path
func handler(w http.ResponseWriter, r *http.Request) {
filename := r.URL.Query().Get("file")
http.ServeFile(w, r, "/data/" + filename)
// Attacker sends: ?file=../../etc/passwd
}
// SECURE: Clean and validate the path
filename := filepath.Clean(r.URL.Query().Get("file"))
if strings.Contains(filename, "..") {
http.Error(w, "Invalid path", 400)
return
}
Insecure TLS
// VULNERABLE: Disabling certificate verification
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // Enables MITM attacks
},
},
}
These vulnerabilities are especially dangerous in Go because Go services typically run as infrastructure components—API gateways, service meshes, and container orchestrators—where a compromise affects the entire system.
Real-World Go Incidents
Go's dominance in cloud infrastructure means its vulnerabilities have outsized impact:
- Kubernetes API server vulnerabilities: Multiple CVEs in Kubernetes (written in Go) have allowed privilege escalation and container escape. CVE-2018-1002105 allowed unauthenticated users to gain cluster-admin access through a crafted API request.
- Go standard library vulnerabilities: CVE-2023-29406 in
net/httpallowed HTTP request smuggling. CVE-2023-24532 incrypto/ellipticaffected P-256 scalar multiplication. These affect every Go application using the standard library. - Terraform provider injection: Malicious Terraform providers (Go plugins) have been used to exfiltrate cloud credentials during
terraform planexecution, leveraging Go's plugin system. - Docker container escape (CVE-2019-5736): A vulnerability in runc (Go) allowed container escape through a crafted container image, compromising the host system. This affected every container runtime using runc.
The infrastructure-level position of Go applications means a single vulnerability can cascade through container orchestration, service meshes, and CI/CD pipelines, amplifying the blast radius beyond what a typical web application vulnerability would cause.
How CodeSlick Covers Go (26 Checks)
CodeSlick's Go analyzer performs 26 security checks designed for cloud-native Go development:
- Injection detection: SQL injection in
database/sqlqueries, command injection viaexec.Command(), and LDAP injection patterns. - Path traversal: Detects
http.ServeFile(),os.Open(), andioutil.ReadFile()with user-controlled paths lackingfilepath.Clean()validation. - TLS misconfiguration: Flags
InsecureSkipVerify: trueand weak cipher suite configurations intls.Config. - Unsafe package usage: Identifies use of the
unsafepackage that bypasses Go's type and memory safety. - Hardcoded credentials: Detects passwords, API keys, and connection strings in Go source files.
- Cryptographic issues: Flags MD5, SHA-1, DES, and weak random number generation using
math/randinstead ofcrypto/rand. - Dependency scanning: Checks Go modules against known vulnerability databases for insecure transitive dependencies.
All findings include CWE classification, CVSS 3.1 severity scoring, and OWASP Top 10:2025 mapping. CodeSlick also detects AI-generated Go code, catching hallucinated standard library functions and insecure patterns. Scan your Go code at /analyze for free.
Scan your Go code for 26 security checks purpose-built for cloud-native development in under 3 seconds.