secure-scan 1.2.3 → 1.2.5

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 (48) hide show
  1. package/README.md +85 -317
  2. package/aur/.SRCINFO +11 -0
  3. package/aur/PKGBUILD +28 -0
  4. package/debian/changelog +10 -0
  5. package/debian/compat +1 -0
  6. package/debian/control +16 -0
  7. package/debian/rules +17 -0
  8. package/dist/cli/index.js +109 -9
  9. package/dist/cli/index.js.map +1 -1
  10. package/docs/V1.2.1-IA_Performances.md +2 -2
  11. package/package.json +2 -2
  12. package/secure-scan.config.json +2 -16
  13. package/src/cli/index.ts +117 -9
  14. package/dist/core/engine/index.d.ts +0 -5
  15. package/dist/core/engine/index.d.ts.map +0 -1
  16. package/dist/core/engine/index.js +0 -21
  17. package/dist/core/engine/index.js.map +0 -1
  18. package/dist/core/engine/ruleEngine.d.ts +0 -46
  19. package/dist/core/engine/ruleEngine.d.ts.map +0 -1
  20. package/dist/core/engine/ruleEngine.js +0 -173
  21. package/dist/core/engine/ruleEngine.js.map +0 -1
  22. package/dist/core/index.d.ts +0 -8
  23. package/dist/core/index.d.ts.map +0 -1
  24. package/dist/core/index.js +0 -24
  25. package/dist/core/index.js.map +0 -1
  26. package/dist/core/scanner/fileScanner.d.ts +0 -31
  27. package/dist/core/scanner/fileScanner.d.ts.map +0 -1
  28. package/dist/core/scanner/fileScanner.js +0 -199
  29. package/dist/core/scanner/fileScanner.js.map +0 -1
  30. package/dist/core/scanner/index.d.ts +0 -5
  31. package/dist/core/scanner/index.d.ts.map +0 -1
  32. package/dist/core/scanner/index.js +0 -21
  33. package/dist/core/scanner/index.js.map +0 -1
  34. package/dist/core/scoring/index.d.ts +0 -5
  35. package/dist/core/scoring/index.d.ts.map +0 -1
  36. package/dist/core/scoring/index.js +0 -21
  37. package/dist/core/scoring/index.js.map +0 -1
  38. package/dist/core/scoring/riskScoring.d.ts +0 -49
  39. package/dist/core/scoring/riskScoring.d.ts.map +0 -1
  40. package/dist/core/scoring/riskScoring.js +0 -180
  41. package/dist/core/scoring/riskScoring.js.map +0 -1
  42. package/dist/core/securityScanner.d.ts +0 -47
  43. package/dist/core/securityScanner.d.ts.map +0 -1
  44. package/dist/core/securityScanner.js +0 -298
  45. package/dist/core/securityScanner.js.map +0 -1
  46. package/reporte-test.html +0 -5036
  47. package/src/analyzers/javascript/PROMPT_JS_ANALYZER.md +0 -267
  48. package/src/rules/malware/INFO.md +0 -287
