erosolar-cli 2.1.202 → 2.1.204

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 (74) hide show
  1. package/agents/erosolar-code.rules.json +8 -13
  2. package/agents/general.rules.json +20 -33
  3. package/dist/core/agentOrchestrator.d.ts +19 -5
  4. package/dist/core/agentOrchestrator.d.ts.map +1 -1
  5. package/dist/core/agentOrchestrator.js +221 -245
  6. package/dist/core/agentOrchestrator.js.map +1 -1
  7. package/dist/core/errors/errorTypes.d.ts +0 -6
  8. package/dist/core/errors/errorTypes.d.ts.map +1 -1
  9. package/dist/core/errors/errorTypes.js +0 -26
  10. package/dist/core/errors/errorTypes.js.map +1 -1
  11. package/dist/core/errors/safetyValidator.d.ts +1 -40
  12. package/dist/core/errors/safetyValidator.d.ts.map +1 -1
  13. package/dist/core/errors/safetyValidator.js +1 -145
  14. package/dist/core/errors/safetyValidator.js.map +1 -1
  15. package/dist/core/reliabilityPrompt.d.ts.map +1 -1
  16. package/dist/core/reliabilityPrompt.js +10 -11
  17. package/dist/core/reliabilityPrompt.js.map +1 -1
  18. package/dist/providers/openaiResponsesProvider.d.ts +0 -5
  19. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  20. package/dist/providers/openaiResponsesProvider.js +1 -38
  21. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  22. package/dist/shell/interactiveShell.d.ts +0 -3
  23. package/dist/shell/interactiveShell.d.ts.map +1 -1
  24. package/dist/shell/interactiveShell.js +47 -73
  25. package/dist/shell/interactiveShell.js.map +1 -1
  26. package/dist/ui/PromptController.d.ts +1 -0
  27. package/dist/ui/PromptController.d.ts.map +1 -1
  28. package/dist/ui/PromptController.js +3 -0
  29. package/dist/ui/PromptController.js.map +1 -1
  30. package/dist/ui/UnifiedUIRenderer.d.ts +2 -0
  31. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  32. package/dist/ui/UnifiedUIRenderer.js +8 -1
  33. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/core/LazyLoader.d.ts +0 -129
  36. package/dist/core/LazyLoader.d.ts.map +0 -1
  37. package/dist/core/LazyLoader.js +0 -240
  38. package/dist/core/LazyLoader.js.map +0 -1
  39. package/dist/core/alphaZeroOrchestrator.d.ts +0 -140
  40. package/dist/core/alphaZeroOrchestrator.d.ts.map +0 -1
  41. package/dist/core/alphaZeroOrchestrator.js +0 -418
  42. package/dist/core/alphaZeroOrchestrator.js.map +0 -1
  43. package/dist/core/checkpoint.d.ts +0 -76
  44. package/dist/core/checkpoint.d.ts.map +0 -1
  45. package/dist/core/checkpoint.js +0 -278
  46. package/dist/core/checkpoint.js.map +0 -1
  47. package/dist/core/costTracker.d.ts +0 -87
  48. package/dist/core/costTracker.d.ts.map +0 -1
  49. package/dist/core/costTracker.js +0 -285
  50. package/dist/core/costTracker.js.map +0 -1
  51. package/dist/core/errors/errorUtils.d.ts +0 -87
  52. package/dist/core/errors/errorUtils.d.ts.map +0 -1
  53. package/dist/core/errors/errorUtils.js +0 -158
  54. package/dist/core/errors/errorUtils.js.map +0 -1
  55. package/dist/core/errors/promptBlockErrors.d.ts +0 -9
  56. package/dist/core/errors/promptBlockErrors.d.ts.map +0 -1
  57. package/dist/core/errors/promptBlockErrors.js +0 -54
  58. package/dist/core/errors/promptBlockErrors.js.map +0 -1
  59. package/dist/core/isolatedVerifier.d.ts +0 -40
  60. package/dist/core/isolatedVerifier.d.ts.map +0 -1
  61. package/dist/core/isolatedVerifier.js +0 -129
  62. package/dist/core/isolatedVerifier.js.map +0 -1
  63. package/dist/core/responseVerifier.d.ts +0 -98
  64. package/dist/core/responseVerifier.d.ts.map +0 -1
  65. package/dist/core/responseVerifier.js +0 -509
  66. package/dist/core/responseVerifier.js.map +0 -1
  67. package/dist/core/securityAssessment.d.ts +0 -91
  68. package/dist/core/securityAssessment.d.ts.map +0 -1
  69. package/dist/core/securityAssessment.js +0 -580
  70. package/dist/core/securityAssessment.js.map +0 -1
  71. package/dist/core/verification.d.ts +0 -137
  72. package/dist/core/verification.d.ts.map +0 -1
  73. package/dist/core/verification.js +0 -323
  74. package/dist/core/verification.js.map +0 -1
