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,252 @@
1
+ "use strict";
2
+ /**
3
+ * Go SSRF (Server-Side Request Forgery) Detection
4
+ * OWASP A10:2025 - Server-Side Request Forgery (SSRF)
5
+ *
6
+ * Detects SSRF vulnerabilities where user-controlled input is used in
7
+ * HTTP requests, file operations, or other server-side requests.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.checkSSRF = checkSSRF;
11
+ const createVulnerability_1 = require("../utils/createVulnerability");
12
+ /**
13
+ * Checks for SSRF vulnerabilities
14
+ *
15
+ * Covers:
16
+ * - Check #1: User-controlled URLs in HTTP requests (HIGH)
17
+ *
18
+ * @param lines - Array of code lines
19
+ * @returns Array of security vulnerabilities found
20
+ */
21
+ function checkSSRF(lines) {
22
+ const vulnerabilities = [];
23
+ let inMultiLineComment = false;
24
+ // Track user input variables from HTTP requests
25
+ const userInputVars = new Set();
26
+ const taintedURLVars = new Set(); // Variables assigned with concatenated user input
27
+ // First pass: Identify user input sources
28
+ lines.forEach((line, index) => {
29
+ const trimmed = line.trim();
30
+ // HTTP request parameters (query, form, headers)
31
+ const paramMatch = trimmed.match(/(\w+)\s*(?::=|=)\s*(?:r\.(?:URL\.Query\(\)\.Get|FormValue|PostFormValue|Header\.Get)|chi\.URLParam|mux\.Vars|c\.(?:Query|Param|GetHeader))\s*\(/i);
32
+ if (paramMatch) {
33
+ userInputVars.add(paramMatch[1]);
34
+ }
35
+ // HTTP request body
36
+ const bodyMatch = trimmed.match(/(\w+)\s*(?::=|=)\s*(?:r\.Body|req\.Body|request\.Body)/i);
37
+ if (bodyMatch) {
38
+ userInputVars.add(bodyMatch[1]);
39
+ }
40
+ // JSON unmarshaling from request
41
+ const jsonMatch = trimmed.match(/json\.(?:Unmarshal|NewDecoder)\s*\([^)]*r\.Body/i);
42
+ if (jsonMatch) {
43
+ // Try to find the target variable
44
+ const varMatch = trimmed.match(/&(\w+)\s*\)/i);
45
+ if (varMatch) {
46
+ userInputVars.add(varMatch[1]);
47
+ }
48
+ }
49
+ // Track URL variables created by concatenating user input
50
+ // Example: url := "http://api.internal.com/" + endpoint
51
+ const urlConcatMatch = trimmed.match(/(\w+)\s*(?::=|=)\s*"[^"]*"\s*\+\s*(\w+)/i);
52
+ if (urlConcatMatch) {
53
+ const urlVar = urlConcatMatch[1];
54
+ const concatVar = urlConcatMatch[2];
55
+ if (userInputVars.has(concatVar)) {
56
+ taintedURLVars.add(urlVar);
57
+ userInputVars.add(urlVar); // Also track as direct user input
58
+ }
59
+ }
60
+ // Track variables created from user input via url.Parse
61
+ // Example: parsedURL, err := url.Parse(urlStr)
62
+ const urlParseMatch = trimmed.match(/(\w+)\s*,\s*\w+\s*:=\s*url\.Parse\s*\(\s*(\w+)/i);
63
+ if (urlParseMatch) {
64
+ const parsedVar = urlParseMatch[1];
65
+ const sourceVar = urlParseMatch[2];
66
+ if (userInputVars.has(sourceVar)) {
67
+ userInputVars.add(parsedVar); // Track parsedURL as user input
68
+ // Also track methods called on it (parsedURL.String())
69
+ userInputVars.add(`${parsedVar}.String()`);
70
+ }
71
+ }
72
+ });
73
+ // Second pass: Check for SSRF vulnerabilities
74
+ lines.forEach((line, index) => {
75
+ const lineNumber = index + 1;
76
+ const trimmed = line.trim();
77
+ // Track multi-line comments (/* ... */)
78
+ if (trimmed.includes('/*')) {
79
+ inMultiLineComment = true;
80
+ }
81
+ if (trimmed.includes('*/')) {
82
+ inMultiLineComment = false;
83
+ return;
84
+ }
85
+ // Skip comments and empty lines
86
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//')) {
87
+ return;
88
+ }
89
+ // =============================================================================
90
+ // Check #1: User-Controlled URLs in HTTP Requests
91
+ // =============================================================================
92
+ // CVSS 8.0 - HIGH
93
+ // Detects HTTP requests where URLs are controlled by user input
94
+ // Detect HTTP request methods
95
+ const hasHTTPRequest = /(?:http|https)\.(?:Get|Post|Head|Put|Delete|NewRequest)\s*\(/i.test(trimmed);
96
+ if (hasHTTPRequest) {
97
+ // Check if any tracked user input is used in the URL
98
+ let usesUserInput = false;
99
+ let userInputVar = '';
100
+ for (const userVar of userInputVars) {
101
+ // Escape special regex characters in variable names
102
+ const escapedVar = userVar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
103
+ if (new RegExp(`\\b${escapedVar}`, 'i').test(trimmed)) {
104
+ usesUserInput = true;
105
+ userInputVar = userVar;
106
+ break;
107
+ }
108
+ }
109
+ // Check for tainted URL variables (created with concatenation)
110
+ for (const urlVar of taintedURLVars) {
111
+ if (new RegExp(`\\b${urlVar}\\b`, 'i').test(trimmed)) {
112
+ usesUserInput = true;
113
+ userInputVar = urlVar;
114
+ break;
115
+ }
116
+ }
117
+ // Also check for direct concatenation with request parameters
118
+ if (/\+\s*(?:r\.URL\.Query|r\.FormValue|r\.PostFormValue|chi\.URLParam|mux\.Vars|c\.Query|c\.Param)/i.test(trimmed)) {
119
+ usesUserInput = true;
120
+ userInputVar = 'request parameter';
121
+ }
122
+ // Check for URL string concatenation
123
+ if (/http\.Get\s*\([^)]*\+|http\.Post\s*\([^)]*\+|NewRequest\s*\([^)]*\+/i.test(trimmed)) {
124
+ usesUserInput = true;
125
+ userInputVar = 'concatenated value';
126
+ }
127
+ if (usesUserInput) {
128
+ // Look for URL validation/whitelisting in surrounding ±10 lines
129
+ let hasValidation = false;
130
+ let hasURLParsing = false;
131
+ let hasDomainCheck = false;
132
+ const startLine = Math.max(0, index - 15);
133
+ const endLine = Math.min(lines.length, index + 15);
134
+ for (let i = startLine; i < endLine; i++) {
135
+ const contextLine = lines[i].trim();
136
+ // Check for URL parsing
137
+ if (/url\.Parse/i.test(contextLine)) {
138
+ hasURLParsing = true;
139
+ }
140
+ // Check for domain validation (requires explicit domain checking)
141
+ if (/\.Host\s*[!=]=|\.Hostname\s*[!=]=|allowed.*domains|trusted.*hosts|allowlist|whitelist/i.test(contextLine)) {
142
+ hasDomainCheck = true;
143
+ }
144
+ // Check for immediate validation functions
145
+ if (/isAllowed|validate.*url|check.*domain/i.test(contextLine)) {
146
+ hasValidation = true;
147
+ break;
148
+ }
149
+ }
150
+ // Require both URL parsing AND domain checking for proper validation
151
+ if ((hasURLParsing && hasDomainCheck) || hasValidation) {
152
+ hasValidation = true;
153
+ }
154
+ else {
155
+ hasValidation = false;
156
+ }
157
+ if (!hasValidation) {
158
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
159
+ category: 'go-ssrf',
160
+ severity: 'high',
161
+ confidence: 'high',
162
+ message: `SSRF vulnerability: User-controlled input '${userInputVar}' used in HTTP request without validation`,
163
+ line: lineNumber,
164
+ suggestion: 'Validate and whitelist allowed URLs/domains before making HTTP requests',
165
+ owasp: 'A10:2025 - Server-Side Request Forgery (SSRF)',
166
+ cwe: 'CWE-918',
167
+ pciDss: 'PCI DSS 6.5.10',
168
+ remediation: {
169
+ explanation: 'SSRF allows attackers to make the server perform requests to arbitrary URLs, potentially accessing internal services, cloud metadata endpoints (AWS EC2 metadata), or performing port scanning. Always validate and whitelist allowed domains.',
170
+ before: `// UNSAFE\nfunc FetchURL(w http.ResponseWriter, r *http.Request) {\n url := r.URL.Query().Get("url")\n resp, _ := http.Get(url) // SSRF vulnerability!\n io.Copy(w, resp.Body)\n}`,
171
+ after: `// SAFE\nvar allowedDomains = []string{"api.example.com", "cdn.example.com"}\n\nfunc FetchURL(w http.ResponseWriter, r *http.Request) {\n urlStr := r.URL.Query().Get("url")\n \n parsedURL, err := url.Parse(urlStr)\n if err != nil {\n http.Error(w, "Invalid URL", 400)\n return\n }\n \n // Validate domain against whitelist\n allowed := false\n for _, domain := range allowedDomains {\n if parsedURL.Host == domain {\n allowed = true\n break\n }\n }\n \n if !allowed {\n http.Error(w, "Domain not allowed", 403)\n return\n }\n \n resp, _ := http.Get(urlStr)\n io.Copy(w, resp.Body)\n}`
172
+ },
173
+ attackVector: {
174
+ description: 'SSRF allows attackers to make the server send requests to internal services (databases, admin panels), cloud metadata endpoints (AWS credentials), or scan internal networks. This bypasses firewalls and network segmentation.',
175
+ exploitExample: `// Attacker requests:\nGET /fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/\n// Server fetches AWS credentials and returns them\n\n// Or internal services:\nGET /fetch?url=http://localhost:6379/ (Redis)\nGET /fetch?url=http://admin.internal:8080/ (Admin panel)`,
176
+ realWorldImpact: [
177
+ 'Access to cloud metadata endpoints (AWS, Azure, GCP credentials)',
178
+ 'Access to internal services bypassing firewalls',
179
+ 'Port scanning and network mapping of internal infrastructure',
180
+ 'Reading local files via file:// protocol',
181
+ 'Denial of Service by requesting large files',
182
+ 'Credential theft and privilege escalation'
183
+ ]
184
+ }
185
+ }));
186
+ }
187
+ }
188
+ }
189
+ // Also check for net.Dial with user input (SSRF via arbitrary TCP connections)
190
+ const hasNetDial = /net\.Dial\s*\(/i.test(trimmed);
191
+ if (hasNetDial) {
192
+ let usesUserInput = false;
193
+ let userInputVar = '';
194
+ for (const userVar of userInputVars) {
195
+ // Escape special regex characters in variable names
196
+ const escapedVar = userVar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
197
+ if (new RegExp(`\\b${escapedVar}`, 'i').test(trimmed)) {
198
+ usesUserInput = true;
199
+ userInputVar = userVar;
200
+ break;
201
+ }
202
+ }
203
+ if (/\+\s*(?:r\.URL\.Query|r\.FormValue|chi\.URLParam|c\.Query)/i.test(trimmed)) {
204
+ usesUserInput = true;
205
+ userInputVar = 'request parameter';
206
+ }
207
+ if (usesUserInput) {
208
+ // Look for validation in surrounding lines
209
+ let hasValidation = false;
210
+ const startLine = Math.max(0, index - 15);
211
+ const endLine = Math.min(lines.length, index + 15);
212
+ for (let i = startLine; i < endLine; i++) {
213
+ const contextLine = lines[i].trim();
214
+ if (/allowlist|whitelist|validate|isAllowed|allowed.*(?:addresses|hosts)/i.test(contextLine)) {
215
+ hasValidation = true;
216
+ break;
217
+ }
218
+ }
219
+ if (!hasValidation) {
220
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
221
+ category: 'go-ssrf',
222
+ severity: 'high',
223
+ confidence: 'high',
224
+ message: `SSRF vulnerability: User-controlled input '${userInputVar}' used in net.Dial without validation`,
225
+ line: lineNumber,
226
+ suggestion: 'Validate and whitelist allowed hosts/ports before making network connections',
227
+ owasp: 'A10:2025 - Server-Side Request Forgery (SSRF)',
228
+ cwe: 'CWE-918',
229
+ pciDss: 'PCI DSS 6.5.10',
230
+ remediation: {
231
+ explanation: 'Using user input in net.Dial allows attackers to connect to arbitrary internal services, scan ports, or access restricted resources.',
232
+ before: `// UNSAFE\nhost := r.URL.Query().Get("host")\nconn, _ := net.Dial("tcp", host) // SSRF!`,
233
+ after: `// SAFE\nallowedHosts := map[string]bool{\n "api.example.com:443": true,\n}\nhost := r.URL.Query().Get("host")\nif !allowedHosts[host] {\n return errors.New("host not allowed")\n}\nconn, _ := net.Dial("tcp", host)`
234
+ },
235
+ attackVector: {
236
+ description: 'Arbitrary TCP connections allow attackers to scan internal networks, connect to databases, message queues, or other internal services.',
237
+ exploitExample: `// Attacker scans internal network:\nfor port := 1; port <= 65535; port++ {\n GET /connect?host=internal-db:port\n}\n// Identifies open ports and services`,
238
+ realWorldImpact: [
239
+ 'Internal network port scanning',
240
+ 'Access to internal databases and services',
241
+ 'Bypassing firewall restrictions',
242
+ 'Information disclosure about internal infrastructure'
243
+ ]
244
+ }
245
+ }));
246
+ }
247
+ }
248
+ }
249
+ });
250
+ return vulnerabilities;
251
+ }
252
+ //# sourceMappingURL=ssrf-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-detection.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/ssrf-detection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Go TLS Configuration Security Checks
3
+ * OWASP A02:2025 - Cryptographic Failures, A05:2025 - Security Misconfiguration
4
+ *
5
+ * Detects insecure TLS/SSL configurations in Go code.
6
+ */
7
+ import { SecurityVulnerability } from '../../types';
8
+ /**
9
+ * Checks for insecure TLS/SSL configurations
10
+ *
11
+ * Covers:
12
+ * - Check #1: InsecureSkipVerify enabled (HIGH)
13
+ * - Check #2: Weak TLS versions (TLS 1.0/1.1) (MEDIUM)
14
+ *
15
+ * @param lines - Array of code lines
16
+ * @returns Array of security vulnerabilities found
17
+ */
18
+ export declare function checkTLSConfiguration(lines: string[]): SecurityVulnerability[];
19
+ //# sourceMappingURL=tls-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tls-configuration.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/tls-configuration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CA6G9E"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Go TLS Configuration Security Checks
4
+ * OWASP A02:2025 - Cryptographic Failures, A05:2025 - Security Misconfiguration
5
+ *
6
+ * Detects insecure TLS/SSL configurations in Go code.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.checkTLSConfiguration = checkTLSConfiguration;
10
+ const createVulnerability_1 = require("../utils/createVulnerability");
11
+ /**
12
+ * Checks for insecure TLS/SSL configurations
13
+ *
14
+ * Covers:
15
+ * - Check #1: InsecureSkipVerify enabled (HIGH)
16
+ * - Check #2: Weak TLS versions (TLS 1.0/1.1) (MEDIUM)
17
+ *
18
+ * @param lines - Array of code lines
19
+ * @returns Array of security vulnerabilities found
20
+ */
21
+ function checkTLSConfiguration(lines) {
22
+ const vulnerabilities = [];
23
+ let inMultiLineComment = false;
24
+ lines.forEach((line, index) => {
25
+ const lineNumber = index + 1;
26
+ const trimmed = line.trim();
27
+ // Track multi-line comments (/* ... */)
28
+ if (trimmed.includes('/*')) {
29
+ inMultiLineComment = true;
30
+ }
31
+ if (trimmed.includes('*/')) {
32
+ inMultiLineComment = false;
33
+ return;
34
+ }
35
+ // Skip comments and empty lines
36
+ if (!trimmed || inMultiLineComment || trimmed.startsWith('//')) {
37
+ return;
38
+ }
39
+ // =============================================================================
40
+ // Check #1: InsecureSkipVerify Enabled
41
+ // =============================================================================
42
+ // CVSS 8.5 - HIGH
43
+ // Detects InsecureSkipVerify: true in TLS configuration
44
+ const hasInsecureSkipVerify = /InsecureSkipVerify\s*:\s*true/i.test(trimmed);
45
+ if (hasInsecureSkipVerify) {
46
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
47
+ category: 'go-insecure-tls',
48
+ severity: 'high',
49
+ confidence: 'high',
50
+ message: 'TLS certificate verification disabled (InsecureSkipVerify: true)',
51
+ line: lineNumber,
52
+ suggestion: 'Set InsecureSkipVerify: false and use proper certificate validation',
53
+ owasp: 'A02:2025 - Cryptographic Failures',
54
+ cwe: 'CWE-295',
55
+ pciDss: 'PCI DSS 4.1',
56
+ remediation: {
57
+ explanation: 'Disabling certificate verification allows man-in-the-middle attacks. An attacker can intercept HTTPS traffic and present a fake certificate. Always verify TLS certificates in production.',
58
+ before: `tlsConfig := &tls.Config{\n InsecureSkipVerify: true, // DANGEROUS!\n}`,
59
+ after: `tlsConfig := &tls.Config{\n InsecureSkipVerify: false,\n MinVersion: tls.VersionTLS12,\n}`
60
+ },
61
+ attackVector: {
62
+ description: 'When InsecureSkipVerify is true, attackers can perform man-in-the-middle attacks by presenting any certificate, including self-signed or expired certificates.',
63
+ exploitExample: `// Vulnerable code:\ntlsConfig := &tls.Config{InsecureSkipVerify: true}\n// Attacker intercepts HTTPS traffic with fake certificate\n// Application accepts it without validation`,
64
+ realWorldImpact: [
65
+ 'Man-in-the-middle attacks on HTTPS connections',
66
+ 'Credentials and sensitive data intercepted',
67
+ 'API keys and tokens stolen',
68
+ 'Session hijacking',
69
+ 'Compliance violations (PCI DSS, HIPAA, SOC 2)'
70
+ ]
71
+ }
72
+ }));
73
+ }
74
+ // =============================================================================
75
+ // Check #2: Weak TLS Versions (TLS 1.0/1.1)
76
+ // =============================================================================
77
+ // CVSS 6.5 - MEDIUM
78
+ // Detects usage of deprecated TLS versions
79
+ const hasWeakTLSVersion = /tls\.VersionTLS10|tls\.VersionTLS11|MinVersion\s*:\s*tls\.VersionTLS1[01]\b/i.test(trimmed);
80
+ if (hasWeakTLSVersion) {
81
+ vulnerabilities.push((0, createVulnerability_1.createGoSecurityVulnerability)({
82
+ category: 'go-weak-tls-version',
83
+ severity: 'medium',
84
+ confidence: 'high',
85
+ message: 'Weak TLS version (TLS 1.0/1.1) - use TLS 1.2 or higher',
86
+ line: lineNumber,
87
+ suggestion: 'Use tls.VersionTLS12 or tls.VersionTLS13 as MinVersion',
88
+ owasp: 'A02:2025 - Cryptographic Failures',
89
+ cwe: 'CWE-327',
90
+ pciDss: 'PCI DSS 4.1',
91
+ remediation: {
92
+ explanation: 'TLS 1.0 and 1.1 are deprecated and have known vulnerabilities (POODLE, BEAST). PCI DSS requires TLS 1.2+ since June 2018. Major browsers disabled TLS 1.0/1.1 in 2020.',
93
+ before: `tlsConfig := &tls.Config{\n MinVersion: tls.VersionTLS10, // Deprecated\n}`,
94
+ after: `tlsConfig := &tls.Config{\n MinVersion: tls.VersionTLS12, // PCI DSS compliant\n}`
95
+ },
96
+ attackVector: {
97
+ description: 'TLS 1.0/1.1 are vulnerable to attacks like POODLE, BEAST, and others. Attackers can downgrade connections to exploit these weaknesses.',
98
+ exploitExample: `// Weak TLS configuration:\nMinVersion: tls.VersionTLS10\n// Attacker forces downgrade to TLS 1.0\n// Exploits BEAST or POODLE vulnerability`,
99
+ realWorldImpact: [
100
+ 'Protocol downgrade attacks',
101
+ 'Data decryption via POODLE/BEAST attacks',
102
+ 'PCI DSS compliance failures',
103
+ 'Browser warnings and connection failures',
104
+ 'Failed security audits'
105
+ ]
106
+ }
107
+ }));
108
+ }
109
+ });
110
+ return vulnerabilities;
111
+ }
112
+ //# sourceMappingURL=tls-configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tls-configuration.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/tls-configuration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Go Web Security Checks
3
+ * OWASP A05:2025 - Security Misconfiguration
4
+ *
5
+ * Detects missing security headers and information disclosure vulnerabilities
6
+ * in Go web applications.
7
+ */
8
+ import { SecurityVulnerability } from '../../types';
9
+ /**
10
+ * Checks for web security misconfigurations
11
+ *
12
+ * Covers:
13
+ * - Check #1: Missing X-Frame-Options header (MEDIUM)
14
+ * - Check #2: Missing HSTS header (MEDIUM)
15
+ * - Check #3: Missing Content-Security-Policy header (MEDIUM)
16
+ * - Check #4: Information disclosure via error messages (MEDIUM)
17
+ *
18
+ * @param lines - Array of code lines
19
+ * @returns Array of security vulnerabilities found
20
+ */
21
+ export declare function checkWebSecurity(lines: string[]): SecurityVulnerability[];
22
+ //# sourceMappingURL=web-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-security.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/go/security-checks/web-security.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAmQzE"}