@@ -1,298 +0,0 @@
1
- "use strict";
2
- /**
3
- * Security Scanner Orchestrator
4
- * Main scanner that coordinates all analyzers
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.SecurityScanner = void 0;
41
- const path = __importStar(require("path"));
42
- const fs = __importStar(require("fs"));
43
- const types_1 = require("../types");
44
- const scanner_1 = require("../core/scanner");
45
- const engine_1 = require("../core/engine");
46
- const scoring_1 = require("../core/scoring");
47
- const rules_1 = require("../rules");
48
- const analyzers_1 = require("../analyzers");
49
- const ai_1 = require("../ai");
50
- const reports_1 = require("../reports");
51
- const utils_1 = require("../utils");
52
- const logger_1 = require("../utils/logger");
53
- /**
54
- * Security Scanner Class
55
- * Main orchestrator for the SAST tool
56
- */
57
- class SecurityScanner {
58
- config;
59
- fileScanner;
60
- ruleEngine;
61
- riskScoring;
62
- aiAnalyzer;
63
- constructor(config) {
64
- this.config = this.normalizeConfig(config);
65
- this.fileScanner = new scanner_1.FileScanner(this.config);
66
- this.ruleEngine = new engine_1.RuleEngine();
67
- this.riskScoring = new scoring_1.RiskScoringEngine();
68
- // Initialize AI analyzer if configured
69
- if (this.config.useAI && this.config.aiConfig) {
70
- this.aiAnalyzer = new ai_1.AIAnalyzer(this.config.aiConfig);
71
- }
72
- }
73
- /**
74
- * Normalize and validate configuration
75
- */
76
- normalizeConfig(config) {
77
- return {
78
- ...config,
79
- projectPath: path.resolve(config.projectPath),
80
- exclude: config.exclude || [],
81
- minSeverity: config.minSeverity || types_1.Severity.INFO,
82
- verbose: config.verbose || false,
83
- maxFileSize: config.maxFileSize || 5 * 1024 * 1024,
84
- fileTimeout: config.fileTimeout || 30000
85
- };
86
- }
87
- /**
88
- * Run the security scan
89
- */
90
- async scan() {
91
- const startTime = Date.now();
92
- const scanId = (0, utils_1.generateId)();
93
- (0, logger_1.logScanStart)(this.config.projectPath);
94
- try {
95
- // Initialize analyzers
96
- await (0, analyzers_1.initializeAnalyzers)();
97
- // Log available analyzers and their versions
98
- const allAnalyzers = (0, analyzers_1.getAllAnalyzers)();
99
- logger_1.logger.info(`🔧 Loaded ${allAnalyzers.length} security analyzers:`);
100
- for (const analyzer of allAnalyzers) {
101
- logger_1.logger.info(` • ${analyzer.name} v${analyzer.version} (${analyzer.languages.join(', ')})`);
102
- }
103
- if (this.aiAnalyzer) {
104
- await this.aiAnalyzer.initialize();
105
- }
106
- // Load rules
107
- const rules = (0, rules_1.getEnabledRules)();
108
- this.ruleEngine.loadRules(rules);
109
- // Scan files
110
- logger_1.logger.info('📂 Scanning project files...');
111
- const files = await this.fileScanner.scan();
112
- if (files.length === 0) {
113
- logger_1.logger.warn('⚠️ No files found to analyze');
114
- return this.createEmptyResult(scanId, startTime);
115
- }
116
- // Analyze files
117
- logger_1.logger.info('🔍 Analyzing code for vulnerabilities and malware...');
118
- const allFindings = [];
119
- for (let i = 0; i < files.length; i++) {
120
- const file = files[i];
121
- if (this.config.verbose) {
122
- logger_1.logger.debug(`Analyzing: ${file.relativePath}`);
123
- }
124
- try {
125
- const fileFindings = await this.analyzeFile(file);
126
- allFindings.push(...fileFindings);
127
- // Log critical findings immediately
128
- for (const finding of fileFindings) {
129
- if (finding.severity === types_1.Severity.CRITICAL || finding.severity === types_1.Severity.HIGH || finding.category === types_1.FindingCategory.MALWARE) {
130
- (0, logger_1.logFinding)(finding.severity, finding.title, finding.location.file, finding.location.startLine, finding.category);
131
- }
132
- }
133
- }
134
- catch (error) {
135
- logger_1.logger.debug(`Error analyzing ${file.relativePath}: ${error}`);
136
- }
137
- }
138
- // Deduplicate findings
139
- const uniqueFindings = this.ruleEngine.deduplicateFindings(allFindings);
140
- // Filter by minimum severity
141
- const filteredFindings = this.filterBySeverity(uniqueFindings);
142
- // Sort by severity
143
- const sortedFindings = this.ruleEngine.sortBySeverity(filteredFindings);
144
- // Calculate statistics
145
- const endTime = Date.now();
146
- const stats = this.calculateStats(files, sortedFindings, startTime, endTime);
147
- // Calculate risk score
148
- const riskScore = this.riskScoring.calculateRiskScore(sortedFindings, files.length);
149
- const riskLevel = this.riskScoring.getRiskLevel(riskScore);
150
- // Create result
151
- const result = {
152
- projectPath: this.config.projectPath,
153
- projectName: path.basename(this.config.projectPath),
154
- scanId,
155
- findings: sortedFindings,
156
- stats,
157
- riskScore,
158
- riskLevel,
159
- scannedFiles: files,
160
- config: this.config
161
- };
162
- (0, logger_1.logScanComplete)(stats.totalFiles, sortedFindings.length, stats.duration, riskScore);
163
- // Generate report if output path specified
164
- if (this.config.outputPath) {
165
- await this.generateReport(result);
166
- }
167
- // Cleanup
168
- await (0, analyzers_1.cleanupAnalyzers)();
169
- return result;
170
- }
171
- catch (error) {
172
- logger_1.logger.error(`Scan failed: ${error}`);
173
- throw error;
174
- }
175
- }
176
- /**
177
- * Analyze a single file
178
- */
179
- async analyzeFile(file) {
180
- const findings = [];
181
- // Skip if no language detected
182
- if (!file.language) {
183
- return findings;
184
- }
185
- // Get language-specific analyzer
186
- const analyzer = (0, analyzers_1.getAnalyzerForLanguage)(file.language);
187
- if (analyzer) {
188
- // Log analyzer version being used
189
- if (this.config.verbose) {
190
- logger_1.logger.debug(`Using ${analyzer.name} v${analyzer.version} for ${file.relativePath}`);
191
- }
192
- const rules = (0, rules_1.getEnabledRules)().filter(r => r.languages.includes(file.language));
193
- const analyzerFindings = await analyzer.analyze(file, rules);
194
- findings.push(...analyzerFindings);
195
- }
196
- // Run rule engine for generic patterns
197
- const ruleFindings = await this.ruleEngine.analyzeFile(file);
198
- findings.push(...ruleFindings);
199
- // AI analysis if enabled
200
- if (this.aiAnalyzer && this.config.useAI) {
201
- const aiResult = await this.aiAnalyzer.analyze(file);
202
- findings.push(...aiResult.findings);
203
- }
204
- return findings;
205
- }
206
- /**
207
- * Filter findings by minimum severity
208
- */
209
- filterBySeverity(findings) {
210
- if (!this.config.minSeverity) {
211
- return findings;
212
- }
213
- return findings.filter(f => (0, utils_1.isHigherOrEqualSeverity)(f.severity, this.config.minSeverity));
214
- }
215
- /**
216
- * Calculate scan statistics
217
- */
218
- calculateStats(files, findings, startTime, endTime) {
219
- const totalLines = files.reduce((sum, f) => sum + f.lineCount, 0);
220
- const filesByLanguage = {};
221
- for (const file of files) {
222
- const lang = file.language || 'unknown';
223
- filesByLanguage[lang] = (filesByLanguage[lang] || 0) + 1;
224
- }
225
- const findingsBySeverity = this.riskScoring.getSeverityDistribution(findings);
226
- const findingsByCategory = this.riskScoring.getCategoryDistribution(findings);
227
- return {
228
- totalFiles: files.length,
229
- totalLines,
230
- filesByLanguage,
231
- findingsBySeverity,
232
- findingsByCategory,
233
- duration: endTime - startTime,
234
- startTime: new Date(startTime),
235
- endTime: new Date(endTime)
236
- };
237
- }
238
- /**
239
- * Create empty result when no files found
240
- */
241
- createEmptyResult(scanId, startTime) {
242
- const endTime = Date.now();
243
- return {
244
- projectPath: this.config.projectPath,
245
- projectName: path.basename(this.config.projectPath),
246
- scanId,
247
- findings: [],
248
- stats: {
249
- totalFiles: 0,
250
- totalLines: 0,
251
- filesByLanguage: {},
252
- findingsBySeverity: {
253
- [types_1.Severity.CRITICAL]: 0,
254
- [types_1.Severity.HIGH]: 0,
255
- [types_1.Severity.MEDIUM]: 0,
256
- [types_1.Severity.LOW]: 0,
257
- [types_1.Severity.INFO]: 0
258
- },
259
- findingsByCategory: {
260
- [types_1.FindingCategory.MALWARE]: 0,
261
- [types_1.FindingCategory.VULNERABILITY]: 0,
262
- [types_1.FindingCategory.CODE_SMELL]: 0,
263
- [types_1.FindingCategory.BEST_PRACTICE]: 0
264
- },
265
- duration: endTime - startTime,
266
- startTime: new Date(startTime),
267
- endTime: new Date(endTime)
268
- },
269
- riskScore: 0,
270
- riskLevel: 'safe',
271
- scannedFiles: [],
272
- config: this.config
273
- };
274
- }
275
- /**
276
- * Generate report
277
- */
278
- async generateReport(result) {
279
- if (!this.config.outputPath)
280
- return;
281
- const outputPath = path.resolve(this.config.outputPath);
282
- const ext = path.extname(outputPath).toLowerCase();
283
- if (ext === '.html' || ext === '') {
284
- // Pass the language configuration to the report generator
285
- const reportLanguage = this.config.language || 'es';
286
- const reportGenerator = new reports_1.HtmlReportGenerator(reportLanguage);
287
- const finalPath = ext === '' ? `${outputPath}.html` : outputPath;
288
- await reportGenerator.saveReport(result, finalPath);
289
- }
290
- else if (ext === '.json') {
291
- fs.writeFileSync(outputPath, JSON.stringify(result, null, 2), 'utf-8');
292
- logger_1.logger.info(`📁 Reporte JSON guardado en: ${outputPath}`);
293
- }
294
- }
295
- }
296
- exports.SecurityScanner = SecurityScanner;
297
- exports.default = SecurityScanner;
298
- //# sourceMappingURL=securityScanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityScanner.js","sourceRoot":"","sources":["../../src/core/securityScanner.ts"],"names":[],"mappings":"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"}