@@ -1,580 +0,0 @@
1
- /**
2
- * Authorized Security Assessment Framework
3
- *
4
- * Ethical security testing that requires explicit authorization.
5
- * Focuses on defensive assessment and remediation guidance.
6
- *
7
- * Use cases:
8
- * - Scanning YOUR OWN code for vulnerabilities
9
- * - OWASP-style security checklists
10
- * - Dependency vulnerability analysis
11
- * - Secret detection in codebases you own
12
- * - CTF challenge assistance
13
- */
14
- import { readFileSync, readdirSync, statSync } from 'node:fs';
15
- import { join, extname, relative } from 'node:path';
16
- import { execSync } from 'node:child_process';
17
- // Common vulnerability patterns for static analysis
18
- const VULNERABILITY_PATTERNS = {
19
- // Injection vulnerabilities
20
- sqlInjection: {
21
- patterns: [
22
- /`.*\$\{.*\}.*`.*(?:SELECT|INSERT|UPDATE|DELETE|FROM|WHERE)/gi,
23
- /(?:execute|query|prepare)\s*\(\s*[`'"].*\+/gi,
24
- /\.(?:raw|unsafeRaw)\s*\(/gi,
25
- ],
26
- severity: 'critical',
27
- category: 'Injection',
28
- title: 'Potential SQL Injection',
29
- cwe: 'CWE-89',
30
- owasp: 'A03:2021 Injection',
31
- remediation: 'Use parameterized queries or prepared statements. Never concatenate user input into SQL strings.',
32
- },
33
- commandInjection: {
34
- patterns: [
35
- /exec(?:Sync)?\s*\(\s*[`'"].*\$\{/gi,
36
- /spawn(?:Sync)?\s*\(\s*[`'"].*\$\{/gi,
37
- /child_process.*exec.*\+/gi,
38
- ],
39
- severity: 'critical',
40
- category: 'Injection',
41
- title: 'Potential Command Injection',
42
- cwe: 'CWE-78',
43
- owasp: 'A03:2021 Injection',
44
- remediation: 'Avoid shell commands with user input. Use parameterized APIs or strict input validation.',
45
- },
46
- xss: {
47
- patterns: [
48
- /innerHTML\s*=\s*[^;]*\$/gi,
49
- /dangerouslySetInnerHTML/gi,
50
- /document\.write\s*\(/gi,
51
- /\.html\s*\(\s*[^)]*\$/gi,
52
- ],
53
- severity: 'high',
54
- category: 'XSS',
55
- title: 'Potential Cross-Site Scripting',
56
- cwe: 'CWE-79',
57
- owasp: 'A03:2021 Injection',
58
- remediation: 'Use safe DOM manipulation methods. Sanitize all user input before rendering.',
59
- },
60
- pathTraversal: {
61
- patterns: [
62
- /(?:readFile|writeFile|unlink|rmdir).*\+.*(?:req\.|params\.|query\.)/gi,
63
- /\.\.\/.*\$\{/gi,
64
- /path\.join\s*\([^)]*(?:req\.|params\.|query\.)/gi,
65
- ],
66
- severity: 'high',
67
- category: 'Path Traversal',
68
- title: 'Potential Path Traversal',
69
- cwe: 'CWE-22',
70
- owasp: 'A01:2021 Broken Access Control',
71
- remediation: 'Validate and sanitize file paths. Use path.resolve() and verify paths stay within expected directories.',
72
- },
73
- // Authentication/Authorization
74
- hardcodedCredentials: {
75
- patterns: [
76
- /(?:password|passwd|pwd|secret|api_key|apikey|token)\s*[:=]\s*['"]\w{8,}['"]/gi,
77
- /(?:BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY)/gi,
78
- /(?:aws_access_key_id|aws_secret_access_key)\s*[:=]/gi,
79
- ],
80
- severity: 'critical',
81
- category: 'Secrets',
82
- title: 'Hardcoded Credentials',
83
- cwe: 'CWE-798',
84
- owasp: 'A07:2021 Identification and Authentication Failures',
85
- remediation: 'Use environment variables or secure secret management. Never commit secrets to version control.',
86
- },
87
- weakCrypto: {
88
- patterns: [
89
- /createHash\s*\(\s*['"](?:md5|sha1)['"]\s*\)/gi,
90
- /crypto\.(?:createCipher|createDecipher)\s*\(/gi,
91
- /DES|RC4|Blowfish/gi,
92
- ],
93
- severity: 'medium',
94
- category: 'Cryptography',
95
- title: 'Weak Cryptographic Algorithm',
96
- cwe: 'CWE-327',
97
- owasp: 'A02:2021 Cryptographic Failures',
98
- remediation: 'Use strong algorithms: SHA-256+, AES-256-GCM, bcrypt/argon2 for passwords.',
99
- },
100
- // Insecure configuration
101
- debugEnabled: {
102
- patterns: [
103
- /DEBUG\s*[:=]\s*['"]?true['"]?/gi,
104
- /NODE_ENV\s*[:=]\s*['"]development['"]/gi,
105
- /console\.(?:log|debug|trace)\s*\([^)]*(?:password|token|secret|key)/gi,
106
- ],
107
- severity: 'medium',
108
- category: 'Configuration',
109
- title: 'Debug Mode / Sensitive Logging',
110
- cwe: 'CWE-489',
111
- owasp: 'A05:2021 Security Misconfiguration',
112
- remediation: 'Disable debug mode in production. Never log sensitive data.',
113
- },
114
- corsWildcard: {
115
- patterns: [
116
- /Access-Control-Allow-Origin.*\*/gi,
117
- /cors\s*\(\s*\{[^}]*origin\s*:\s*['"]\*['"]/gi,
118
- /cors\s*\(\s*\)/gi,
119
- ],
120
- severity: 'medium',
121
- category: 'Configuration',
122
- title: 'Overly Permissive CORS',
123
- cwe: 'CWE-942',
124
- owasp: 'A05:2021 Security Misconfiguration',
125
- remediation: 'Restrict CORS to specific trusted origins. Avoid wildcard (*) in production.',
126
- },
127
- // Unsafe patterns
128
- evalUsage: {
129
- patterns: [
130
- /\beval\s*\(/gi,
131
- /new\s+Function\s*\(/gi,
132
- /setTimeout\s*\(\s*['"]/gi,
133
- /setInterval\s*\(\s*['"]/gi,
134
- ],
135
- severity: 'high',
136
- category: 'Code Execution',
137
- title: 'Dynamic Code Execution',
138
- cwe: 'CWE-95',
139
- owasp: 'A03:2021 Injection',
140
- remediation: 'Avoid eval() and new Function(). Use safe alternatives like JSON.parse() for data.',
141
- },
142
- prototypePollutiion: {
143
- patterns: [
144
- /Object\.assign\s*\([^,]+,\s*(?:req\.|params\.|query\.|body\.)/gi,
145
- /\[.*\]\s*=.*(?:req\.|params\.|query\.|body\.)/gi,
146
- /__proto__|constructor\.prototype/gi,
147
- ],
148
- severity: 'high',
149
- category: 'Object Manipulation',
150
- title: 'Potential Prototype Pollution',
151
- cwe: 'CWE-1321',
152
- owasp: 'A03:2021 Injection',
153
- remediation: 'Use Object.create(null) for dictionaries. Validate object keys before assignment.',
154
- },
155
- };
156
- // Secret patterns for detection
157
- const SECRET_PATTERNS = [
158
- { name: 'AWS Access Key', pattern: /AKIA[0-9A-Z]{16}/g },
159
- { name: 'AWS Secret Key', pattern: /[A-Za-z0-9/+=]{40}/g },
160
- { name: 'GitHub Token', pattern: /gh[pousr]_[A-Za-z0-9_]{36,}/g },
161
- { name: 'Slack Token', pattern: /xox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24}/g },
162
- { name: 'Stripe Key', pattern: /sk_live_[0-9a-zA-Z]{24}/g },
163
- { name: 'RSA Private Key', pattern: /-----BEGIN RSA PRIVATE KEY-----/g },
164
- { name: 'Generic API Key', pattern: /(?:api[_-]?key|apikey)\s*[:=]\s*['"][A-Za-z0-9_\-]{20,}['"]/gi },
165
- { name: 'Generic Secret', pattern: /(?:secret|password|passwd)\s*[:=]\s*['"][^'"]{8,}['"]/gi },
166
- { name: 'JWT Token', pattern: /eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*/g },
167
- { name: 'NPM Token', pattern: /npm_[A-Za-z0-9]{36}/g },
168
- ];
169
- /**
170
- * Verify authorization before any security testing
171
- */
172
- export function verifyAuthorization(context, targetPath) {
173
- if (!context.ownershipConfirmed) {
174
- return {
175
- authorized: false,
176
- reason: 'You must confirm ownership/permission before security testing.',
177
- };
178
- }
179
- // Check if target is within authorized scope
180
- const isInScope = context.authorizedScope.some((scope) => {
181
- if (scope.startsWith('/')) {
182
- return targetPath.startsWith(scope);
183
- }
184
- return targetPath.includes(scope);
185
- });
186
- if (!isInScope) {
187
- return {
188
- authorized: false,
189
- reason: `Target "${targetPath}" is not within authorized scope: ${context.authorizedScope.join(', ')}`,
190
- };
191
- }
192
- // Check authorization is recent (within 24 hours)
193
- const hoursSinceAuth = (Date.now() - context.authorizedAt.getTime()) / (1000 * 60 * 60);
194
- if (hoursSinceAuth > 24) {
195
- return {
196
- authorized: false,
197
- reason: 'Authorization expired. Please re-authorize (valid for 24 hours).',
198
- };
199
- }
200
- return { authorized: true };
201
- }
202
- /**
203
- * Scan source code for vulnerabilities
204
- */
205
- export function scanSourceCode(directory, context) {
206
- const authCheck = verifyAuthorization(context, directory);
207
- if (!authCheck.authorized) {
208
- return {
209
- success: false,
210
- scanType: 'source-code',
211
- scope: [directory],
212
- timestamp: new Date(),
213
- findings: [],
214
- summary: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },
215
- recommendations: [authCheck.reason ?? 'Authorization failed'],
216
- };
217
- }
218
- const findings = [];
219
- const extensions = ['.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs'];
220
- function scanFile(filePath) {
221
- const ext = extname(filePath);
222
- if (!extensions.includes(ext))
223
- return;
224
- let content;
225
- try {
226
- content = readFileSync(filePath, 'utf-8');
227
- }
228
- catch {
229
- return;
230
- }
231
- const lines = content.split('\n');
232
- for (const [vulnName, vulnConfig] of Object.entries(VULNERABILITY_PATTERNS)) {
233
- for (const pattern of vulnConfig.patterns) {
234
- const matches = content.matchAll(new RegExp(pattern.source, pattern.flags));
235
- for (const match of matches) {
236
- const lineNumber = content.substring(0, match.index ?? 0).split('\n').length;
237
- const snippetLine = lines[lineNumber - 1] ?? '';
238
- findings.push({
239
- id: `${vulnName}-${filePath}-${lineNumber}`,
240
- severity: vulnConfig.severity,
241
- category: vulnConfig.category,
242
- title: vulnConfig.title,
243
- description: `Found pattern matching potential ${vulnConfig.title.toLowerCase()}.`,
244
- location: {
245
- file: relative(directory, filePath),
246
- line: lineNumber,
247
- snippet: snippetLine.trim().substring(0, 100),
248
- },
249
- remediation: vulnConfig.remediation,
250
- references: [
251
- `https://cwe.mitre.org/data/definitions/${vulnConfig.cwe?.replace('CWE-', '')}.html`,
252
- ],
253
- cwe: vulnConfig.cwe,
254
- owasp: vulnConfig.owasp,
255
- });
256
- }
257
- }
258
- }
259
- }
260
- function scanDirectory(dir) {
261
- const entries = readdirSync(dir);
262
- for (const entry of entries) {
263
- if (entry === 'node_modules' || entry === '.git' || entry === 'dist')
264
- continue;
265
- const fullPath = join(dir, entry);
266
- const stat = statSync(fullPath);
267
- if (stat.isDirectory()) {
268
- scanDirectory(fullPath);
269
- }
270
- else {
271
- scanFile(fullPath);
272
- }
273
- }
274
- }
275
- scanDirectory(directory);
276
- const summary = {
277
- critical: findings.filter((f) => f.severity === 'critical').length,
278
- high: findings.filter((f) => f.severity === 'high').length,
279
- medium: findings.filter((f) => f.severity === 'medium').length,
280
- low: findings.filter((f) => f.severity === 'low').length,
281
- info: findings.filter((f) => f.severity === 'info').length,
282
- };
283
- return {
284
- success: true,
285
- scanType: 'source-code',
286
- scope: [directory],
287
- timestamp: new Date(),
288
- findings,
289
- summary,
290
- recommendations: generateRecommendations(findings),
291
- };
292
- }
293
- /**
294
- * Scan for hardcoded secrets
295
- */
296
- export function scanSecrets(directory, context) {
297
- const authCheck = verifyAuthorization(context, directory);
298
- if (!authCheck.authorized) {
299
- return {
300
- success: false,
301
- scanType: 'secret-detection',
302
- scope: [directory],
303
- timestamp: new Date(),
304
- findings: [],
305
- summary: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },
306
- recommendations: [authCheck.reason ?? 'Authorization failed'],
307
- };
308
- }
309
- const findings = [];
310
- const extensions = ['.js', '.ts', '.jsx', '.tsx', '.json', '.env', '.yml', '.yaml', '.conf', '.config'];
311
- function scanFile(filePath) {
312
- const ext = extname(filePath);
313
- const basename = filePath.split('/').pop() ?? '';
314
- // Include .env files and config files
315
- if (!extensions.includes(ext) && !basename.startsWith('.env') && !basename.includes('config')) {
316
- return;
317
- }
318
- let content;
319
- try {
320
- content = readFileSync(filePath, 'utf-8');
321
- }
322
- catch {
323
- return;
324
- }
325
- const lines = content.split('\n');
326
- for (const secretPattern of SECRET_PATTERNS) {
327
- const matches = content.matchAll(new RegExp(secretPattern.pattern.source, secretPattern.pattern.flags));
328
- for (const match of matches) {
329
- const lineNumber = content.substring(0, match.index ?? 0).split('\n').length;
330
- const snippetLine = lines[lineNumber - 1] ?? '';
331
- // Mask the secret in the output
332
- const masked = `${match[0].substring(0, 8)}...[REDACTED]`;
333
- findings.push({
334
- id: `secret-${filePath}-${lineNumber}`,
335
- severity: 'critical',
336
- category: 'Secrets',
337
- title: `Potential ${secretPattern.name}`,
338
- description: `Found what appears to be a ${secretPattern.name} in source code.`,
339
- location: {
340
- file: relative(directory, filePath),
341
- line: lineNumber,
342
- snippet: snippetLine.replace(match[0], masked).trim().substring(0, 100),
343
- },
344
- remediation: 'Remove secret from source code. Use environment variables or a secret management service.',
345
- references: [
346
- 'https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/',
347
- ],
348
- cwe: 'CWE-798',
349
- owasp: 'A07:2021',
350
- });
351
- }
352
- }
353
- }
354
- function scanDirectory(dir) {
355
- const entries = readdirSync(dir);
356
- for (const entry of entries) {
357
- if (entry === 'node_modules' || entry === '.git')
358
- continue;
359
- const fullPath = join(dir, entry);
360
- const stat = statSync(fullPath);
361
- if (stat.isDirectory()) {
362
- scanDirectory(fullPath);
363
- }
364
- else {
365
- scanFile(fullPath);
366
- }
367
- }
368
- }
369
- scanDirectory(directory);
370
- const summary = {
371
- critical: findings.filter((f) => f.severity === 'critical').length,
372
- high: findings.filter((f) => f.severity === 'high').length,
373
- medium: findings.filter((f) => f.severity === 'medium').length,
374
- low: findings.filter((f) => f.severity === 'low').length,
375
- info: findings.filter((f) => f.severity === 'info').length,
376
- };
377
- return {
378
- success: true,
379
- scanType: 'secret-detection',
380
- scope: [directory],
381
- timestamp: new Date(),
382
- findings,
383
- summary,
384
- recommendations: generateRecommendations(findings),
385
- };
386
- }
387
- /**
388
- * Scan npm dependencies for vulnerabilities
389
- */
390
- export function scanDependencies(directory, context) {
391
- const authCheck = verifyAuthorization(context, directory);
392
- if (!authCheck.authorized) {
393
- return {
394
- success: false,
395
- scanType: 'dependency-scan',
396
- scope: [directory],
397
- timestamp: new Date(),
398
- findings: [],
399
- summary: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },
400
- recommendations: [authCheck.reason ?? 'Authorization failed'],
401
- };
402
- }
403
- const findings = [];
404
- try {
405
- const auditOutput = execSync('npm audit --json', {
406
- cwd: directory,
407
- encoding: 'utf-8',
408
- stdio: ['pipe', 'pipe', 'pipe'],
409
- });
410
- const audit = JSON.parse(auditOutput);
411
- if (audit.vulnerabilities) {
412
- for (const [pkgName, vuln] of Object.entries(audit.vulnerabilities)) {
413
- const v = vuln;
414
- findings.push({
415
- id: `dep-${pkgName}`,
416
- severity: v.severity,
417
- category: 'Dependencies',
418
- title: `Vulnerable Dependency: ${pkgName}`,
419
- description: v.via
420
- .filter((x) => typeof x === 'object' && 'title' in x)
421
- .map((x) => x.title)
422
- .join(', '),
423
- location: { file: 'package.json' },
424
- remediation: v.fixAvailable
425
- ? typeof v.fixAvailable === 'object'
426
- ? `Update to ${v.fixAvailable.name}@${v.fixAvailable.version}`
427
- : 'Run npm audit fix'
428
- : 'No fix available - consider finding alternative package',
429
- references: v.via
430
- .filter((x) => typeof x === 'object' && 'url' in x)
431
- .map((x) => x.url),
432
- cwe: v.via
433
- .filter((x) => typeof x === 'object' && 'cwe' in x)
434
- .flatMap((x) => x.cwe)
435
- .join(', '),
436
- });
437
- }
438
- }
439
- }
440
- catch (error) {
441
- // npm audit returns non-zero if vulnerabilities found
442
- const message = error instanceof Error ? error.message : String(error);
443
- if (message.includes('ENOENT') || message.includes('package.json')) {
444
- return {
445
- success: false,
446
- scanType: 'dependency-scan',
447
- scope: [directory],
448
- timestamp: new Date(),
449
- findings: [],
450
- summary: { critical: 0, high: 0, medium: 0, low: 0, info: 0 },
451
- recommendations: ['No package.json found in directory'],
452
- };
453
- }
454
- // Try to parse the output anyway
455
- try {
456
- const stdout = error.stdout;
457
- if (stdout) {
458
- const audit = JSON.parse(stdout);
459
- // Process audit output...
460
- }
461
- }
462
- catch {
463
- // Ignore parse errors
464
- }
465
- }
466
- const summary = {
467
- critical: findings.filter((f) => f.severity === 'critical').length,
468
- high: findings.filter((f) => f.severity === 'high').length,
469
- medium: findings.filter((f) => f.severity === 'medium').length,
470
- low: findings.filter((f) => f.severity === 'low').length,
471
- info: findings.filter((f) => f.severity === 'info').length,
472
- };
473
- return {
474
- success: true,
475
- scanType: 'dependency-scan',
476
- scope: [directory],
477
- timestamp: new Date(),
478
- findings,
479
- summary,
480
- recommendations: generateRecommendations(findings),
481
- };
482
- }
483
- /**
484
- * Generate remediation recommendations
485
- */
486
- function generateRecommendations(findings) {
487
- const recommendations = [];
488
- if (findings.some((f) => f.category === 'Secrets')) {
489
- recommendations.push('Immediately rotate all exposed secrets and remove from source code.');
490
- recommendations.push('Use environment variables or a secret management service (e.g., AWS Secrets Manager, HashiCorp Vault).');
491
- recommendations.push('Add .env files to .gitignore to prevent future commits.');
492
- }
493
- if (findings.some((f) => f.category === 'Injection')) {
494
- recommendations.push('Review all database queries and use parameterized queries exclusively.');
495
- recommendations.push('Implement input validation on all user-controlled data.');
496
- recommendations.push('Use ORMs with built-in SQL injection protection.');
497
- }
498
- if (findings.some((f) => f.category === 'XSS')) {
499
- recommendations.push('Implement Content Security Policy (CSP) headers.');
500
- recommendations.push('Use templating engines with automatic escaping.');
501
- recommendations.push('Sanitize all user input before rendering in the DOM.');
502
- }
503
- if (findings.some((f) => f.category === 'Dependencies')) {
504
- recommendations.push('Run npm audit fix to automatically fix vulnerabilities.');
505
- recommendations.push('Update outdated dependencies regularly.');
506
- recommendations.push('Consider using npm ci in CI/CD pipelines for reproducible builds.');
507
- }
508
- if (recommendations.length === 0) {
509
- recommendations.push('No immediate actions required. Continue regular security reviews.');
510
- }
511
- return recommendations;
512
- }
513
- /**
514
- * Format assessment results for display
515
- */
516
- export function formatAssessmentReport(result) {
517
- const lines = [];
518
- lines.push('');
519
- lines.push('='.repeat(60));
520
- lines.push(' SECURITY ASSESSMENT REPORT');
521
- lines.push('='.repeat(60));
522
- lines.push('');
523
- lines.push(`Scan Type: ${result.scanType}`);
524
- lines.push(`Scope: ${result.scope.join(', ')}`);
525
- lines.push(`Timestamp: ${result.timestamp.toISOString()}`);
526
- lines.push('');
527
- lines.push('-'.repeat(60));
528
- lines.push(' SUMMARY');
529
- lines.push('-'.repeat(60));
530
- lines.push(` Critical: ${result.summary.critical}`);
531
- lines.push(` High: ${result.summary.high}`);
532
- lines.push(` Medium: ${result.summary.medium}`);
533
- lines.push(` Low: ${result.summary.low}`);
534
- lines.push(` Info: ${result.summary.info}`);
535
- lines.push('');
536
- if (result.findings.length > 0) {
537
- lines.push('-'.repeat(60));
538
- lines.push(' FINDINGS');
539
- lines.push('-'.repeat(60));
540
- for (const finding of result.findings) {
541
- lines.push('');
542
- lines.push(` [${finding.severity.toUpperCase()}] ${finding.title}`);
543
- lines.push(` Category: ${finding.category}`);
544
- if (finding.location.file) {
545
- lines.push(` Location: ${finding.location.file}:${finding.location.line}`);
546
- }
547
- if (finding.location.snippet) {
548
- lines.push(` Snippet: ${finding.location.snippet}`);
549
- }
550
- lines.push(` ${finding.description}`);
551
- lines.push(` Remediation: ${finding.remediation}`);
552
- if (finding.cwe)
553
- lines.push(` CWE: ${finding.cwe}`);
554
- if (finding.owasp)
555
- lines.push(` OWASP: ${finding.owasp}`);
556
- }
557
- }
558
- lines.push('');
559
- lines.push('-'.repeat(60));
560
- lines.push(' RECOMMENDATIONS');
561
- lines.push('-'.repeat(60));
562
- for (const rec of result.recommendations) {
563
- lines.push(` * ${rec}`);
564
- }
565
- lines.push('');
566
- lines.push('='.repeat(60));
567
- return lines.join('\n');
568
- }
569
- /**
570
- * Create authorization context (requires user confirmation)
571
- */
572
- export function createAuthorizationContext(scope, testingType) {
573
- return {
574
- ownershipConfirmed: true, // User must explicitly call this
575
- authorizedScope: scope,
576
- authorizedAt: new Date(),
577
- testingType,
578
- };
579
- }
580
- //# sourceMappingURL=securityAssessment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityAssessment.js","sourceRoot":"","sources":["../../src/core/securityAssessment.ts"],"names":[],"mappings":"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"}