@nahisaho/musubix-security 3.0.7 → 3.0.11
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/dist/analysis/index.d.ts +3 -0
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +3 -0
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/multi-language-scanner.d.ts +78 -0
- package/dist/analysis/multi-language-scanner.d.ts.map +1 -0
- package/dist/analysis/multi-language-scanner.js +236 -0
- package/dist/analysis/multi-language-scanner.js.map +1 -0
- package/dist/analysis/php-scanner.d.ts +61 -0
- package/dist/analysis/php-scanner.d.ts.map +1 -0
- package/dist/analysis/php-scanner.js +551 -0
- package/dist/analysis/php-scanner.js.map +1 -0
- package/dist/analysis/python-scanner.d.ts +61 -0
- package/dist/analysis/python-scanner.d.ts.map +1 -0
- package/dist/analysis/python-scanner.js +472 -0
- package/dist/analysis/python-scanner.js.map +1 -0
- package/dist/analysis/vulnerability-scanner.d.ts.map +1 -1
- package/dist/analysis/vulnerability-scanner.js +535 -0
- package/dist/analysis/vulnerability-scanner.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +221 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/codedb/builder.d.ts +106 -0
- package/dist/codedb/builder.d.ts.map +1 -0
- package/dist/codedb/builder.js +50 -0
- package/dist/codedb/builder.js.map +1 -0
- package/dist/codedb/database.d.ts +74 -0
- package/dist/codedb/database.d.ts.map +1 -0
- package/dist/codedb/database.js +81 -0
- package/dist/codedb/database.js.map +1 -0
- package/dist/codedb/index.d.ts +13 -0
- package/dist/codedb/index.d.ts.map +1 -0
- package/dist/codedb/index.js +13 -0
- package/dist/codedb/index.js.map +1 -0
- package/dist/codedb/serializer.d.ts +316 -0
- package/dist/codedb/serializer.d.ts.map +1 -0
- package/dist/codedb/serializer.js +433 -0
- package/dist/codedb/serializer.js.map +1 -0
- package/dist/extractors/base-extractor.d.ts +487 -0
- package/dist/extractors/base-extractor.d.ts.map +1 -0
- package/dist/extractors/base-extractor.js +164 -0
- package/dist/extractors/base-extractor.js.map +1 -0
- package/dist/extractors/go-extractor.d.ts +105 -0
- package/dist/extractors/go-extractor.d.ts.map +1 -0
- package/dist/extractors/go-extractor.js +805 -0
- package/dist/extractors/go-extractor.js.map +1 -0
- package/dist/extractors/index.d.ts +16 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +35 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/java-extractor.d.ts +109 -0
- package/dist/extractors/java-extractor.d.ts.map +1 -0
- package/dist/extractors/java-extractor.js +962 -0
- package/dist/extractors/java-extractor.js.map +1 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -1
- package/dist/index.js.map +1 -1
- package/dist/mql/executor.d.ts +151 -0
- package/dist/mql/executor.d.ts.map +1 -0
- package/dist/mql/executor.js +713 -0
- package/dist/mql/executor.js.map +1 -0
- package/dist/mql/index.d.ts +65 -0
- package/dist/mql/index.d.ts.map +1 -0
- package/dist/mql/index.js +102 -0
- package/dist/mql/index.js.map +1 -0
- package/dist/mql/lexer.d.ts +193 -0
- package/dist/mql/lexer.d.ts.map +1 -0
- package/dist/mql/lexer.js +490 -0
- package/dist/mql/lexer.js.map +1 -0
- package/dist/mql/parser.d.ts +124 -0
- package/dist/mql/parser.d.ts.map +1 -0
- package/dist/mql/parser.js +620 -0
- package/dist/mql/parser.js.map +1 -0
- package/dist/mql/planner.d.ts +100 -0
- package/dist/mql/planner.d.ts.map +1 -0
- package/dist/mql/planner.js +479 -0
- package/dist/mql/planner.js.map +1 -0
- package/dist/types/codedb.d.ts +530 -0
- package/dist/types/codedb.d.ts.map +1 -0
- package/dist/types/codedb.js +7 -0
- package/dist/types/codedb.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/mql.d.ts +422 -0
- package/dist/types/mql.d.ts.map +1 -0
- package/dist/types/mql.js +48 -0
- package/dist/types/mql.js.map +1 -0
- package/dist/types/variant.d.ts +582 -0
- package/dist/types/variant.d.ts.map +1 -0
- package/dist/types/variant.js +66 -0
- package/dist/types/variant.js.map +1 -0
- package/dist/types/vulnerability.d.ts +1 -1
- package/dist/types/vulnerability.d.ts.map +1 -1
- package/dist/variant/detector.d.ts +92 -0
- package/dist/variant/detector.d.ts.map +1 -0
- package/dist/variant/detector.js +257 -0
- package/dist/variant/detector.js.map +1 -0
- package/dist/variant/index.d.ts +15 -0
- package/dist/variant/index.d.ts.map +1 -0
- package/dist/variant/index.js +22 -0
- package/dist/variant/index.js.map +1 -0
- package/dist/variant/model.d.ts +78 -0
- package/dist/variant/model.d.ts.map +1 -0
- package/dist/variant/model.js +719 -0
- package/dist/variant/model.js.map +1 -0
- package/dist/variant/sarif.d.ts +68 -0
- package/dist/variant/sarif.d.ts.map +1 -0
- package/dist/variant/sarif.js +293 -0
- package/dist/variant/sarif.js.map +1 -0
- package/dist/variant/scanner.d.ts +98 -0
- package/dist/variant/scanner.d.ts.map +1 -0
- package/dist/variant/scanner.js +348 -0
- package/dist/variant/scanner.js.map +1 -0
- package/package.json +35 -5
package/dist/analysis/index.d.ts
CHANGED
|
@@ -7,4 +7,7 @@ export { TaintAnalyzer, createTaintAnalyzer, resetTaintCounters, } from './taint
|
|
|
7
7
|
export { EnhancedTaintAnalyzer, createEnhancedTaintAnalyzer, type EnhancedTaintOptions, type EnhancedTaintResult, } from './enhanced-taint-analyzer.js';
|
|
8
8
|
export { SecretDetector, createSecretDetector, resetSecretCounter, } from './secret-detector.js';
|
|
9
9
|
export { DependencyAuditor, createDependencyAuditor, } from './dependency-auditor.js';
|
|
10
|
+
export { PythonScanner, createPythonScanner, resetPythonVulnCounter, } from './python-scanner.js';
|
|
11
|
+
export { PhpScanner, createPhpScanner, resetPhpVulnCounter, } from './php-scanner.js';
|
|
12
|
+
export { MultiLanguageScanner, createMultiLanguageScanner, type SupportedLanguage, type MultiLanguageScanOptions, type MultiLanguageScanResult, } from './multi-language-scanner.js';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,6BAA6B,CAAC"}
|
package/dist/analysis/index.js
CHANGED
|
@@ -7,4 +7,7 @@ export { TaintAnalyzer, createTaintAnalyzer, resetTaintCounters, } from './taint
|
|
|
7
7
|
export { EnhancedTaintAnalyzer, createEnhancedTaintAnalyzer, } from './enhanced-taint-analyzer.js';
|
|
8
8
|
export { SecretDetector, createSecretDetector, resetSecretCounter, } from './secret-detector.js';
|
|
9
9
|
export { DependencyAuditor, createDependencyAuditor, } from './dependency-auditor.js';
|
|
10
|
+
export { PythonScanner, createPythonScanner, resetPythonVulnCounter, } from './python-scanner.js';
|
|
11
|
+
export { PhpScanner, createPhpScanner, resetPhpVulnCounter, } from './php-scanner.js';
|
|
12
|
+
export { MultiLanguageScanner, createMultiLanguageScanner, } from './multi-language-scanner.js';
|
|
10
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAI3B,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Multi-language vulnerability scanner - unified scanner for TypeScript, JavaScript, Python, PHP
|
|
3
|
+
* @module @nahisaho/musubix-security/analysis/multi-language-scanner
|
|
4
|
+
* @trace REQ-SEC-MULTI-001
|
|
5
|
+
*/
|
|
6
|
+
import type { Vulnerability, ScanOptions, ScanResult } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Language type
|
|
9
|
+
*/
|
|
10
|
+
export type SupportedLanguage = 'typescript' | 'javascript' | 'python' | 'php';
|
|
11
|
+
/**
|
|
12
|
+
* Multi-language scan options
|
|
13
|
+
*/
|
|
14
|
+
export interface MultiLanguageScanOptions extends ScanOptions {
|
|
15
|
+
/** Languages to scan (default: all) */
|
|
16
|
+
languages?: SupportedLanguage[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Multi-language scan result
|
|
20
|
+
*/
|
|
21
|
+
export interface MultiLanguageScanResult extends ScanResult {
|
|
22
|
+
/** Results by language */
|
|
23
|
+
byLanguage: Record<SupportedLanguage, {
|
|
24
|
+
vulnerabilities: Vulnerability[];
|
|
25
|
+
scannedFiles: number;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Multi-language vulnerability scanner
|
|
30
|
+
*/
|
|
31
|
+
export declare class MultiLanguageScanner {
|
|
32
|
+
private tsScanner;
|
|
33
|
+
private pythonScanner;
|
|
34
|
+
private phpScanner;
|
|
35
|
+
constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Detect language from file extension
|
|
38
|
+
*/
|
|
39
|
+
detectLanguage(filePath: string): SupportedLanguage | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get all supported languages
|
|
42
|
+
*/
|
|
43
|
+
getSupportedLanguages(): SupportedLanguage[];
|
|
44
|
+
/**
|
|
45
|
+
* Get supported extensions
|
|
46
|
+
*/
|
|
47
|
+
getSupportedExtensions(): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Scan a single file
|
|
50
|
+
*/
|
|
51
|
+
scanFile(filePath: string): Promise<Vulnerability[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Scan content with specified language
|
|
54
|
+
* Note: TypeScript/JavaScript only supports file-based scanning via ts-morph
|
|
55
|
+
*/
|
|
56
|
+
scanContent(content: string, language: SupportedLanguage, filePath?: string): Vulnerability[];
|
|
57
|
+
/**
|
|
58
|
+
* Scan a directory for all supported languages
|
|
59
|
+
*/
|
|
60
|
+
scanDirectory(rootPath: string, options?: MultiLanguageScanOptions): Promise<MultiLanguageScanResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Get rule count by language
|
|
63
|
+
*/
|
|
64
|
+
getRuleCountByLanguage(): Record<SupportedLanguage, number>;
|
|
65
|
+
/**
|
|
66
|
+
* Get total rule count
|
|
67
|
+
*/
|
|
68
|
+
getTotalRuleCount(): number;
|
|
69
|
+
/**
|
|
70
|
+
* Get CWE coverage
|
|
71
|
+
*/
|
|
72
|
+
getCWECoverage(): string[];
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create multi-language scanner
|
|
76
|
+
*/
|
|
77
|
+
export declare function createMultiLanguageScanner(): MultiLanguageScanner;
|
|
78
|
+
//# sourceMappingURL=multi-language-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-language-scanner.d.ts","sourceRoot":"","sources":["../../src/analysis/multi-language-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,UAAU,EACX,MAAM,mBAAmB,CAAC;AAK3B;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,uCAAuC;IACvC,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,UAAU;IACzD,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE;QACpC,eAAe,EAAE,aAAa,EAAE,CAAC;QACjC,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAsBD;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAa;;IAQ/B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAK1D;;OAEG;IACH,qBAAqB,IAAI,iBAAiB,EAAE;IAI5C;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmB1D;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAiB7F;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,uBAAuB,CAAC;IAsFnC;;OAEG;IACH,sBAAsB,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAS3D;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAM3B;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CA6B3B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAEjE"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Multi-language vulnerability scanner - unified scanner for TypeScript, JavaScript, Python, PHP
|
|
3
|
+
* @module @nahisaho/musubix-security/analysis/multi-language-scanner
|
|
4
|
+
* @trace REQ-SEC-MULTI-001
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs/promises';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { createVulnerabilityScanner } from './vulnerability-scanner.js';
|
|
9
|
+
import { createPythonScanner } from './python-scanner.js';
|
|
10
|
+
import { createPhpScanner } from './php-scanner.js';
|
|
11
|
+
/**
|
|
12
|
+
* File extension to language mapping
|
|
13
|
+
*/
|
|
14
|
+
const EXTENSION_TO_LANGUAGE = {
|
|
15
|
+
'.ts': 'typescript',
|
|
16
|
+
'.tsx': 'typescript',
|
|
17
|
+
'.mts': 'typescript',
|
|
18
|
+
'.cts': 'typescript',
|
|
19
|
+
'.js': 'javascript',
|
|
20
|
+
'.jsx': 'javascript',
|
|
21
|
+
'.mjs': 'javascript',
|
|
22
|
+
'.cjs': 'javascript',
|
|
23
|
+
'.py': 'python',
|
|
24
|
+
'.pyw': 'python',
|
|
25
|
+
'.php': 'php',
|
|
26
|
+
'.phtml': 'php',
|
|
27
|
+
'.php5': 'php',
|
|
28
|
+
'.php7': 'php',
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Multi-language vulnerability scanner
|
|
32
|
+
*/
|
|
33
|
+
export class MultiLanguageScanner {
|
|
34
|
+
tsScanner;
|
|
35
|
+
pythonScanner;
|
|
36
|
+
phpScanner;
|
|
37
|
+
constructor() {
|
|
38
|
+
this.tsScanner = createVulnerabilityScanner();
|
|
39
|
+
this.pythonScanner = createPythonScanner();
|
|
40
|
+
this.phpScanner = createPhpScanner();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Detect language from file extension
|
|
44
|
+
*/
|
|
45
|
+
detectLanguage(filePath) {
|
|
46
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
47
|
+
return EXTENSION_TO_LANGUAGE[ext] ?? null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all supported languages
|
|
51
|
+
*/
|
|
52
|
+
getSupportedLanguages() {
|
|
53
|
+
return ['typescript', 'javascript', 'python', 'php'];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get supported extensions
|
|
57
|
+
*/
|
|
58
|
+
getSupportedExtensions() {
|
|
59
|
+
return Object.keys(EXTENSION_TO_LANGUAGE);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Scan a single file
|
|
63
|
+
*/
|
|
64
|
+
async scanFile(filePath) {
|
|
65
|
+
const language = this.detectLanguage(filePath);
|
|
66
|
+
if (!language) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
switch (language) {
|
|
70
|
+
case 'typescript':
|
|
71
|
+
case 'javascript':
|
|
72
|
+
return this.tsScanner.scanFile(filePath);
|
|
73
|
+
case 'python':
|
|
74
|
+
return this.pythonScanner.scanFile(filePath);
|
|
75
|
+
case 'php':
|
|
76
|
+
return this.phpScanner.scanFile(filePath);
|
|
77
|
+
default:
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Scan content with specified language
|
|
83
|
+
* Note: TypeScript/JavaScript only supports file-based scanning via ts-morph
|
|
84
|
+
*/
|
|
85
|
+
scanContent(content, language, filePath) {
|
|
86
|
+
switch (language) {
|
|
87
|
+
case 'typescript':
|
|
88
|
+
case 'javascript':
|
|
89
|
+
// TypeScript scanner requires file-based scanning (ts-morph)
|
|
90
|
+
// For content scanning, use Python or PHP
|
|
91
|
+
console.warn('TypeScript/JavaScript content scanning not supported. Use scanFile() instead.');
|
|
92
|
+
return [];
|
|
93
|
+
case 'python':
|
|
94
|
+
return this.pythonScanner.scanContent(content, filePath ?? 'unknown.py');
|
|
95
|
+
case 'php':
|
|
96
|
+
return this.phpScanner.scanContent(content, filePath ?? 'unknown.php');
|
|
97
|
+
default:
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Scan a directory for all supported languages
|
|
103
|
+
*/
|
|
104
|
+
async scanDirectory(rootPath, options) {
|
|
105
|
+
const startTime = Date.now();
|
|
106
|
+
const allVulnerabilities = [];
|
|
107
|
+
let totalScannedFiles = 0;
|
|
108
|
+
let totalSkippedFiles = 0;
|
|
109
|
+
const byLanguage = {
|
|
110
|
+
typescript: { vulnerabilities: [], scannedFiles: 0 },
|
|
111
|
+
javascript: { vulnerabilities: [], scannedFiles: 0 },
|
|
112
|
+
python: { vulnerabilities: [], scannedFiles: 0 },
|
|
113
|
+
php: { vulnerabilities: [], scannedFiles: 0 },
|
|
114
|
+
};
|
|
115
|
+
const enabledLanguages = options?.languages ?? this.getSupportedLanguages();
|
|
116
|
+
const scanDir = async (dirPath) => {
|
|
117
|
+
let entries;
|
|
118
|
+
try {
|
|
119
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
126
|
+
if (entry.isDirectory()) {
|
|
127
|
+
// Skip common non-source directories
|
|
128
|
+
const skipDirs = [
|
|
129
|
+
'.git', 'node_modules', '__pycache__', 'venv', '.venv',
|
|
130
|
+
'env', '.env', 'vendor', 'cache', 'tmp', 'dist', 'build',
|
|
131
|
+
'.next', '.nuxt', 'coverage', '.nyc_output'
|
|
132
|
+
];
|
|
133
|
+
if (skipDirs.includes(entry.name)) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
await scanDir(fullPath);
|
|
137
|
+
}
|
|
138
|
+
else if (entry.isFile()) {
|
|
139
|
+
const language = this.detectLanguage(fullPath);
|
|
140
|
+
if (!language || !enabledLanguages.includes(language)) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// Apply exclude patterns
|
|
144
|
+
if (options?.excludePatterns?.some(p => fullPath.includes(p))) {
|
|
145
|
+
totalSkippedFiles++;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const vulns = await this.scanFile(fullPath);
|
|
150
|
+
allVulnerabilities.push(...vulns);
|
|
151
|
+
byLanguage[language].vulnerabilities.push(...vulns);
|
|
152
|
+
byLanguage[language].scannedFiles++;
|
|
153
|
+
totalScannedFiles++;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.warn(`Warning: Failed to scan ${fullPath}: ${error}`);
|
|
157
|
+
totalSkippedFiles++;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
await scanDir(rootPath);
|
|
163
|
+
const duration = Date.now() - startTime;
|
|
164
|
+
return {
|
|
165
|
+
vulnerabilities: allVulnerabilities,
|
|
166
|
+
scannedFiles: totalScannedFiles,
|
|
167
|
+
skippedFiles: totalSkippedFiles,
|
|
168
|
+
duration,
|
|
169
|
+
timestamp: new Date(),
|
|
170
|
+
options: options ?? {},
|
|
171
|
+
summary: {
|
|
172
|
+
critical: allVulnerabilities.filter(v => v.severity === 'critical').length,
|
|
173
|
+
high: allVulnerabilities.filter(v => v.severity === 'high').length,
|
|
174
|
+
medium: allVulnerabilities.filter(v => v.severity === 'medium').length,
|
|
175
|
+
low: allVulnerabilities.filter(v => v.severity === 'low').length,
|
|
176
|
+
info: allVulnerabilities.filter(v => v.severity === 'info').length,
|
|
177
|
+
total: allVulnerabilities.length,
|
|
178
|
+
},
|
|
179
|
+
byLanguage,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get rule count by language
|
|
184
|
+
*/
|
|
185
|
+
getRuleCountByLanguage() {
|
|
186
|
+
return {
|
|
187
|
+
typescript: this.tsScanner.getRuleCount(),
|
|
188
|
+
javascript: this.tsScanner.getRuleCount(), // Same as TypeScript
|
|
189
|
+
python: this.pythonScanner.getRuleCount(),
|
|
190
|
+
php: this.phpScanner.getRuleCount(),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get total rule count
|
|
195
|
+
*/
|
|
196
|
+
getTotalRuleCount() {
|
|
197
|
+
const counts = this.getRuleCountByLanguage();
|
|
198
|
+
// TypeScript and JavaScript share rules, so count only once
|
|
199
|
+
return counts.typescript + counts.python + counts.php;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get CWE coverage
|
|
203
|
+
*/
|
|
204
|
+
getCWECoverage() {
|
|
205
|
+
const cwes = new Set();
|
|
206
|
+
// TypeScript/JavaScript CWEs
|
|
207
|
+
const tsRules = [
|
|
208
|
+
'CWE-89', 'CWE-79', 'CWE-78', 'CWE-22', 'CWE-327', 'CWE-798',
|
|
209
|
+
'CWE-918', 'CWE-502', 'CWE-611', 'CWE-90', 'CWE-1333', 'CWE-362'
|
|
210
|
+
];
|
|
211
|
+
tsRules.forEach(cwe => cwes.add(cwe));
|
|
212
|
+
// Python CWEs
|
|
213
|
+
const pythonRules = [
|
|
214
|
+
'CWE-89', 'CWE-78', 'CWE-94', 'CWE-95', 'CWE-22', 'CWE-502',
|
|
215
|
+
'CWE-611', 'CWE-918', 'CWE-90', 'CWE-798', 'CWE-327', 'CWE-328',
|
|
216
|
+
'CWE-489', 'CWE-1333', 'CWE-1336', 'CWE-617'
|
|
217
|
+
];
|
|
218
|
+
pythonRules.forEach(cwe => cwes.add(cwe));
|
|
219
|
+
// PHP CWEs
|
|
220
|
+
const phpRules = [
|
|
221
|
+
'CWE-89', 'CWE-79', 'CWE-78', 'CWE-94', 'CWE-95', 'CWE-98',
|
|
222
|
+
'CWE-22', 'CWE-502', 'CWE-918', 'CWE-611', 'CWE-90', 'CWE-798',
|
|
223
|
+
'CWE-327', 'CWE-328', 'CWE-384', 'CWE-601', 'CWE-209', 'CWE-614',
|
|
224
|
+
'CWE-1004'
|
|
225
|
+
];
|
|
226
|
+
phpRules.forEach(cwe => cwes.add(cwe));
|
|
227
|
+
return Array.from(cwes).sort();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Create multi-language scanner
|
|
232
|
+
*/
|
|
233
|
+
export function createMultiLanguageScanner() {
|
|
234
|
+
return new MultiLanguageScanner();
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=multi-language-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-language-scanner.js","sourceRoot":"","sources":["../../src/analysis/multi-language-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview PHP vulnerability scanner - static analysis for PHP security vulnerabilities
|
|
3
|
+
* @module @nahisaho/musubix-security/analysis/php-scanner
|
|
4
|
+
* @trace REQ-SEC-PHP-001
|
|
5
|
+
*/
|
|
6
|
+
import type { Vulnerability, ScanOptions, ScanResult, Severity, OWASPCategory } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Reset PHP vulnerability counter (for testing)
|
|
9
|
+
*/
|
|
10
|
+
export declare function resetPhpVulnCounter(): void;
|
|
11
|
+
/**
|
|
12
|
+
* PHP vulnerability pattern
|
|
13
|
+
*/
|
|
14
|
+
interface PhpPattern {
|
|
15
|
+
ruleId: string;
|
|
16
|
+
pattern: RegExp;
|
|
17
|
+
type: string;
|
|
18
|
+
severity: Severity;
|
|
19
|
+
cwes: string[];
|
|
20
|
+
owasp: OWASPCategory[];
|
|
21
|
+
description: string;
|
|
22
|
+
recommendation: string;
|
|
23
|
+
confidence: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* PHP vulnerability scanner
|
|
27
|
+
*/
|
|
28
|
+
export declare class PhpScanner {
|
|
29
|
+
private patterns;
|
|
30
|
+
constructor();
|
|
31
|
+
/**
|
|
32
|
+
* Scan a single PHP file
|
|
33
|
+
*/
|
|
34
|
+
scanFile(filePath: string): Promise<Vulnerability[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Scan PHP content
|
|
37
|
+
*/
|
|
38
|
+
scanContent(content: string, filePath?: string): Vulnerability[];
|
|
39
|
+
/**
|
|
40
|
+
* Scan a directory for PHP files
|
|
41
|
+
*/
|
|
42
|
+
scanDirectory(rootPath: string, options?: ScanOptions): Promise<ScanResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Add custom pattern
|
|
45
|
+
*/
|
|
46
|
+
addPattern(pattern: PhpPattern): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get rule IDs
|
|
49
|
+
*/
|
|
50
|
+
getRuleIds(): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Get rule count
|
|
53
|
+
*/
|
|
54
|
+
getRuleCount(): number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create PHP scanner
|
|
58
|
+
*/
|
|
59
|
+
export declare function createPhpScanner(): PhpScanner;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=php-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"php-scanner.d.ts","sourceRoot":"","sources":["../../src/analysis/php-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,UAAU,EAEV,QAAQ,EACR,aAAa,EACd,MAAM,mBAAmB,CAAC;AAY3B;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0ZD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAe;;IAM/B;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK1D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAsB,GAAG,aAAa,EAAE;IA6B/E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA2DjF;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAIrC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAE7C"}
|