@nahisaho/musubix-security 1.8.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/README.md +105 -0
- package/bin/musubix-security-mcp.js +12 -0
- package/bin/musubix-security.js +12 -0
- package/dist/analysis/dependency-auditor.d.ts +30 -0
- package/dist/analysis/dependency-auditor.d.ts.map +1 -0
- package/dist/analysis/dependency-auditor.js +325 -0
- package/dist/analysis/dependency-auditor.js.map +1 -0
- package/dist/analysis/index.d.ts +9 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +9 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/secret-detector.d.ts +44 -0
- package/dist/analysis/secret-detector.d.ts.map +1 -0
- package/dist/analysis/secret-detector.js +465 -0
- package/dist/analysis/secret-detector.js.map +1 -0
- package/dist/analysis/taint-analyzer.d.ts +62 -0
- package/dist/analysis/taint-analyzer.d.ts.map +1 -0
- package/dist/analysis/taint-analyzer.js +519 -0
- package/dist/analysis/taint-analyzer.js.map +1 -0
- package/dist/analysis/vulnerability-scanner.d.ts +58 -0
- package/dist/analysis/vulnerability-scanner.d.ts.map +1 -0
- package/dist/analysis/vulnerability-scanner.js +417 -0
- package/dist/analysis/vulnerability-scanner.js.map +1 -0
- package/dist/cli/commands.d.ts +15 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +405 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/ast-parser.d.ts +87 -0
- package/dist/infrastructure/ast-parser.d.ts.map +1 -0
- package/dist/infrastructure/ast-parser.js +273 -0
- package/dist/infrastructure/ast-parser.js.map +1 -0
- package/dist/infrastructure/cache.d.ts +100 -0
- package/dist/infrastructure/cache.d.ts.map +1 -0
- package/dist/infrastructure/cache.js +288 -0
- package/dist/infrastructure/cache.js.map +1 -0
- package/dist/infrastructure/config-loader.d.ts +35 -0
- package/dist/infrastructure/config-loader.d.ts.map +1 -0
- package/dist/infrastructure/config-loader.js +358 -0
- package/dist/infrastructure/config-loader.js.map +1 -0
- package/dist/infrastructure/file-scanner.d.ts +94 -0
- package/dist/infrastructure/file-scanner.d.ts.map +1 -0
- package/dist/infrastructure/file-scanner.js +189 -0
- package/dist/infrastructure/file-scanner.js.map +1 -0
- package/dist/infrastructure/index.d.ts +9 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +9 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +34 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +88 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +88 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +443 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/services/fix-generator.d.ts +56 -0
- package/dist/services/fix-generator.d.ts.map +1 -0
- package/dist/services/fix-generator.js +346 -0
- package/dist/services/fix-generator.js.map +1 -0
- package/dist/services/fix-verifier.d.ts +62 -0
- package/dist/services/fix-verifier.d.ts.map +1 -0
- package/dist/services/fix-verifier.js +224 -0
- package/dist/services/fix-verifier.js.map +1 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +13 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/report-generator.d.ts +87 -0
- package/dist/services/report-generator.d.ts.map +1 -0
- package/dist/services/report-generator.js +463 -0
- package/dist/services/report-generator.js.map +1 -0
- package/dist/services/security-service.d.ts +151 -0
- package/dist/services/security-service.d.ts.map +1 -0
- package/dist/services/security-service.js +279 -0
- package/dist/services/security-service.js.map +1 -0
- package/dist/types/config.d.ts +188 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +89 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dependency.d.ts +266 -0
- package/dist/types/dependency.d.ts.map +1 -0
- package/dist/types/dependency.js +7 -0
- package/dist/types/dependency.js.map +1 -0
- package/dist/types/fix.d.ts +213 -0
- package/dist/types/fix.d.ts.map +1 -0
- package/dist/types/fix.js +7 -0
- package/dist/types/fix.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/secret.d.ts +151 -0
- package/dist/types/secret.d.ts.map +1 -0
- package/dist/types/secret.js +91 -0
- package/dist/types/secret.js.map +1 -0
- package/dist/types/taint.d.ts +182 -0
- package/dist/types/taint.d.ts.map +1 -0
- package/dist/types/taint.js +24 -0
- package/dist/types/taint.js.map +1 -0
- package/dist/types/vulnerability.d.ts +136 -0
- package/dist/types/vulnerability.d.ts.map +1 -0
- package/dist/types/vulnerability.js +7 -0
- package/dist/types/vulnerability.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Vulnerability scanner - static analysis for security vulnerabilities
|
|
3
|
+
* @module @nahisaho/musubix-security/analysis/vulnerability-scanner
|
|
4
|
+
* @trace REQ-SEC-SCAN-001, REQ-SEC-SCAN-002, REQ-SEC-SCAN-003
|
|
5
|
+
*/
|
|
6
|
+
import { SyntaxKind } from 'ts-morph';
|
|
7
|
+
import { getASTParser } from '../infrastructure/ast-parser.js';
|
|
8
|
+
import { createFileScanner } from '../infrastructure/file-scanner.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate vulnerability ID
|
|
11
|
+
*/
|
|
12
|
+
let vulnCounter = 0;
|
|
13
|
+
function generateVulnId() {
|
|
14
|
+
const date = new Date();
|
|
15
|
+
const dateStr = date.toISOString().slice(0, 10).replace(/-/g, '');
|
|
16
|
+
return `VULN-${dateStr}-${String(++vulnCounter).padStart(3, '0')}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Reset vulnerability counter (for testing)
|
|
20
|
+
*/
|
|
21
|
+
export function resetVulnCounter() {
|
|
22
|
+
vulnCounter = 0;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* SQL Injection detector
|
|
26
|
+
* @trace REQ-SEC-SCAN-002
|
|
27
|
+
*/
|
|
28
|
+
const sqlInjectionDetector = {
|
|
29
|
+
ruleId: 'SEC-001',
|
|
30
|
+
detect(sourceFile, parser) {
|
|
31
|
+
const vulnerabilities = [];
|
|
32
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
33
|
+
for (const call of calls) {
|
|
34
|
+
const funcName = parser.getFunctionName(call);
|
|
35
|
+
const sqlMethods = ['query', 'execute', 'raw', 'exec'];
|
|
36
|
+
if (funcName && sqlMethods.includes(funcName)) {
|
|
37
|
+
const args = call.getArguments();
|
|
38
|
+
if (args.length > 0) {
|
|
39
|
+
const firstArg = args[0];
|
|
40
|
+
// Check for template literal (potential string concatenation)
|
|
41
|
+
if (firstArg.getKind() === SyntaxKind.TemplateExpression) {
|
|
42
|
+
vulnerabilities.push({
|
|
43
|
+
id: generateVulnId(),
|
|
44
|
+
type: 'injection',
|
|
45
|
+
severity: 'critical',
|
|
46
|
+
cwes: ['CWE-89'],
|
|
47
|
+
owasp: ['A03:2021'],
|
|
48
|
+
location: parser.getLocation(call),
|
|
49
|
+
description: 'Potential SQL injection: Template literal used in SQL query',
|
|
50
|
+
recommendation: 'Use parameterized queries instead of string interpolation',
|
|
51
|
+
confidence: 0.85,
|
|
52
|
+
ruleId: this.ruleId,
|
|
53
|
+
codeSnippet: parser.extractSnippet(call),
|
|
54
|
+
detectedAt: new Date(),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// Check for binary expression (string concatenation)
|
|
58
|
+
if (firstArg.getKind() === SyntaxKind.BinaryExpression) {
|
|
59
|
+
vulnerabilities.push({
|
|
60
|
+
id: generateVulnId(),
|
|
61
|
+
type: 'injection',
|
|
62
|
+
severity: 'critical',
|
|
63
|
+
cwes: ['CWE-89'],
|
|
64
|
+
owasp: ['A03:2021'],
|
|
65
|
+
location: parser.getLocation(call),
|
|
66
|
+
description: 'Potential SQL injection: String concatenation in SQL query',
|
|
67
|
+
recommendation: 'Use parameterized queries instead of string concatenation',
|
|
68
|
+
confidence: 0.9,
|
|
69
|
+
ruleId: this.ruleId,
|
|
70
|
+
codeSnippet: parser.extractSnippet(call),
|
|
71
|
+
detectedAt: new Date(),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return vulnerabilities;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Command injection detector
|
|
82
|
+
*/
|
|
83
|
+
const commandInjectionDetector = {
|
|
84
|
+
ruleId: 'SEC-002',
|
|
85
|
+
detect(sourceFile, parser) {
|
|
86
|
+
const vulnerabilities = [];
|
|
87
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
88
|
+
for (const call of calls) {
|
|
89
|
+
const funcName = parser.getFunctionName(call);
|
|
90
|
+
const cmdMethods = ['exec', 'execSync', 'spawn', 'spawnSync', 'execFile'];
|
|
91
|
+
if (funcName && cmdMethods.includes(funcName)) {
|
|
92
|
+
const args = call.getArguments();
|
|
93
|
+
if (args.length > 0) {
|
|
94
|
+
const firstArg = args[0];
|
|
95
|
+
// Check for template literal or binary expression
|
|
96
|
+
if (firstArg.getKind() === SyntaxKind.TemplateExpression ||
|
|
97
|
+
firstArg.getKind() === SyntaxKind.BinaryExpression) {
|
|
98
|
+
vulnerabilities.push({
|
|
99
|
+
id: generateVulnId(),
|
|
100
|
+
type: 'command-injection',
|
|
101
|
+
severity: 'critical',
|
|
102
|
+
cwes: ['CWE-78'],
|
|
103
|
+
owasp: ['A03:2021'],
|
|
104
|
+
location: parser.getLocation(call),
|
|
105
|
+
description: 'Potential command injection: Unsafe command construction',
|
|
106
|
+
recommendation: 'Use execFile with array arguments or properly escape shell arguments',
|
|
107
|
+
confidence: 0.85,
|
|
108
|
+
ruleId: this.ruleId,
|
|
109
|
+
codeSnippet: parser.extractSnippet(call),
|
|
110
|
+
detectedAt: new Date(),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return vulnerabilities;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Path traversal detector
|
|
121
|
+
*/
|
|
122
|
+
const pathTraversalDetector = {
|
|
123
|
+
ruleId: 'SEC-003',
|
|
124
|
+
detect(sourceFile, parser) {
|
|
125
|
+
const vulnerabilities = [];
|
|
126
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
127
|
+
for (const call of calls) {
|
|
128
|
+
const funcName = parser.getFunctionName(call);
|
|
129
|
+
const fsMethods = [
|
|
130
|
+
'readFile', 'readFileSync', 'writeFile', 'writeFileSync',
|
|
131
|
+
'readdir', 'readdirSync', 'unlink', 'unlinkSync',
|
|
132
|
+
'stat', 'statSync', 'access', 'accessSync',
|
|
133
|
+
];
|
|
134
|
+
if (funcName && fsMethods.includes(funcName)) {
|
|
135
|
+
const args = call.getArguments();
|
|
136
|
+
if (args.length > 0) {
|
|
137
|
+
const firstArg = args[0];
|
|
138
|
+
// Check for template literal or binary expression
|
|
139
|
+
if (firstArg.getKind() === SyntaxKind.TemplateExpression ||
|
|
140
|
+
firstArg.getKind() === SyntaxKind.BinaryExpression) {
|
|
141
|
+
vulnerabilities.push({
|
|
142
|
+
id: generateVulnId(),
|
|
143
|
+
type: 'path-traversal',
|
|
144
|
+
severity: 'high',
|
|
145
|
+
cwes: ['CWE-22'],
|
|
146
|
+
owasp: ['A01:2021'],
|
|
147
|
+
location: parser.getLocation(call),
|
|
148
|
+
description: 'Potential path traversal: User input may be used in file path',
|
|
149
|
+
recommendation: 'Validate and sanitize file paths, use path.resolve() with base directory check',
|
|
150
|
+
confidence: 0.75,
|
|
151
|
+
ruleId: this.ruleId,
|
|
152
|
+
codeSnippet: parser.extractSnippet(call),
|
|
153
|
+
detectedAt: new Date(),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return vulnerabilities;
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* XSS detector
|
|
164
|
+
*/
|
|
165
|
+
const xssDetector = {
|
|
166
|
+
ruleId: 'SEC-004',
|
|
167
|
+
detect(sourceFile, parser) {
|
|
168
|
+
const vulnerabilities = [];
|
|
169
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
170
|
+
for (const call of calls) {
|
|
171
|
+
const funcName = parser.getFunctionName(call);
|
|
172
|
+
const receiverName = parser.getReceiverName(call);
|
|
173
|
+
// Check res.send(), res.write(), res.end() with template literals
|
|
174
|
+
if (receiverName === 'res' &&
|
|
175
|
+
funcName &&
|
|
176
|
+
['send', 'write', 'end', 'render'].includes(funcName)) {
|
|
177
|
+
const args = call.getArguments();
|
|
178
|
+
if (args.length > 0) {
|
|
179
|
+
const firstArg = args[0];
|
|
180
|
+
if (firstArg.getKind() === SyntaxKind.TemplateExpression) {
|
|
181
|
+
vulnerabilities.push({
|
|
182
|
+
id: generateVulnId(),
|
|
183
|
+
type: 'xss',
|
|
184
|
+
severity: 'high',
|
|
185
|
+
cwes: ['CWE-79'],
|
|
186
|
+
owasp: ['A03:2021'],
|
|
187
|
+
location: parser.getLocation(call),
|
|
188
|
+
description: 'Potential XSS: Unescaped output to response',
|
|
189
|
+
recommendation: 'Use HTML escaping or a template engine with auto-escaping',
|
|
190
|
+
confidence: 0.7,
|
|
191
|
+
ruleId: this.ruleId,
|
|
192
|
+
codeSnippet: parser.extractSnippet(call),
|
|
193
|
+
detectedAt: new Date(),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Check innerHTML assignment (requires property access analysis)
|
|
199
|
+
const expr = call.getExpression();
|
|
200
|
+
if (expr.getText().includes('innerHTML')) {
|
|
201
|
+
vulnerabilities.push({
|
|
202
|
+
id: generateVulnId(),
|
|
203
|
+
type: 'xss',
|
|
204
|
+
severity: 'high',
|
|
205
|
+
cwes: ['CWE-79'],
|
|
206
|
+
owasp: ['A03:2021'],
|
|
207
|
+
location: parser.getLocation(call),
|
|
208
|
+
description: 'Potential XSS: innerHTML assignment detected',
|
|
209
|
+
recommendation: 'Use textContent or properly sanitize HTML content',
|
|
210
|
+
confidence: 0.8,
|
|
211
|
+
ruleId: this.ruleId,
|
|
212
|
+
codeSnippet: parser.extractSnippet(call),
|
|
213
|
+
detectedAt: new Date(),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return vulnerabilities;
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Eval detector
|
|
222
|
+
*/
|
|
223
|
+
const evalDetector = {
|
|
224
|
+
ruleId: 'SEC-005',
|
|
225
|
+
detect(sourceFile, parser) {
|
|
226
|
+
const vulnerabilities = [];
|
|
227
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
228
|
+
for (const call of calls) {
|
|
229
|
+
const funcName = parser.getFunctionName(call);
|
|
230
|
+
if (funcName === 'eval' || funcName === 'Function') {
|
|
231
|
+
vulnerabilities.push({
|
|
232
|
+
id: generateVulnId(),
|
|
233
|
+
type: 'code-injection',
|
|
234
|
+
severity: 'critical',
|
|
235
|
+
cwes: ['CWE-94', 'CWE-95'],
|
|
236
|
+
owasp: ['A03:2021'],
|
|
237
|
+
location: parser.getLocation(call),
|
|
238
|
+
description: `Potential code injection: ${funcName}() usage detected`,
|
|
239
|
+
recommendation: 'Avoid eval() and new Function(). Use safer alternatives.',
|
|
240
|
+
confidence: 0.95,
|
|
241
|
+
ruleId: this.ruleId,
|
|
242
|
+
codeSnippet: parser.extractSnippet(call),
|
|
243
|
+
detectedAt: new Date(),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return vulnerabilities;
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* Prototype pollution detector
|
|
252
|
+
*/
|
|
253
|
+
const prototypePollutionDetector = {
|
|
254
|
+
ruleId: 'SEC-006',
|
|
255
|
+
detect(sourceFile, parser) {
|
|
256
|
+
const vulnerabilities = [];
|
|
257
|
+
const calls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
258
|
+
for (const call of calls) {
|
|
259
|
+
const funcName = parser.getFunctionName(call);
|
|
260
|
+
// Object.assign with user input
|
|
261
|
+
if (funcName === 'assign') {
|
|
262
|
+
const receiverName = parser.getReceiverName(call);
|
|
263
|
+
if (receiverName === 'Object') {
|
|
264
|
+
// Check if first argument is Object.prototype or {}
|
|
265
|
+
vulnerabilities.push({
|
|
266
|
+
id: generateVulnId(),
|
|
267
|
+
type: 'prototype-pollution',
|
|
268
|
+
severity: 'high',
|
|
269
|
+
cwes: ['CWE-1321'],
|
|
270
|
+
owasp: ['A08:2021'],
|
|
271
|
+
location: parser.getLocation(call),
|
|
272
|
+
description: 'Potential prototype pollution: Object.assign() with external input',
|
|
273
|
+
recommendation: 'Validate object keys, use Map instead, or freeze prototype',
|
|
274
|
+
confidence: 0.6,
|
|
275
|
+
ruleId: this.ruleId,
|
|
276
|
+
codeSnippet: parser.extractSnippet(call),
|
|
277
|
+
detectedAt: new Date(),
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Check for __proto__ access
|
|
283
|
+
const propertyAccess = sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAccessExpression);
|
|
284
|
+
for (const access of propertyAccess) {
|
|
285
|
+
if (access.getName() === '__proto__') {
|
|
286
|
+
vulnerabilities.push({
|
|
287
|
+
id: generateVulnId(),
|
|
288
|
+
type: 'prototype-pollution',
|
|
289
|
+
severity: 'high',
|
|
290
|
+
cwes: ['CWE-1321'],
|
|
291
|
+
owasp: ['A08:2021'],
|
|
292
|
+
location: parser.getLocation(access),
|
|
293
|
+
description: 'Potential prototype pollution: __proto__ access detected',
|
|
294
|
+
recommendation: 'Avoid __proto__ access, use Object.getPrototypeOf() if needed',
|
|
295
|
+
confidence: 0.85,
|
|
296
|
+
ruleId: this.ruleId,
|
|
297
|
+
codeSnippet: parser.extractSnippet(access),
|
|
298
|
+
detectedAt: new Date(),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return vulnerabilities;
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
/**
|
|
306
|
+
* All built-in detectors
|
|
307
|
+
*/
|
|
308
|
+
const DETECTORS = [
|
|
309
|
+
sqlInjectionDetector,
|
|
310
|
+
commandInjectionDetector,
|
|
311
|
+
pathTraversalDetector,
|
|
312
|
+
xssDetector,
|
|
313
|
+
evalDetector,
|
|
314
|
+
prototypePollutionDetector,
|
|
315
|
+
];
|
|
316
|
+
/**
|
|
317
|
+
* Vulnerability scanner
|
|
318
|
+
*/
|
|
319
|
+
export class VulnerabilityScanner {
|
|
320
|
+
parser;
|
|
321
|
+
fileScanner;
|
|
322
|
+
detectors;
|
|
323
|
+
constructor(options) {
|
|
324
|
+
this.parser = getASTParser(options?.tsConfigPath);
|
|
325
|
+
this.fileScanner = createFileScanner();
|
|
326
|
+
this.detectors = [...DETECTORS];
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Scan a single file
|
|
330
|
+
*/
|
|
331
|
+
scanFile(filePath) {
|
|
332
|
+
const sourceFile = this.parser.parseFile(filePath);
|
|
333
|
+
const vulnerabilities = [];
|
|
334
|
+
for (const detector of this.detectors) {
|
|
335
|
+
const detected = detector.detect(sourceFile, this.parser);
|
|
336
|
+
vulnerabilities.push(...detected);
|
|
337
|
+
}
|
|
338
|
+
return vulnerabilities;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Scan a directory
|
|
342
|
+
*/
|
|
343
|
+
async scanDirectory(rootPath, options) {
|
|
344
|
+
const startTime = Date.now();
|
|
345
|
+
const files = await this.fileScanner.scan(rootPath);
|
|
346
|
+
const vulnerabilities = [];
|
|
347
|
+
let scannedFiles = 0;
|
|
348
|
+
let skippedFiles = 0;
|
|
349
|
+
for (const file of files) {
|
|
350
|
+
// Apply exclude patterns
|
|
351
|
+
if (options?.excludePatterns?.some((p) => file.relativePath.includes(p))) {
|
|
352
|
+
skippedFiles++;
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
// Apply max file size
|
|
356
|
+
if (options?.maxFileSize && file.size > options.maxFileSize) {
|
|
357
|
+
skippedFiles++;
|
|
358
|
+
continue;
|
|
359
|
+
}
|
|
360
|
+
try {
|
|
361
|
+
const fileVulns = this.scanFile(file.path);
|
|
362
|
+
// Apply severity filter
|
|
363
|
+
const filtered = options?.severityFilter
|
|
364
|
+
? fileVulns.filter((v) => options.severityFilter.includes(v.severity))
|
|
365
|
+
: fileVulns;
|
|
366
|
+
vulnerabilities.push(...filtered);
|
|
367
|
+
scannedFiles++;
|
|
368
|
+
}
|
|
369
|
+
catch (error) {
|
|
370
|
+
console.warn(`Warning: Failed to scan ${file.path}: ${error}`);
|
|
371
|
+
skippedFiles++;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
const duration = Date.now() - startTime;
|
|
375
|
+
return {
|
|
376
|
+
vulnerabilities,
|
|
377
|
+
scannedFiles,
|
|
378
|
+
skippedFiles,
|
|
379
|
+
duration,
|
|
380
|
+
timestamp: new Date(),
|
|
381
|
+
options: options ?? {},
|
|
382
|
+
summary: {
|
|
383
|
+
critical: vulnerabilities.filter((v) => v.severity === 'critical').length,
|
|
384
|
+
high: vulnerabilities.filter((v) => v.severity === 'high').length,
|
|
385
|
+
medium: vulnerabilities.filter((v) => v.severity === 'medium').length,
|
|
386
|
+
low: vulnerabilities.filter((v) => v.severity === 'low').length,
|
|
387
|
+
info: vulnerabilities.filter((v) => v.severity === 'info').length,
|
|
388
|
+
total: vulnerabilities.length,
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Add a custom detector
|
|
394
|
+
*/
|
|
395
|
+
addDetector(detector) {
|
|
396
|
+
this.detectors.push(detector);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get list of rule IDs
|
|
400
|
+
*/
|
|
401
|
+
getRuleIds() {
|
|
402
|
+
return this.detectors.map((d) => d.ruleId);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get number of rules
|
|
406
|
+
*/
|
|
407
|
+
getRuleCount() {
|
|
408
|
+
return this.detectors.length;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Create a vulnerability scanner
|
|
413
|
+
*/
|
|
414
|
+
export function createVulnerabilityScanner(options) {
|
|
415
|
+
return new VulnerabilityScanner(options);
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=vulnerability-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vulnerability-scanner.js","sourceRoot":"","sources":["../../src/analysis/vulnerability-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Security CLI commands
|
|
3
|
+
* @module @nahisaho/musubix-security/cli
|
|
4
|
+
* @trace REQ-SEC-CLI-001
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Create security CLI command
|
|
9
|
+
*/
|
|
10
|
+
export declare function createSecurityCLI(): Command;
|
|
11
|
+
/**
|
|
12
|
+
* Run CLI
|
|
13
|
+
*/
|
|
14
|
+
export declare function runCLI(args?: string[]): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKpC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsR3C;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE"}
|