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.
- package/__tests__/local-scanner.test.ts +5 -0
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
- package/dist/packages/cli/src/commands/scan.js +3 -1
- package/dist/packages/cli/src/commands/scan.js.map +1 -1
- package/dist/packages/cli/src/config/config-loader.d.ts +2 -2
- package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -1
- package/dist/packages/cli/src/config/config-loader.js +2 -2
- package/dist/packages/cli/src/config/config-loader.js.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +2 -2
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.js +10 -1
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
- package/dist/src/lib/analyzers/go/quality-checks/code-quality.d.ts +20 -0
- package/dist/src/lib/analyzers/go/quality-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/quality-checks/code-quality.js +211 -0
- package/dist/src/lib/analyzers/go/quality-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/access-control.d.ts +20 -0
- package/dist/src/lib/analyzers/go/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/access-control.js +201 -0
- package/dist/src/lib/analyzers/go/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.js +545 -0
- package/dist/src/lib/analyzers/go/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.d.ts +23 -0
- package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.js +321 -0
- package/dist/src/lib/analyzers/go/security-checks/concurrency-safety.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.d.ts +22 -0
- package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.js +267 -0
- package/dist/src/lib/analyzers/go/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/deserialization.d.ts +19 -0
- package/dist/src/lib/analyzers/go/security-checks/deserialization.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/deserialization.js +210 -0
- package/dist/src/lib/analyzers/go/security-checks/deserialization.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/error-handling.d.ts +19 -0
- package/dist/src/lib/analyzers/go/security-checks/error-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/error-handling.js +192 -0
- package/dist/src/lib/analyzers/go/security-checks/error-handling.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/injection-attacks.d.ts +24 -0
- package/dist/src/lib/analyzers/go/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/injection-attacks.js +401 -0
- package/dist/src/lib/analyzers/go/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.d.ts +19 -0
- package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.js +252 -0
- package/dist/src/lib/analyzers/go/security-checks/ssrf-detection.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/tls-configuration.d.ts +19 -0
- package/dist/src/lib/analyzers/go/security-checks/tls-configuration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/tls-configuration.js +112 -0
- package/dist/src/lib/analyzers/go/security-checks/tls-configuration.js.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/web-security.d.ts +22 -0
- package/dist/src/lib/analyzers/go/security-checks/web-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/security-checks/web-security.js +244 -0
- package/dist/src/lib/analyzers/go/security-checks/web-security.js.map +1 -0
- package/dist/src/lib/analyzers/go/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/go/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/go/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/go-analyzer.d.ts +48 -0
- package/dist/src/lib/analyzers/go-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/go-analyzer.js +233 -0
- package/dist/src/lib/analyzers/go-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -1
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -1
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +5 -3
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +23 -5
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.js +17 -1
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -1
- package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -1
- package/dist/src/lib/security/compliance-mapping.js +403 -0
- package/dist/src/lib/security/compliance-mapping.js.map +1 -1
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -1
- package/dist/src/lib/security/severity-scoring.js +169 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -1
- package/dist/src/lib/types/index.d.ts +2 -2
- package/dist/src/lib/types/index.d.ts.map +1 -1
- package/example3.go +23 -0
- package/package.json +1 -1
- package/src/commands/scan.ts +3 -1
- package/src/config/config-loader.ts +3 -3
- 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":";AAAA;;;;;;GAMG;;AAcH,8BAmRC;AA9RD,sEAA6E;AAE7E;;;;;;;;GAQG;AACH,SAAgB,SAAS,CAAC,KAAe;IACvC,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,gDAAgD;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,kDAAkD;IAE5F,0CAA0C;IAC1C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,iDAAiD;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAC9B,kJAAkJ,CACnJ,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YACf,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC3F,IAAI,SAAS,EAAE,CAAC;YACd,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,iCAAiC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACpF,IAAI,SAAS,EAAE,CAAC;YACd,kCAAkC;YAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,QAAQ,EAAE,CAAC;gBACb,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,wDAAwD;QACxD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACjF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC3B,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC;YAC/D,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,+CAA+C;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC;gBAC9D,uDAAuD;gBACvD,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,8CAA8C;IAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,wCAAwC;QACxC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,kBAAkB,GAAG,KAAK,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,gFAAgF;QAChF,kDAAkD;QAClD,gFAAgF;QAChF,kBAAkB;QAClB,gEAAgE;QAEhE,8BAA8B;QAC9B,MAAM,cAAc,GAAG,+DAA+D,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErG,IAAI,cAAc,EAAE,CAAC;YACnB,qDAAqD;YACrD,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,oDAAoD;gBACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBAClE,IAAI,IAAI,MAAM,CAAC,MAAM,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtD,aAAa,GAAG,IAAI,CAAC;oBACrB,YAAY,GAAG,OAAO,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;gBACpC,IAAI,IAAI,MAAM,CAAC,MAAM,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrD,aAAa,GAAG,IAAI,CAAC;oBACrB,YAAY,GAAG,MAAM,CAAC;oBACtB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,IACE,iGAAiG,CAAC,IAAI,CACpG,OAAO,CACR,EACD,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;gBACrB,YAAY,GAAG,mBAAmB,CAAC;YACrC,CAAC;YAED,qCAAqC;YACrC,IAAI,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzF,aAAa,GAAG,IAAI,CAAC;gBACrB,YAAY,GAAG,oBAAoB,CAAC;YACtC,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,gEAAgE;gBAChE,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;gBAEnD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAEpC,wBAAwB;oBACxB,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBACpC,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;oBAED,kEAAkE;oBAClE,IAAI,wFAAwF,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC/G,cAAc,GAAG,IAAI,CAAC;oBACxB,CAAC;oBAED,2CAA2C;oBAC3C,IAAI,wCAAwC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC/D,aAAa,GAAG,IAAI,CAAC;wBACrB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,qEAAqE;gBACrE,IAAI,CAAC,aAAa,IAAI,cAAc,CAAC,IAAI,aAAa,EAAE,CAAC;oBACvD,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,eAAe,CAAC,IAAI,CAClB,IAAA,mDAA6B,EAAC;wBAC5B,QAAQ,EAAE,SAAS;wBACnB,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,MAAM;wBAClB,OAAO,EAAE,8CAA8C,YAAY,2CAA2C;wBAC9G,IAAI,EAAE,UAAU;wBAChB,UAAU,EAAE,yEAAyE;wBACrF,KAAK,EAAE,+CAA+C;wBACtD,GAAG,EAAE,SAAS;wBACd,MAAM,EAAE,gBAAgB;wBACxB,WAAW,EAAE;4BACX,WAAW,EACT,gPAAgP;4BAClP,MAAM,EAAE,4LAA4L;4BACpM,KAAK,EAAE,yrBAAyrB;yBACjsB;wBACD,YAAY,EAAE;4BACZ,WAAW,EACT,iOAAiO;4BACnO,cAAc,EAAE,oSAAoS;4BACpT,eAAe,EAAE;gCACf,kEAAkE;gCAClE,iDAAiD;gCACjD,8DAA8D;gCAC9D,0CAA0C;gCAC1C,6CAA6C;gCAC7C,2CAA2C;6BAC5C;yBACF;qBACF,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,oDAAoD;gBACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBAClE,IAAI,IAAI,MAAM,CAAC,MAAM,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtD,aAAa,GAAG,IAAI,CAAC;oBACrB,YAAY,GAAG,OAAO,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,6DAA6D,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChF,aAAa,GAAG,IAAI,CAAC;gBACrB,YAAY,GAAG,mBAAmB,CAAC;YACrC,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,2CAA2C;gBAC3C,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;gBAEnD,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpC,IAAI,sEAAsE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;wBAC7F,aAAa,GAAG,IAAI,CAAC;wBACrB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,eAAe,CAAC,IAAI,CAClB,IAAA,mDAA6B,EAAC;wBAC5B,QAAQ,EAAE,SAAS;wBACnB,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,MAAM;wBAClB,OAAO,EAAE,8CAA8C,YAAY,uCAAuC;wBAC1G,IAAI,EAAE,UAAU;wBAChB,UAAU,EAAE,8EAA8E;wBAC1F,KAAK,EAAE,+CAA+C;wBACtD,GAAG,EAAE,SAAS;wBACd,MAAM,EAAE,gBAAgB;wBACxB,WAAW,EAAE;4BACX,WAAW,EACT,sIAAsI;4BACxI,MAAM,EAAE,yFAAyF;4BACjG,KAAK,EAAE,6NAA6N;yBACrO;wBACD,YAAY,EAAE;4BACZ,WAAW,EACT,wIAAwI;4BAC1I,cAAc,EAAE,+JAA+J;4BAC/K,eAAe,EAAE;gCACf,gCAAgC;gCAChC,2CAA2C;gCAC3C,iCAAiC;gCACjC,sDAAsD;6BACvD;yBACF;qBACF,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -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"}
|