secure-scan 1.2.2
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 +564 -0
- package/dist/ai/aiAnalyzer.d.ts +99 -0
- package/dist/ai/aiAnalyzer.d.ts.map +1 -0
- package/dist/ai/aiAnalyzer.js +669 -0
- package/dist/ai/aiAnalyzer.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +21 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/analyzers/base/baseAnalyzer.d.ts +44 -0
- package/dist/analyzers/base/baseAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/base/baseAnalyzer.js +53 -0
- package/dist/analyzers/base/baseAnalyzer.js.map +1 -0
- package/dist/analyzers/base/index.d.ts +5 -0
- package/dist/analyzers/base/index.d.ts.map +1 -0
- package/dist/analyzers/base/index.js +21 -0
- package/dist/analyzers/base/index.js.map +1 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.d.ts +60 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.js +218 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.js.map +1 -0
- package/dist/analyzers/c-cpp/index.d.ts +5 -0
- package/dist/analyzers/c-cpp/index.d.ts.map +1 -0
- package/dist/analyzers/c-cpp/index.js +21 -0
- package/dist/analyzers/c-cpp/index.js.map +1 -0
- package/dist/analyzers/core/engine/index.d.ts +5 -0
- package/dist/analyzers/core/engine/index.d.ts.map +1 -0
- package/dist/analyzers/core/engine/index.js +21 -0
- package/dist/analyzers/core/engine/index.js.map +1 -0
- package/dist/analyzers/core/engine/ruleEngine.d.ts +46 -0
- package/dist/analyzers/core/engine/ruleEngine.d.ts.map +1 -0
- package/dist/analyzers/core/engine/ruleEngine.js +173 -0
- package/dist/analyzers/core/engine/ruleEngine.js.map +1 -0
- package/dist/analyzers/core/index.d.ts +8 -0
- package/dist/analyzers/core/index.d.ts.map +1 -0
- package/dist/analyzers/core/index.js +24 -0
- package/dist/analyzers/core/index.js.map +1 -0
- package/dist/analyzers/core/scanner/fileScanner.d.ts +31 -0
- package/dist/analyzers/core/scanner/fileScanner.d.ts.map +1 -0
- package/dist/analyzers/core/scanner/fileScanner.js +199 -0
- package/dist/analyzers/core/scanner/fileScanner.js.map +1 -0
- package/dist/analyzers/core/scanner/index.d.ts +5 -0
- package/dist/analyzers/core/scanner/index.d.ts.map +1 -0
- package/dist/analyzers/core/scanner/index.js +21 -0
- package/dist/analyzers/core/scanner/index.js.map +1 -0
- package/dist/analyzers/core/scoring/index.d.ts +5 -0
- package/dist/analyzers/core/scoring/index.d.ts.map +1 -0
- package/dist/analyzers/core/scoring/index.js +21 -0
- package/dist/analyzers/core/scoring/index.js.map +1 -0
- package/dist/analyzers/core/scoring/riskScoring.d.ts +49 -0
- package/dist/analyzers/core/scoring/riskScoring.d.ts.map +1 -0
- package/dist/analyzers/core/scoring/riskScoring.js +180 -0
- package/dist/analyzers/core/scoring/riskScoring.js.map +1 -0
- package/dist/analyzers/core/securityScanner.d.ts +47 -0
- package/dist/analyzers/core/securityScanner.d.ts.map +1 -0
- package/dist/analyzers/core/securityScanner.js +298 -0
- package/dist/analyzers/core/securityScanner.js.map +1 -0
- package/dist/analyzers/csharp/csharpAnalyzer.d.ts +64 -0
- package/dist/analyzers/csharp/csharpAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/csharp/csharpAnalyzer.js +232 -0
- package/dist/analyzers/csharp/csharpAnalyzer.js.map +1 -0
- package/dist/analyzers/csharp/index.d.ts +5 -0
- package/dist/analyzers/csharp/index.d.ts.map +1 -0
- package/dist/analyzers/csharp/index.js +21 -0
- package/dist/analyzers/csharp/index.js.map +1 -0
- package/dist/analyzers/iac/iacAnalyzer.d.ts +36 -0
- package/dist/analyzers/iac/iacAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/iac/iacAnalyzer.js +182 -0
- package/dist/analyzers/iac/iacAnalyzer.js.map +1 -0
- package/dist/analyzers/iac/index.d.ts +5 -0
- package/dist/analyzers/iac/index.d.ts.map +1 -0
- package/dist/analyzers/iac/index.js +21 -0
- package/dist/analyzers/iac/index.js.map +1 -0
- package/dist/analyzers/index.d.ts +30 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +80 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/java/index.d.ts +5 -0
- package/dist/analyzers/java/index.d.ts.map +1 -0
- package/dist/analyzers/java/index.js +21 -0
- package/dist/analyzers/java/index.js.map +1 -0
- package/dist/analyzers/java/javaAnalyzer.d.ts +64 -0
- package/dist/analyzers/java/javaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/java/javaAnalyzer.js +224 -0
- package/dist/analyzers/java/javaAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/astUtils.d.ts +170 -0
- package/dist/analyzers/javascript/astUtils.d.ts.map +1 -0
- package/dist/analyzers/javascript/astUtils.js +700 -0
- package/dist/analyzers/javascript/astUtils.js.map +1 -0
- package/dist/analyzers/javascript/index.d.ts +18 -0
- package/dist/analyzers/javascript/index.d.ts.map +1 -0
- package/dist/analyzers/javascript/index.js +50 -0
- package/dist/analyzers/javascript/index.js.map +1 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.d.ts +111 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.js +860 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/malwareDetector.d.ts +102 -0
- package/dist/analyzers/javascript/malwareDetector.d.ts.map +1 -0
- package/dist/analyzers/javascript/malwareDetector.js +616 -0
- package/dist/analyzers/javascript/malwareDetector.js.map +1 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts +87 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.js +553 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/taintAnalyzer.d.ts +120 -0
- package/dist/analyzers/javascript/taintAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/taintAnalyzer.js +526 -0
- package/dist/analyzers/javascript/taintAnalyzer.js.map +1 -0
- package/dist/analyzers/php/index.d.ts +5 -0
- package/dist/analyzers/php/index.d.ts.map +1 -0
- package/dist/analyzers/php/index.js +21 -0
- package/dist/analyzers/php/index.js.map +1 -0
- package/dist/analyzers/php/phpAnalyzer.d.ts +56 -0
- package/dist/analyzers/php/phpAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/php/phpAnalyzer.js +202 -0
- package/dist/analyzers/php/phpAnalyzer.js.map +1 -0
- package/dist/analyzers/python/index.d.ts +5 -0
- package/dist/analyzers/python/index.d.ts.map +1 -0
- package/dist/analyzers/python/index.js +21 -0
- package/dist/analyzers/python/index.js.map +1 -0
- package/dist/analyzers/python/pythonAnalyzer.d.ts +64 -0
- package/dist/analyzers/python/pythonAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/python/pythonAnalyzer.js +226 -0
- package/dist/analyzers/python/pythonAnalyzer.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +281 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/engine/index.d.ts +5 -0
- package/dist/core/engine/index.d.ts.map +1 -0
- package/dist/core/engine/index.js +21 -0
- package/dist/core/engine/index.js.map +1 -0
- package/dist/core/engine/ruleEngine.d.ts +46 -0
- package/dist/core/engine/ruleEngine.d.ts.map +1 -0
- package/dist/core/engine/ruleEngine.js +173 -0
- package/dist/core/engine/ruleEngine.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/scanner/fileScanner.d.ts +31 -0
- package/dist/core/scanner/fileScanner.d.ts.map +1 -0
- package/dist/core/scanner/fileScanner.js +199 -0
- package/dist/core/scanner/fileScanner.js.map +1 -0
- package/dist/core/scanner/index.d.ts +5 -0
- package/dist/core/scanner/index.d.ts.map +1 -0
- package/dist/core/scanner/index.js +21 -0
- package/dist/core/scanner/index.js.map +1 -0
- package/dist/core/scoring/index.d.ts +5 -0
- package/dist/core/scoring/index.d.ts.map +1 -0
- package/dist/core/scoring/index.js +21 -0
- package/dist/core/scoring/index.js.map +1 -0
- package/dist/core/scoring/riskScoring.d.ts +49 -0
- package/dist/core/scoring/riskScoring.d.ts.map +1 -0
- package/dist/core/scoring/riskScoring.js +180 -0
- package/dist/core/scoring/riskScoring.js.map +1 -0
- package/dist/core/securityScanner.d.ts +47 -0
- package/dist/core/securityScanner.d.ts.map +1 -0
- package/dist/core/securityScanner.js +298 -0
- package/dist/core/securityScanner.js.map +1 -0
- package/dist/dependencies/aiDependencyAnalyzer.d.ts +96 -0
- package/dist/dependencies/aiDependencyAnalyzer.d.ts.map +1 -0
- package/dist/dependencies/aiDependencyAnalyzer.js +435 -0
- package/dist/dependencies/aiDependencyAnalyzer.js.map +1 -0
- package/dist/dependencies/database/cveDatabase.d.ts +32 -0
- package/dist/dependencies/database/cveDatabase.d.ts.map +1 -0
- package/dist/dependencies/database/cveDatabase.js +393 -0
- package/dist/dependencies/database/cveDatabase.js.map +1 -0
- package/dist/dependencies/database/index.d.ts +6 -0
- package/dist/dependencies/database/index.d.ts.map +1 -0
- package/dist/dependencies/database/index.js +22 -0
- package/dist/dependencies/database/index.js.map +1 -0
- package/dist/dependencies/database/maliciousPackages.d.ts +43 -0
- package/dist/dependencies/database/maliciousPackages.d.ts.map +1 -0
- package/dist/dependencies/database/maliciousPackages.js +279 -0
- package/dist/dependencies/database/maliciousPackages.js.map +1 -0
- package/dist/dependencies/dependencyAnalyzer.d.ts +74 -0
- package/dist/dependencies/dependencyAnalyzer.d.ts.map +1 -0
- package/dist/dependencies/dependencyAnalyzer.js +349 -0
- package/dist/dependencies/dependencyAnalyzer.js.map +1 -0
- package/dist/dependencies/detectors/index.d.ts +7 -0
- package/dist/dependencies/detectors/index.d.ts.map +1 -0
- package/dist/dependencies/detectors/index.js +28 -0
- package/dist/dependencies/detectors/index.js.map +1 -0
- package/dist/dependencies/detectors/securityStandards.d.ts +15 -0
- package/dist/dependencies/detectors/securityStandards.d.ts.map +1 -0
- package/dist/dependencies/detectors/securityStandards.js +178 -0
- package/dist/dependencies/detectors/securityStandards.js.map +1 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.d.ts +53 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.d.ts.map +1 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.js +289 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.js.map +1 -0
- package/dist/dependencies/index.d.ts +14 -0
- package/dist/dependencies/index.d.ts.map +1 -0
- package/dist/dependencies/index.js +43 -0
- package/dist/dependencies/index.js.map +1 -0
- package/dist/dependencies/installed/index.d.ts +8 -0
- package/dist/dependencies/installed/index.d.ts.map +1 -0
- package/dist/dependencies/installed/index.js +24 -0
- package/dist/dependencies/installed/index.js.map +1 -0
- package/dist/dependencies/installed/installedScanner.d.ts +91 -0
- package/dist/dependencies/installed/installedScanner.d.ts.map +1 -0
- package/dist/dependencies/installed/installedScanner.js +766 -0
- package/dist/dependencies/installed/installedScanner.js.map +1 -0
- package/dist/dependencies/installed/malwarePatterns.d.ts +32 -0
- package/dist/dependencies/installed/malwarePatterns.d.ts.map +1 -0
- package/dist/dependencies/installed/malwarePatterns.js +480 -0
- package/dist/dependencies/installed/malwarePatterns.js.map +1 -0
- package/dist/dependencies/installed/types.d.ts +274 -0
- package/dist/dependencies/installed/types.d.ts.map +1 -0
- package/dist/dependencies/installed/types.js +7 -0
- package/dist/dependencies/installed/types.js.map +1 -0
- package/dist/dependencies/parsers/base/baseParser.d.ts +44 -0
- package/dist/dependencies/parsers/base/baseParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/base/baseParser.js +80 -0
- package/dist/dependencies/parsers/base/baseParser.js.map +1 -0
- package/dist/dependencies/parsers/base/index.d.ts +6 -0
- package/dist/dependencies/parsers/base/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/base/index.js +27 -0
- package/dist/dependencies/parsers/base/index.js.map +1 -0
- package/dist/dependencies/parsers/cpp/cppParser.d.ts +36 -0
- package/dist/dependencies/parsers/cpp/cppParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/cpp/cppParser.js +196 -0
- package/dist/dependencies/parsers/cpp/cppParser.js.map +1 -0
- package/dist/dependencies/parsers/cpp/index.d.ts +6 -0
- package/dist/dependencies/parsers/cpp/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/cpp/index.js +27 -0
- package/dist/dependencies/parsers/cpp/index.js.map +1 -0
- package/dist/dependencies/parsers/csharp/csharpParser.d.ts +32 -0
- package/dist/dependencies/parsers/csharp/csharpParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/csharp/csharpParser.js +125 -0
- package/dist/dependencies/parsers/csharp/csharpParser.js.map +1 -0
- package/dist/dependencies/parsers/csharp/index.d.ts +6 -0
- package/dist/dependencies/parsers/csharp/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/csharp/index.js +27 -0
- package/dist/dependencies/parsers/csharp/index.js.map +1 -0
- package/dist/dependencies/parsers/index.d.ts +24 -0
- package/dist/dependencies/parsers/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/index.js +69 -0
- package/dist/dependencies/parsers/index.js.map +1 -0
- package/dist/dependencies/parsers/java/index.d.ts +6 -0
- package/dist/dependencies/parsers/java/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/java/index.js +27 -0
- package/dist/dependencies/parsers/java/index.js.map +1 -0
- package/dist/dependencies/parsers/java/javaParser.d.ts +32 -0
- package/dist/dependencies/parsers/java/javaParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/java/javaParser.js +168 -0
- package/dist/dependencies/parsers/java/javaParser.js.map +1 -0
- package/dist/dependencies/parsers/javascript/index.d.ts +6 -0
- package/dist/dependencies/parsers/javascript/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/javascript/index.js +27 -0
- package/dist/dependencies/parsers/javascript/index.js.map +1 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.d.ts +55 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.js +266 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.js.map +1 -0
- package/dist/dependencies/parsers/php/index.d.ts +6 -0
- package/dist/dependencies/parsers/php/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/php/index.js +27 -0
- package/dist/dependencies/parsers/php/index.js.map +1 -0
- package/dist/dependencies/parsers/php/phpParser.d.ts +35 -0
- package/dist/dependencies/parsers/php/phpParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/php/phpParser.js +162 -0
- package/dist/dependencies/parsers/php/phpParser.js.map +1 -0
- package/dist/dependencies/parsers/python/index.d.ts +6 -0
- package/dist/dependencies/parsers/python/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/python/index.js +27 -0
- package/dist/dependencies/parsers/python/index.js.map +1 -0
- package/dist/dependencies/parsers/python/pythonParser.d.ts +60 -0
- package/dist/dependencies/parsers/python/pythonParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/python/pythonParser.js +336 -0
- package/dist/dependencies/parsers/python/pythonParser.js.map +1 -0
- package/dist/dependencies/types.d.ts +280 -0
- package/dist/dependencies/types.d.ts.map +1 -0
- package/dist/dependencies/types.js +59 -0
- package/dist/dependencies/types.js.map +1 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +18 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translations.d.ts +55 -0
- package/dist/i18n/translations.d.ts.map +1 -0
- package/dist/i18n/translations.js +119 -0
- package/dist/i18n/translations.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/reports/dependencyReportGenerator.d.ts +20 -0
- package/dist/reports/dependencyReportGenerator.d.ts.map +1 -0
- package/dist/reports/dependencyReportGenerator.js +690 -0
- package/dist/reports/dependencyReportGenerator.js.map +1 -0
- package/dist/reports/htmlReportGenerator.d.ts +43 -0
- package/dist/reports/htmlReportGenerator.d.ts.map +1 -0
- package/dist/reports/htmlReportGenerator.js +793 -0
- package/dist/reports/htmlReportGenerator.js.map +1 -0
- package/dist/reports/index.d.ts +7 -0
- package/dist/reports/index.d.ts.map +1 -0
- package/dist/reports/index.js +23 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/installedDepsReportGenerator.d.ts +14 -0
- package/dist/reports/installedDepsReportGenerator.d.ts.map +1 -0
- package/dist/reports/installedDepsReportGenerator.js +872 -0
- package/dist/reports/installedDepsReportGenerator.js.map +1 -0
- package/dist/rules/index.d.ts +31 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +95 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/malware/categories/backdoors.d.ts +12 -0
- package/dist/rules/malware/categories/backdoors.d.ts.map +1 -0
- package/dist/rules/malware/categories/backdoors.js +163 -0
- package/dist/rules/malware/categories/backdoors.js.map +1 -0
- package/dist/rules/malware/categories/cryptominers.d.ts +13 -0
- package/dist/rules/malware/categories/cryptominers.d.ts.map +1 -0
- package/dist/rules/malware/categories/cryptominers.js +415 -0
- package/dist/rules/malware/categories/cryptominers.js.map +1 -0
- package/dist/rules/malware/categories/exfiltration.d.ts +20 -0
- package/dist/rules/malware/categories/exfiltration.d.ts.map +1 -0
- package/dist/rules/malware/categories/exfiltration.js +658 -0
- package/dist/rules/malware/categories/exfiltration.js.map +1 -0
- package/dist/rules/malware/categories/keyloggers.d.ts +19 -0
- package/dist/rules/malware/categories/keyloggers.d.ts.map +1 -0
- package/dist/rules/malware/categories/keyloggers.js +763 -0
- package/dist/rules/malware/categories/keyloggers.js.map +1 -0
- package/dist/rules/malware/categories/loaders.d.ts +20 -0
- package/dist/rules/malware/categories/loaders.d.ts.map +1 -0
- package/dist/rules/malware/categories/loaders.js +702 -0
- package/dist/rules/malware/categories/loaders.js.map +1 -0
- package/dist/rules/malware/categories/network.d.ts +19 -0
- package/dist/rules/malware/categories/network.d.ts.map +1 -0
- package/dist/rules/malware/categories/network.js +622 -0
- package/dist/rules/malware/categories/network.js.map +1 -0
- package/dist/rules/malware/categories/obfuscation.d.ts +22 -0
- package/dist/rules/malware/categories/obfuscation.d.ts.map +1 -0
- package/dist/rules/malware/categories/obfuscation.js +766 -0
- package/dist/rules/malware/categories/obfuscation.js.map +1 -0
- package/dist/rules/malware/constants/index.d.ts +281 -0
- package/dist/rules/malware/constants/index.d.ts.map +1 -0
- package/dist/rules/malware/constants/index.js +327 -0
- package/dist/rules/malware/constants/index.js.map +1 -0
- package/dist/rules/malware/engine/index.d.ts +178 -0
- package/dist/rules/malware/engine/index.d.ts.map +1 -0
- package/dist/rules/malware/engine/index.js +552 -0
- package/dist/rules/malware/engine/index.js.map +1 -0
- package/dist/rules/malware/index.d.ts +205 -0
- package/dist/rules/malware/index.d.ts.map +1 -0
- package/dist/rules/malware/index.js +837 -0
- package/dist/rules/malware/index.js.map +1 -0
- package/dist/rules/malware/scoring/index.d.ts +84 -0
- package/dist/rules/malware/scoring/index.d.ts.map +1 -0
- package/dist/rules/malware/scoring/index.js +441 -0
- package/dist/rules/malware/scoring/index.js.map +1 -0
- package/dist/rules/malware/types/index.d.ts +616 -0
- package/dist/rules/malware/types/index.d.ts.map +1 -0
- package/dist/rules/malware/types/index.js +155 -0
- package/dist/rules/malware/types/index.js.map +1 -0
- package/dist/rules/malware/utils/index.d.ts +117 -0
- package/dist/rules/malware/utils/index.d.ts.map +1 -0
- package/dist/rules/malware/utils/index.js +514 -0
- package/dist/rules/malware/utils/index.js.map +1 -0
- package/dist/rules/standards.d.ts +26 -0
- package/dist/rules/standards.d.ts.map +1 -0
- package/dist/rules/standards.js +352 -0
- package/dist/rules/standards.js.map +1 -0
- package/dist/rules/vulnerabilities/constants/index.d.ts +835 -0
- package/dist/rules/vulnerabilities/constants/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/constants/index.js +544 -0
- package/dist/rules/vulnerabilities/constants/index.js.map +1 -0
- package/dist/rules/vulnerabilities/engine/index.d.ts +145 -0
- package/dist/rules/vulnerabilities/engine/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/engine/index.js +581 -0
- package/dist/rules/vulnerabilities/engine/index.js.map +1 -0
- package/dist/rules/vulnerabilities/index.d.ts +148 -0
- package/dist/rules/vulnerabilities/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/index.js +252 -0
- package/dist/rules/vulnerabilities/index.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/authentication.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/authentication.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/authentication.js +419 -0
- package/dist/rules/vulnerabilities/rules/authentication.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.js +300 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/csrf.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/csrf.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/csrf.js +261 -0
- package/dist/rules/vulnerabilities/rules/csrf.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/deserialization.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/deserialization.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/deserialization.js +336 -0
- package/dist/rules/vulnerabilities/rules/deserialization.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.js +325 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js +446 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/index.d.ts +17 -0
- package/dist/rules/vulnerabilities/rules/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/index.js +47 -0
- package/dist/rules/vulnerabilities/rules/index.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.js +351 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.js +272 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js +438 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts +12 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.js +636 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/ssrf.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/ssrf.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/ssrf.js +401 -0
- package/dist/rules/vulnerabilities/rules/ssrf.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/xss.d.ts +11 -0
- package/dist/rules/vulnerabilities/rules/xss.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/xss.js +724 -0
- package/dist/rules/vulnerabilities/rules/xss.js.map +1 -0
- package/dist/rules/vulnerabilities/scoring/index.d.ts +80 -0
- package/dist/rules/vulnerabilities/scoring/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/scoring/index.js +414 -0
- package/dist/rules/vulnerabilities/scoring/index.js.map +1 -0
- package/dist/rules/vulnerabilities/types/index.d.ts +830 -0
- package/dist/rules/vulnerabilities/types/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/types/index.js +164 -0
- package/dist/rules/vulnerabilities/types/index.js.map +1 -0
- package/dist/rules/vulnerabilities/utils/index.d.ts +206 -0
- package/dist/rules/vulnerabilities/utils/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/utils/index.js +615 -0
- package/dist/rules/vulnerabilities/utils/index.js.map +1 -0
- package/dist/types/index.d.ts +359 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +61 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +82 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +326 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +139 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/ARCHITECTURE.md +320 -0
- package/docs/V1.2.1-IA_Performances.md +116 -0
- package/docs/images/WIN_Defender.png +0 -0
- package/package.json +68 -0
- package/secure-scan.config.json +134 -0
- package/secure-scan.sln +29 -0
- package/src/ai/aiAnalyzer.ts +714 -0
- package/src/ai/index.ts +5 -0
- package/src/analyzers/base/baseAnalyzer.ts +66 -0
- package/src/analyzers/base/index.ts +5 -0
- package/src/analyzers/c-cpp/cppAnalyzer.ts +308 -0
- package/src/analyzers/c-cpp/index.ts +5 -0
- package/src/analyzers/core/engine/index.ts +5 -0
- package/src/analyzers/core/engine/ruleEngine.ts +221 -0
- package/src/analyzers/core/index.ts +8 -0
- package/src/analyzers/core/scanner/fileScanner.ts +204 -0
- package/src/analyzers/core/scanner/index.ts +5 -0
- package/src/analyzers/core/scoring/index.ts +5 -0
- package/src/analyzers/core/scoring/riskScoring.ts +198 -0
- package/src/analyzers/core/securityScanner.ts +321 -0
- package/src/analyzers/csharp/csharpAnalyzer.ts +328 -0
- package/src/analyzers/csharp/index.ts +5 -0
- package/src/analyzers/iac/iacAnalyzer.ts +318 -0
- package/src/analyzers/iac/index.ts +5 -0
- package/src/analyzers/index.ts +67 -0
- package/src/analyzers/java/index.ts +5 -0
- package/src/analyzers/java/javaAnalyzer.ts +320 -0
- package/src/analyzers/javascript/PROMPT_JS_ANALYZER.md +267 -0
- package/src/analyzers/javascript/astUtils.ts +789 -0
- package/src/analyzers/javascript/index.ts +50 -0
- package/src/analyzers/javascript/javascriptAnalyzer.ts +984 -0
- package/src/analyzers/javascript/malwareDetector.ts +697 -0
- package/src/analyzers/javascript/packageJsonAnalyzer.ts +626 -0
- package/src/analyzers/javascript/taintAnalyzer.ts +630 -0
- package/src/analyzers/php/index.ts +5 -0
- package/src/analyzers/php/phpAnalyzer.ts +280 -0
- package/src/analyzers/python/index.ts +5 -0
- package/src/analyzers/python/pythonAnalyzer.ts +319 -0
- package/src/cli/index.ts +276 -0
- package/src/dependencies/aiDependencyAnalyzer.ts +496 -0
- package/src/dependencies/database/cveDatabase.ts +426 -0
- package/src/dependencies/database/index.ts +6 -0
- package/src/dependencies/database/maliciousPackages.ts +286 -0
- package/src/dependencies/dependencyAnalyzer.ts +394 -0
- package/src/dependencies/detectors/index.ts +7 -0
- package/src/dependencies/detectors/securityStandards.ts +200 -0
- package/src/dependencies/detectors/vulnerabilityDetector.ts +343 -0
- package/src/dependencies/index.ts +27 -0
- package/src/dependencies/installed/index.ts +8 -0
- package/src/dependencies/installed/installedScanner.ts +821 -0
- package/src/dependencies/installed/malwarePatterns.ts +492 -0
- package/src/dependencies/installed/types.ts +287 -0
- package/src/dependencies/parsers/base/baseParser.ts +108 -0
- package/src/dependencies/parsers/base/index.ts +6 -0
- package/src/dependencies/parsers/cpp/cppParser.ts +245 -0
- package/src/dependencies/parsers/cpp/index.ts +6 -0
- package/src/dependencies/parsers/csharp/csharpParser.ts +151 -0
- package/src/dependencies/parsers/csharp/index.ts +6 -0
- package/src/dependencies/parsers/index.ts +56 -0
- package/src/dependencies/parsers/java/index.ts +6 -0
- package/src/dependencies/parsers/java/javaParser.ts +203 -0
- package/src/dependencies/parsers/javascript/index.ts +6 -0
- package/src/dependencies/parsers/javascript/javascriptParser.ts +362 -0
- package/src/dependencies/parsers/php/index.ts +6 -0
- package/src/dependencies/parsers/php/phpParser.ts +208 -0
- package/src/dependencies/parsers/python/index.ts +6 -0
- package/src/dependencies/parsers/python/pythonParser.ts +437 -0
- package/src/dependencies/types.ts +330 -0
- package/src/i18n/index.ts +1 -0
- package/src/i18n/translations.ts +194 -0
- package/src/index.ts +16 -0
- package/src/reports/dependencyReportGenerator.ts +717 -0
- package/src/reports/htmlReportGenerator.ts +781 -0
- package/src/reports/index.ts +7 -0
- package/src/reports/installedDepsReportGenerator.ts +899 -0
- package/src/rules/index.ts +58 -0
- package/src/rules/malware/INFO.md +287 -0
- package/src/rules/malware/categories/backdoors.ts +174 -0
- package/src/rules/malware/categories/cryptominers.ts +434 -0
- package/src/rules/malware/categories/exfiltration.ts +677 -0
- package/src/rules/malware/categories/keyloggers.ts +780 -0
- package/src/rules/malware/categories/loaders.ts +721 -0
- package/src/rules/malware/categories/network.ts +639 -0
- package/src/rules/malware/categories/obfuscation.ts +788 -0
- package/src/rules/malware/constants/index.ts +358 -0
- package/src/rules/malware/engine/index.ts +758 -0
- package/src/rules/malware/index.ts +928 -0
- package/src/rules/malware/scoring/index.ts +549 -0
- package/src/rules/malware/types/index.ts +752 -0
- package/src/rules/malware/utils/index.ts +643 -0
- package/src/rules/standards.ts +372 -0
- package/src/rules/vulnerabilities/PROMPT_VULNERABILITIES.md +226 -0
- package/src/rules/vulnerabilities/constants/index.ts +625 -0
- package/src/rules/vulnerabilities/engine/index.ts +831 -0
- package/src/rules/vulnerabilities/index.ts +312 -0
- package/src/rules/vulnerabilities/rules/authentication.ts +426 -0
- package/src/rules/vulnerabilities/rules/commandInjection.ts +307 -0
- package/src/rules/vulnerabilities/rules/csrf.ts +268 -0
- package/src/rules/vulnerabilities/rules/deserialization.ts +343 -0
- package/src/rules/vulnerabilities/rules/fileUpload.ts +332 -0
- package/src/rules/vulnerabilities/rules/hardcodedSecrets.ts +453 -0
- package/src/rules/vulnerabilities/rules/index.ts +17 -0
- package/src/rules/vulnerabilities/rules/pathTraversal.ts +358 -0
- package/src/rules/vulnerabilities/rules/prototypePollution.ts +279 -0
- package/src/rules/vulnerabilities/rules/securityMisconfiguration.ts +445 -0
- package/src/rules/vulnerabilities/rules/sqlInjection.ts +669 -0
- package/src/rules/vulnerabilities/rules/ssrf.ts +408 -0
- package/src/rules/vulnerabilities/rules/xss.ts +753 -0
- package/src/rules/vulnerabilities/scoring/index.ts +543 -0
- package/src/rules/vulnerabilities/types/index.ts +1004 -0
- package/src/rules/vulnerabilities/utils/index.ts +709 -0
- package/src/types/index.ts +391 -0
- package/src/utils/index.ts +306 -0
- package/src/utils/logger.ts +150 -0
- package/test-installed-scanner.ts +136 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos principales para Secure-Scan SAST
|
|
3
|
+
* Definiciones de tipos para análisis de seguridad
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Lenguajes de programación soportados para análisis
|
|
8
|
+
*/
|
|
9
|
+
export type SupportedLanguage =
|
|
10
|
+
| 'javascript'
|
|
11
|
+
| 'typescript'
|
|
12
|
+
| 'python'
|
|
13
|
+
| 'php'
|
|
14
|
+
| 'java'
|
|
15
|
+
| 'c'
|
|
16
|
+
| 'cpp'
|
|
17
|
+
| 'csharp'
|
|
18
|
+
| 'dockerfile'
|
|
19
|
+
| 'yaml'
|
|
20
|
+
| 'terraform';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Severity levels for findings
|
|
24
|
+
*/
|
|
25
|
+
export enum Severity {
|
|
26
|
+
INFO = 'info',
|
|
27
|
+
LOW = 'low',
|
|
28
|
+
MEDIUM = 'medium',
|
|
29
|
+
HIGH = 'high',
|
|
30
|
+
CRITICAL = 'critical'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Security standard references
|
|
35
|
+
*/
|
|
36
|
+
export interface SecurityStandard {
|
|
37
|
+
/** Standard name (OWASP, CWE, MITRE, SANS) */
|
|
38
|
+
name: 'OWASP' | 'CWE' | 'MITRE' | 'SANS';
|
|
39
|
+
/** Standard ID (e.g., CWE-79, A01:2021) */
|
|
40
|
+
id: string;
|
|
41
|
+
/** Standard title */
|
|
42
|
+
title: string;
|
|
43
|
+
/** Standard description */
|
|
44
|
+
description: string;
|
|
45
|
+
/** URL to standard documentation */
|
|
46
|
+
url?: string;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Type of threat detected
|
|
51
|
+
*/
|
|
52
|
+
export enum ThreatType {
|
|
53
|
+
// Vulnerabilities
|
|
54
|
+
SQL_INJECTION = 'sql_injection',
|
|
55
|
+
COMMAND_INJECTION = 'command_injection',
|
|
56
|
+
XSS = 'xss',
|
|
57
|
+
CSRF = 'csrf',
|
|
58
|
+
INSECURE_DESERIALIZATION = 'insecure_deserialization',
|
|
59
|
+
HARDCODED_CREDENTIALS = 'hardcoded_credentials',
|
|
60
|
+
PATH_TRAVERSAL = 'path_traversal',
|
|
61
|
+
LDAP_INJECTION = 'ldap_injection',
|
|
62
|
+
INSECURE_CRYPTO = 'insecure_crypto',
|
|
63
|
+
WEAK_RANDOM = 'weak_random',
|
|
64
|
+
DANGEROUS_FUNCTION = 'dangerous_function',
|
|
65
|
+
VULNERABLE_DEPENDENCY = 'vulnerable_dependency',
|
|
66
|
+
INFORMATION_DISCLOSURE = 'information_disclosure',
|
|
67
|
+
BROKEN_ACCESS_CONTROL = 'broken_access_control',
|
|
68
|
+
SECURITY_MISCONFIGURATION = 'security_misconfiguration',
|
|
69
|
+
|
|
70
|
+
// Malware
|
|
71
|
+
BACKDOOR = 'backdoor',
|
|
72
|
+
KEYLOGGER = 'keylogger',
|
|
73
|
+
CRYPTOMINER = 'cryptominer',
|
|
74
|
+
OBFUSCATED_CODE = 'obfuscated_code',
|
|
75
|
+
EMBEDDED_PAYLOAD = 'embedded_payload',
|
|
76
|
+
REVERSE_SHELL = 'reverse_shell',
|
|
77
|
+
DATA_EXFILTRATION = 'data_exfiltration',
|
|
78
|
+
SUSPICIOUS_NETWORK = 'suspicious_network',
|
|
79
|
+
MALICIOUS_LOADER = 'malicious_loader'
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Category of finding
|
|
84
|
+
*/
|
|
85
|
+
export enum FindingCategory {
|
|
86
|
+
VULNERABILITY = 'vulnerability',
|
|
87
|
+
MALWARE = 'malware',
|
|
88
|
+
CODE_SMELL = 'code_smell',
|
|
89
|
+
BEST_PRACTICE = 'best_practice'
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Source location in code
|
|
94
|
+
*/
|
|
95
|
+
export interface SourceLocation {
|
|
96
|
+
/** File path relative to project root */
|
|
97
|
+
file: string;
|
|
98
|
+
/** Start line number (1-indexed) */
|
|
99
|
+
startLine: number;
|
|
100
|
+
/** End line number (1-indexed) */
|
|
101
|
+
endLine: number;
|
|
102
|
+
/** Start column (optional) */
|
|
103
|
+
startColumn?: number;
|
|
104
|
+
/** End column (optional) */
|
|
105
|
+
endColumn?: number;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Code snippet with context
|
|
110
|
+
*/
|
|
111
|
+
export interface CodeSnippet {
|
|
112
|
+
/** The vulnerable/malicious code */
|
|
113
|
+
code: string;
|
|
114
|
+
/** Lines before for context */
|
|
115
|
+
contextBefore?: string;
|
|
116
|
+
/** Lines after for context */
|
|
117
|
+
contextAfter?: string;
|
|
118
|
+
/** Highlighted portion */
|
|
119
|
+
highlight?: {
|
|
120
|
+
start: number;
|
|
121
|
+
end: number;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Security finding from analysis
|
|
127
|
+
*/
|
|
128
|
+
export interface Finding {
|
|
129
|
+
/** Unique finding ID */
|
|
130
|
+
id: string;
|
|
131
|
+
/** Finding title */
|
|
132
|
+
title: string;
|
|
133
|
+
/** Detailed description */
|
|
134
|
+
description: string;
|
|
135
|
+
/** Severity level */
|
|
136
|
+
severity: Severity;
|
|
137
|
+
/** Type of threat */
|
|
138
|
+
threatType: ThreatType;
|
|
139
|
+
/** Category of finding */
|
|
140
|
+
category: FindingCategory;
|
|
141
|
+
/** Source location */
|
|
142
|
+
location: SourceLocation;
|
|
143
|
+
/** Code snippet */
|
|
144
|
+
snippet: CodeSnippet;
|
|
145
|
+
/** Related security standards */
|
|
146
|
+
standards: SecurityStandard[];
|
|
147
|
+
/** Remediation advice */
|
|
148
|
+
remediation: string;
|
|
149
|
+
/** Confidence level (0-100) */
|
|
150
|
+
confidence: number;
|
|
151
|
+
/** Detected by which analyzer */
|
|
152
|
+
analyzer: string;
|
|
153
|
+
/** Detection timestamp */
|
|
154
|
+
timestamp: Date;
|
|
155
|
+
/** Tags for categorization */
|
|
156
|
+
tags: string[];
|
|
157
|
+
/** AI-generated explanation (if available) */
|
|
158
|
+
aiExplanation?: string;
|
|
159
|
+
/** Suggested fix (if available) */
|
|
160
|
+
suggestedFix?: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* File information for scanning
|
|
165
|
+
*/
|
|
166
|
+
export interface ScannedFile {
|
|
167
|
+
/** Absolute file path */
|
|
168
|
+
absolutePath: string;
|
|
169
|
+
/** Relative path from project root */
|
|
170
|
+
relativePath: string;
|
|
171
|
+
/** File extension */
|
|
172
|
+
extension: string;
|
|
173
|
+
/** Detected language */
|
|
174
|
+
language: SupportedLanguage | null;
|
|
175
|
+
/** File size in bytes */
|
|
176
|
+
size: number;
|
|
177
|
+
/** File content */
|
|
178
|
+
content: string;
|
|
179
|
+
/** Line count */
|
|
180
|
+
lineCount: number;
|
|
181
|
+
/** SHA256 hash of content */
|
|
182
|
+
hash: string;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Scan statistics
|
|
187
|
+
*/
|
|
188
|
+
export interface ScanStats {
|
|
189
|
+
/** Total files scanned */
|
|
190
|
+
totalFiles: number;
|
|
191
|
+
/** Total lines of code */
|
|
192
|
+
totalLines: number;
|
|
193
|
+
/** Files by language */
|
|
194
|
+
filesByLanguage: Record<string, number>;
|
|
195
|
+
/** Findings by severity */
|
|
196
|
+
findingsBySeverity: Record<Severity, number>;
|
|
197
|
+
/** Findings by category */
|
|
198
|
+
findingsByCategory: Record<FindingCategory, number>;
|
|
199
|
+
/** Scan duration in milliseconds */
|
|
200
|
+
duration: number;
|
|
201
|
+
/** Scan start time */
|
|
202
|
+
startTime: Date;
|
|
203
|
+
/** Scan end time */
|
|
204
|
+
endTime: Date;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Complete scan result
|
|
209
|
+
*/
|
|
210
|
+
export interface ScanResult {
|
|
211
|
+
/** Project path */
|
|
212
|
+
projectPath: string;
|
|
213
|
+
/** Project name */
|
|
214
|
+
projectName: string;
|
|
215
|
+
/** Scan ID */
|
|
216
|
+
scanId: string;
|
|
217
|
+
/** All findings */
|
|
218
|
+
findings: Finding[];
|
|
219
|
+
/** Scan statistics */
|
|
220
|
+
stats: ScanStats;
|
|
221
|
+
/** Risk score (0-100) */
|
|
222
|
+
riskScore: number;
|
|
223
|
+
/** Risk level */
|
|
224
|
+
riskLevel: 'safe' | 'low' | 'medium' | 'high' | 'critical';
|
|
225
|
+
/** Scanned files */
|
|
226
|
+
scannedFiles: ScannedFile[];
|
|
227
|
+
/** Configuration used */
|
|
228
|
+
config: ScanConfig;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Scan configuration
|
|
233
|
+
*/
|
|
234
|
+
export interface ScanConfig {
|
|
235
|
+
/** Project path to scan */
|
|
236
|
+
projectPath: string;
|
|
237
|
+
/** Output file path */
|
|
238
|
+
outputPath?: string;
|
|
239
|
+
/** Languages to analyze */
|
|
240
|
+
languages?: SupportedLanguage[];
|
|
241
|
+
/** Patterns to exclude */
|
|
242
|
+
exclude?: string[];
|
|
243
|
+
/** Minimum severity to report */
|
|
244
|
+
minSeverity?: Severity;
|
|
245
|
+
/** Enable AI analysis */
|
|
246
|
+
useAI?: boolean;
|
|
247
|
+
/** AI provider configuration */
|
|
248
|
+
aiConfig?: AIConfig;
|
|
249
|
+
/** Verbose output */
|
|
250
|
+
verbose?: boolean;
|
|
251
|
+
/** Custom rules */
|
|
252
|
+
customRules?: string[];
|
|
253
|
+
/** Disabled rules */
|
|
254
|
+
disabledRules?: string[];
|
|
255
|
+
/** Maximum file size to scan (bytes) */
|
|
256
|
+
maxFileSize?: number;
|
|
257
|
+
/** Timeout per file (ms) */
|
|
258
|
+
fileTimeout?: number;
|
|
259
|
+
/** Report language (es = Spanish, en = English) */
|
|
260
|
+
language?: 'es' | 'en';
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* AI configuration
|
|
265
|
+
*/
|
|
266
|
+
export interface AIConfig {
|
|
267
|
+
/** AI provider (auto-detected if not specified) */
|
|
268
|
+
provider: 'openai' | 'anthropic' | 'google' | 'gemini' | 'local' | 'auto';
|
|
269
|
+
/** API key */
|
|
270
|
+
apiKey?: string;
|
|
271
|
+
/** Model to use */
|
|
272
|
+
model?: string;
|
|
273
|
+
/** API endpoint (for local models) */
|
|
274
|
+
endpoint?: string;
|
|
275
|
+
/** Max tokens per request */
|
|
276
|
+
maxTokens?: number;
|
|
277
|
+
/** Temperature for generation */
|
|
278
|
+
temperature?: number;
|
|
279
|
+
/** Performance options for local models */
|
|
280
|
+
performance?: LocalAIPerformanceConfig;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Performance configuration for local AI models
|
|
285
|
+
*/
|
|
286
|
+
export interface LocalAIPerformanceConfig {
|
|
287
|
+
/** Number of parallel requests (default: 1) */
|
|
288
|
+
parallelRequests?: number;
|
|
289
|
+
/** Number of GPU layers to use (-1 for all, 0 for CPU only) */
|
|
290
|
+
numGpuLayers?: number;
|
|
291
|
+
/** Number of threads to use (default: auto) */
|
|
292
|
+
numThreads?: number;
|
|
293
|
+
/** Context size in tokens (default: 4096) */
|
|
294
|
+
contextSize?: number;
|
|
295
|
+
/** Batch size for processing (default: 512) */
|
|
296
|
+
batchSize?: number;
|
|
297
|
+
/** Enable result caching */
|
|
298
|
+
enableCache?: boolean;
|
|
299
|
+
/** Use mmap for model loading */
|
|
300
|
+
useMmap?: boolean;
|
|
301
|
+
/** Use mlock to keep model in memory */
|
|
302
|
+
useMlock?: boolean;
|
|
303
|
+
/** Timeout per request in milliseconds (default: 120000) */
|
|
304
|
+
timeout?: number;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Rule definition for detection
|
|
309
|
+
*/
|
|
310
|
+
export interface Rule {
|
|
311
|
+
/** Unique rule ID */
|
|
312
|
+
id: string;
|
|
313
|
+
/** Rule name */
|
|
314
|
+
name: string;
|
|
315
|
+
/** Rule description */
|
|
316
|
+
description: string;
|
|
317
|
+
/** Languages this rule applies to */
|
|
318
|
+
languages: SupportedLanguage[];
|
|
319
|
+
/** Threat type this rule detects */
|
|
320
|
+
threatType: ThreatType;
|
|
321
|
+
/** Category */
|
|
322
|
+
category: FindingCategory;
|
|
323
|
+
/** Default severity */
|
|
324
|
+
severity: Severity;
|
|
325
|
+
/** Related standards */
|
|
326
|
+
standards: SecurityStandard[];
|
|
327
|
+
/** Detection patterns */
|
|
328
|
+
patterns: RulePattern[];
|
|
329
|
+
/** Remediation template */
|
|
330
|
+
remediation: string;
|
|
331
|
+
/** Is rule enabled by default */
|
|
332
|
+
enabled: boolean;
|
|
333
|
+
/** Tags */
|
|
334
|
+
tags: string[];
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Pattern for rule matching
|
|
339
|
+
*/
|
|
340
|
+
export interface RulePattern {
|
|
341
|
+
/** Pattern type */
|
|
342
|
+
type: 'regex' | 'ast' | 'semantic';
|
|
343
|
+
/** Pattern value */
|
|
344
|
+
pattern: string;
|
|
345
|
+
/** Pattern flags */
|
|
346
|
+
flags?: string;
|
|
347
|
+
/** Additional conditions */
|
|
348
|
+
conditions?: PatternCondition[];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Condition for pattern matching
|
|
353
|
+
*/
|
|
354
|
+
export interface PatternCondition {
|
|
355
|
+
/** Condition type */
|
|
356
|
+
type: 'context' | 'scope' | 'dataflow';
|
|
357
|
+
/** Condition value */
|
|
358
|
+
value: string;
|
|
359
|
+
/** Is negated */
|
|
360
|
+
negated?: boolean;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Analyzer plugin interface
|
|
365
|
+
*/
|
|
366
|
+
export interface Analyzer {
|
|
367
|
+
/** Analyzer name */
|
|
368
|
+
name: string;
|
|
369
|
+
/** Supported languages */
|
|
370
|
+
languages: SupportedLanguage[];
|
|
371
|
+
/** Analyzer version */
|
|
372
|
+
version: string;
|
|
373
|
+
/** Initialize analyzer */
|
|
374
|
+
initialize(): Promise<void>;
|
|
375
|
+
/** Analyze a file */
|
|
376
|
+
analyze(file: ScannedFile, rules: Rule[]): Promise<Finding[]>;
|
|
377
|
+
/** Cleanup resources */
|
|
378
|
+
cleanup(): Promise<void>;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Report generator interface
|
|
383
|
+
*/
|
|
384
|
+
export interface ReportGenerator {
|
|
385
|
+
/** Generator name */
|
|
386
|
+
name: string;
|
|
387
|
+
/** Output format */
|
|
388
|
+
format: 'html' | 'json' | 'pdf' | 'sarif';
|
|
389
|
+
/** Generate report */
|
|
390
|
+
generate(result: ScanResult): Promise<string>;
|
|
391
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility Functions for Secure-Scan
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as crypto from 'crypto';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { SupportedLanguage, Severity } from '../types';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Generate a unique ID
|
|
11
|
+
*/
|
|
12
|
+
export function generateId(): string {
|
|
13
|
+
return `SS-${Date.now().toString(36)}-${crypto.randomBytes(4).toString('hex')}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Calculate SHA256 hash of content
|
|
18
|
+
*/
|
|
19
|
+
export function calculateHash(content: string): string {
|
|
20
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get language from file extension
|
|
25
|
+
*/
|
|
26
|
+
export function getLanguageFromExtension(filePath: string): SupportedLanguage | null {
|
|
27
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
28
|
+
|
|
29
|
+
const extensionMap: Record<string, SupportedLanguage> = {
|
|
30
|
+
'.js': 'javascript',
|
|
31
|
+
'.jsx': 'javascript',
|
|
32
|
+
'.mjs': 'javascript',
|
|
33
|
+
'.cjs': 'javascript',
|
|
34
|
+
'.ts': 'typescript',
|
|
35
|
+
'.tsx': 'typescript',
|
|
36
|
+
'.py': 'python',
|
|
37
|
+
'.pyw': 'python',
|
|
38
|
+
'.php': 'php',
|
|
39
|
+
'.phtml': 'php',
|
|
40
|
+
'.php3': 'php',
|
|
41
|
+
'.php4': 'php',
|
|
42
|
+
'.php5': 'php',
|
|
43
|
+
'.java': 'java',
|
|
44
|
+
'.c': 'c',
|
|
45
|
+
'.h': 'c',
|
|
46
|
+
'.cpp': 'cpp',
|
|
47
|
+
'.cc': 'cpp',
|
|
48
|
+
'.cxx': 'cpp',
|
|
49
|
+
'.hpp': 'cpp',
|
|
50
|
+
'.hxx': 'cpp',
|
|
51
|
+
'.cs': 'csharp',
|
|
52
|
+
'.dockerfile': 'dockerfile',
|
|
53
|
+
'.yaml': 'yaml',
|
|
54
|
+
'.yml': 'yaml',
|
|
55
|
+
'.tf': 'terraform',
|
|
56
|
+
'.tfvars': 'terraform'
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// Check for Dockerfile without extension
|
|
60
|
+
if (path.basename(filePath).toLowerCase() === 'dockerfile') {
|
|
61
|
+
return 'dockerfile';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return extensionMap[ext] || null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Check if file should be excluded
|
|
69
|
+
*/
|
|
70
|
+
export function shouldExclude(filePath: string, excludePatterns: string[]): boolean {
|
|
71
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
72
|
+
|
|
73
|
+
const defaultExcludes = [
|
|
74
|
+
'node_modules',
|
|
75
|
+
'vendor',
|
|
76
|
+
'.git',
|
|
77
|
+
'dist',
|
|
78
|
+
'build',
|
|
79
|
+
'out',
|
|
80
|
+
'__pycache__',
|
|
81
|
+
'.venv',
|
|
82
|
+
'venv',
|
|
83
|
+
'.env',
|
|
84
|
+
'coverage',
|
|
85
|
+
'.nyc_output',
|
|
86
|
+
'.next',
|
|
87
|
+
'.nuxt'
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
const allExcludes = [...defaultExcludes, ...excludePatterns];
|
|
91
|
+
|
|
92
|
+
return allExcludes.some(pattern => {
|
|
93
|
+
// Simple pattern matching
|
|
94
|
+
if (normalizedPath.includes(`/${pattern}/`) ||
|
|
95
|
+
normalizedPath.includes(`/${pattern}`) ||
|
|
96
|
+
normalizedPath.startsWith(`${pattern}/`)) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Get file extension for syntax highlighting
|
|
105
|
+
*/
|
|
106
|
+
export function getHighlightLanguage(language: SupportedLanguage | null): string {
|
|
107
|
+
const highlightMap: Record<SupportedLanguage, string> = {
|
|
108
|
+
'javascript': 'javascript',
|
|
109
|
+
'typescript': 'typescript',
|
|
110
|
+
'python': 'python',
|
|
111
|
+
'php': 'php',
|
|
112
|
+
'java': 'java',
|
|
113
|
+
'c': 'c',
|
|
114
|
+
'cpp': 'cpp',
|
|
115
|
+
'csharp': 'csharp',
|
|
116
|
+
'dockerfile': 'dockerfile',
|
|
117
|
+
'yaml': 'yaml',
|
|
118
|
+
'terraform': 'hcl'
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return language ? highlightMap[language] : 'plaintext';
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Extract code context around a line
|
|
126
|
+
*/
|
|
127
|
+
export function extractCodeContext(
|
|
128
|
+
content: string,
|
|
129
|
+
lineNumber: number,
|
|
130
|
+
contextLines: number = 3
|
|
131
|
+
): { code: string; contextBefore: string; contextAfter: string } {
|
|
132
|
+
const lines = content.split('\n');
|
|
133
|
+
const targetLine = lineNumber - 1; // Convert to 0-indexed
|
|
134
|
+
|
|
135
|
+
const startBefore = Math.max(0, targetLine - contextLines);
|
|
136
|
+
const endAfter = Math.min(lines.length, targetLine + contextLines + 1);
|
|
137
|
+
|
|
138
|
+
const contextBefore = lines.slice(startBefore, targetLine).join('\n');
|
|
139
|
+
const code = lines[targetLine] || '';
|
|
140
|
+
const contextAfter = lines.slice(targetLine + 1, endAfter).join('\n');
|
|
141
|
+
|
|
142
|
+
return { code, contextBefore, contextAfter };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Count lines in content
|
|
147
|
+
*/
|
|
148
|
+
export function countLines(content: string): number {
|
|
149
|
+
return content.split('\n').length;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Severity to numeric value for comparison
|
|
154
|
+
*/
|
|
155
|
+
export function severityToNumber(severity: Severity): number {
|
|
156
|
+
const map: Record<Severity, number> = {
|
|
157
|
+
[Severity.INFO]: 0,
|
|
158
|
+
[Severity.LOW]: 1,
|
|
159
|
+
[Severity.MEDIUM]: 2,
|
|
160
|
+
[Severity.HIGH]: 3,
|
|
161
|
+
[Severity.CRITICAL]: 4
|
|
162
|
+
};
|
|
163
|
+
return map[severity];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Compare severities
|
|
168
|
+
*/
|
|
169
|
+
export function isHigherOrEqualSeverity(a: Severity, b: Severity): boolean {
|
|
170
|
+
return severityToNumber(a) >= severityToNumber(b);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Get severity color for reporting
|
|
175
|
+
*/
|
|
176
|
+
export function getSeverityColor(severity: Severity): string {
|
|
177
|
+
const colors: Record<Severity, string> = {
|
|
178
|
+
[Severity.INFO]: '#17a2b8',
|
|
179
|
+
[Severity.LOW]: '#28a745',
|
|
180
|
+
[Severity.MEDIUM]: '#ffc107',
|
|
181
|
+
[Severity.HIGH]: '#fd7e14',
|
|
182
|
+
[Severity.CRITICAL]: '#dc3545'
|
|
183
|
+
};
|
|
184
|
+
return colors[severity];
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Get severity badge class
|
|
189
|
+
*/
|
|
190
|
+
export function getSeverityBadge(severity: Severity): string {
|
|
191
|
+
const badges: Record<Severity, string> = {
|
|
192
|
+
[Severity.INFO]: 'badge-info',
|
|
193
|
+
[Severity.LOW]: 'badge-success',
|
|
194
|
+
[Severity.MEDIUM]: 'badge-warning',
|
|
195
|
+
[Severity.HIGH]: 'badge-orange',
|
|
196
|
+
[Severity.CRITICAL]: 'badge-danger'
|
|
197
|
+
};
|
|
198
|
+
return badges[severity];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Format duration for display
|
|
203
|
+
*/
|
|
204
|
+
export function formatDuration(ms: number): string {
|
|
205
|
+
if (ms < 1000) {
|
|
206
|
+
return `${ms}ms`;
|
|
207
|
+
}
|
|
208
|
+
if (ms < 60000) {
|
|
209
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
210
|
+
}
|
|
211
|
+
const minutes = Math.floor(ms / 60000);
|
|
212
|
+
const seconds = ((ms % 60000) / 1000).toFixed(0);
|
|
213
|
+
return `${minutes}m ${seconds}s`;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Escape HTML for safe display
|
|
218
|
+
*/
|
|
219
|
+
export function escapeHtml(text: string): string {
|
|
220
|
+
const escapeMap: Record<string, string> = {
|
|
221
|
+
'&': '&',
|
|
222
|
+
'<': '<',
|
|
223
|
+
'>': '>',
|
|
224
|
+
'"': '"',
|
|
225
|
+
"'": '''
|
|
226
|
+
};
|
|
227
|
+
return text.replace(/[&<>"']/g, char => escapeMap[char]);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Truncate text with ellipsis
|
|
232
|
+
*/
|
|
233
|
+
export function truncate(text: string, maxLength: number): string {
|
|
234
|
+
if (text.length <= maxLength) return text;
|
|
235
|
+
return text.substring(0, maxLength - 3) + '...';
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Check if string looks like Base64
|
|
240
|
+
*/
|
|
241
|
+
export function isBase64Like(str: string): boolean {
|
|
242
|
+
// Check if string looks like base64 encoded content
|
|
243
|
+
if (str.length < 20) return false;
|
|
244
|
+
const base64Regex = /^[A-Za-z0-9+/=]{20,}$/;
|
|
245
|
+
return base64Regex.test(str.replace(/\s/g, ''));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Check if string looks like hex encoded
|
|
250
|
+
*/
|
|
251
|
+
export function isHexEncoded(str: string): boolean {
|
|
252
|
+
if (str.length < 20 || str.length % 2 !== 0) return false;
|
|
253
|
+
const hexRegex = /^[0-9a-fA-F]+$/;
|
|
254
|
+
return hexRegex.test(str);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Calculate Shannon entropy of a string
|
|
259
|
+
* High entropy suggests encrypted/compressed/obfuscated content
|
|
260
|
+
*/
|
|
261
|
+
export function calculateEntropy(str: string): number {
|
|
262
|
+
if (str.length === 0) return 0;
|
|
263
|
+
|
|
264
|
+
const frequencies: Record<string, number> = {};
|
|
265
|
+
for (const char of str) {
|
|
266
|
+
frequencies[char] = (frequencies[char] || 0) + 1;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
let entropy = 0;
|
|
270
|
+
const len = str.length;
|
|
271
|
+
for (const count of Object.values(frequencies)) {
|
|
272
|
+
const probability = count / len;
|
|
273
|
+
entropy -= probability * Math.log2(probability);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return entropy;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Check if code appears obfuscated based on entropy and patterns
|
|
281
|
+
*/
|
|
282
|
+
export function looksObfuscated(code: string): boolean {
|
|
283
|
+
// Check entropy - obfuscated code tends to have higher entropy
|
|
284
|
+
const entropy = calculateEntropy(code);
|
|
285
|
+
if (entropy > 5.5) return true;
|
|
286
|
+
|
|
287
|
+
// Check for common obfuscation patterns
|
|
288
|
+
const obfuscationPatterns = [
|
|
289
|
+
/\\x[0-9a-f]{2}/gi, // Hex escape sequences
|
|
290
|
+
/\\u[0-9a-f]{4}/gi, // Unicode escape sequences
|
|
291
|
+
/['"][^'"]{100,}['"]/g, // Very long strings
|
|
292
|
+
/\b[a-z]{1}[0-9]{4,}\b/gi, // Variables like a12345
|
|
293
|
+
/\(\s*function\s*\(\s*\)\s*{[\s\S]*}\s*\)\s*\(\s*\)/g, // IIFE obfuscation
|
|
294
|
+
/eval\s*\(\s*atob\s*\(/gi, // eval(atob(...))
|
|
295
|
+
/String\.fromCharCode/gi, // Character code generation
|
|
296
|
+
];
|
|
297
|
+
|
|
298
|
+
let patternMatches = 0;
|
|
299
|
+
for (const pattern of obfuscationPatterns) {
|
|
300
|
+
if (pattern.test(code)) {
|
|
301
|
+
patternMatches++;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
return patternMatches >= 2;
|
|
306
|
+
}
|