- id: go-sec-001 title: "SQL wildcard injection in LIKE clauses" severity: high languages: [go] tags: [security, injection] pattern: 'LIKE\s+\?.*["%].*\+' fix: "Use parameterised LIKE with EscapeLike() helper to sanitise wildcard characters" found_in: [go-store] example_bad: 'db.Query("SELECT * FROM users WHERE name LIKE ?", "%"+input+"%")' example_good: 'db.Query("SELECT * FROM users WHERE name LIKE ?", "%"+store.EscapeLike(input)+"%")' first_seen: "2026-03-09" detection: regex auto_fixable: false - id: go-sec-002 title: "Path traversal via filepath.Join" severity: high languages: [go] tags: [security, path-traversal] pattern: 'filepath\.Join\(.*,\s*\w+\)' exclude_pattern: 'filepath\.Clean|securejoin|ValidatePath' fix: "Validate the path component or use securejoin to prevent directory traversal" found_in: [go-io] example_bad: 'path := filepath.Join(baseDir, userInput)' example_good: 'path, err := securejoin.SecureJoin(baseDir, userInput)' first_seen: "2026-03-09" detection: regex auto_fixable: false - id: go-sec-003 title: "XSS via unescaped HTML in fmt.Sprintf" severity: high languages: [go] tags: [security, xss] pattern: 'fmt\.Sprintf\(.*<.*>.*%s' exclude_pattern: 'html\.EscapeString|template\.HTMLEscapeString' fix: "Use html.EscapeString() on user-controlled values before interpolating into HTML" found_in: [go-html] example_bad: 'out := fmt.Sprintf("
%s
", userInput)' example_good: 'out := fmt.Sprintf("
%s
", html.EscapeString(userInput))' first_seen: "2026-03-09" detection: regex auto_fixable: true - id: go-sec-004 title: "Non-constant-time authentication comparison" severity: critical languages: [go] tags: [security, timing-attack] pattern: '==\s*\w*(token|key|secret|password|hash|digest|hmac|mac|sig)' exclude_pattern: 'subtle\.ConstantTimeCompare|hmac\.Equal' fix: "Use subtle.ConstantTimeCompare() or hmac.Equal() for timing-safe comparison" found_in: [go-crypt] example_bad: 'if token == expectedToken {' example_good: 'if subtle.ConstantTimeCompare([]byte(token), []byte(expectedToken)) == 1 {' first_seen: "2026-03-09" detection: regex auto_fixable: false - id: go-sec-005 title: "Log injection via string concatenation" severity: medium languages: [go] tags: [security, injection] pattern: 'log\.\w+\(.*\+.*\)' exclude_pattern: 'strings\.ReplaceAll.*\\n|slog\.' fix: "Use structured logging (slog) with named fields instead of string concatenation" found_in: [go-log] example_bad: 'log.Info("user logged in: " + username)' example_good: 'slog.Info("user logged in", "username", username)' first_seen: "2026-03-09" detection: regex auto_fixable: true - id: go-sec-006 title: "Secrets leaked in log output" severity: critical languages: [go] tags: [security, secrets] pattern: 'log\.\w+\(.*(?i)(password|secret|token|apikey|private.?key|credential)' exclude_pattern: 'REDACTED|\*\*\*|redact' fix: "Redact sensitive values before logging, or use a structured logger with field redaction" found_in: [go-config] example_bad: 'log.Debug("auth token: " + token)' example_good: 'log.Debug("auth token: [REDACTED]")' first_seen: "2026-03-09" detection: regex auto_fixable: false