-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaudit-scan.js
More file actions
71 lines (59 loc) · 2.68 KB
/
audit-scan.js
File metadata and controls
71 lines (59 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const fs = require('fs');
const path = require('path');
console.log("==================================================");
console.log("🛡️ SMARTbrain Activity - Security & Audit Scan");
console.log("==================================================\n");
const baseDir = path.resolve(__dirname, '..');
// Las rutas en las que buscar archivos .js o .puml (ejemplo restrictivo)
const targetDirs = [
path.join(baseDir, 'scripts'),
path.join(baseDir, 'markmap-generator', 'scripts'),
path.join(baseDir, 'plantuml-architect', 'scripts')
];
let vulnerabilities = 0;
let filesScanned = 0;
// Patrones maliciosos comunes en JS que no deberían estar en scripts de terminal limpios
const blacklistedPatterns = [
{ regex: /eval\s*\(/g, name: "Uso de eval() detectado (Arbitrary Code Execution)" },
{ regex: /setTimeout\s*\(\s*['"]/g, name: "setTimeout con Strings (Equivalente a eval)" },
{ regex: /setInterval\s*\(\s*['"]/g, name: "setInterval con Strings (Equivalente a eval)" },
{ regex: /require\s*\(\s*['"](?:http|https)/g, name: "Requisición HTTP directa detectada (Riesgo de descarga externa)" },
{ regex: /child_process.*(rm\s+-rf|del\s+\/f|format)/gi, name: "Comandos destructivos en shell detectados (rm -rf, format, del)" }
];
function scanFile(filePath) {
if (!fs.existsSync(filePath)) return;
if (path.basename(filePath) === 'audit-scan.js') return; // Excluir al propio auditor para evitar falsos positivos con sus RegEx
filesScanned++;
const content = fs.readFileSync(filePath, 'utf8');
let fileIsClean = true;
blacklistedPatterns.forEach(pattern => {
if (pattern.regex.test(content)) {
vulnerabilities++;
fileIsClean = false;
console.error(`[🚨 WARNING] ${path.basename(filePath)} -> ${pattern.name}`);
}
});
if (fileIsClean) {
console.log(`[PASS] ${path.basename(filePath)} verificado: Limpio.`);
}
}
console.log("Iniciando escaneo estático de scripts (Snyk/Audit Style)...\n");
targetDirs.forEach(dir => {
if (fs.existsSync(dir)) {
const files = fs.readdirSync(dir);
files.forEach(file => {
if (file.endsWith('.js')) {
scanFile(path.join(dir, file));
}
});
}
});
console.log("\n==================================================");
if (vulnerabilities === 0) {
console.log(`✅ AUDITORÍA APROBADA: 0 vulnerabilidades críticas encontradas en ${filesScanned} archivos.`);
console.log("Este repositorio es considerado SEGURO para su ejecución local.");
process.exit(0);
} else {
console.error(`❌ AUDITORÍA FALLIDA: ${vulnerabilities} vulnerabilidades críticas detectadas.`);
process.exit(1);
}