@nahisaho/musubix-security 1.8.0
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 +105 -0
- package/bin/musubix-security-mcp.js +12 -0
- package/bin/musubix-security.js +12 -0
- package/dist/analysis/dependency-auditor.d.ts +30 -0
- package/dist/analysis/dependency-auditor.d.ts.map +1 -0
- package/dist/analysis/dependency-auditor.js +325 -0
- package/dist/analysis/dependency-auditor.js.map +1 -0
- package/dist/analysis/index.d.ts +9 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +9 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/secret-detector.d.ts +44 -0
- package/dist/analysis/secret-detector.d.ts.map +1 -0
- package/dist/analysis/secret-detector.js +465 -0
- package/dist/analysis/secret-detector.js.map +1 -0
- package/dist/analysis/taint-analyzer.d.ts +62 -0
- package/dist/analysis/taint-analyzer.d.ts.map +1 -0
- package/dist/analysis/taint-analyzer.js +519 -0
- package/dist/analysis/taint-analyzer.js.map +1 -0
- package/dist/analysis/vulnerability-scanner.d.ts +58 -0
- package/dist/analysis/vulnerability-scanner.d.ts.map +1 -0
- package/dist/analysis/vulnerability-scanner.js +417 -0
- package/dist/analysis/vulnerability-scanner.js.map +1 -0
- package/dist/cli/commands.d.ts +15 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +405 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/ast-parser.d.ts +87 -0
- package/dist/infrastructure/ast-parser.d.ts.map +1 -0
- package/dist/infrastructure/ast-parser.js +273 -0
- package/dist/infrastructure/ast-parser.js.map +1 -0
- package/dist/infrastructure/cache.d.ts +100 -0
- package/dist/infrastructure/cache.d.ts.map +1 -0
- package/dist/infrastructure/cache.js +288 -0
- package/dist/infrastructure/cache.js.map +1 -0
- package/dist/infrastructure/config-loader.d.ts +35 -0
- package/dist/infrastructure/config-loader.d.ts.map +1 -0
- package/dist/infrastructure/config-loader.js +358 -0
- package/dist/infrastructure/config-loader.js.map +1 -0
- package/dist/infrastructure/file-scanner.d.ts +94 -0
- package/dist/infrastructure/file-scanner.d.ts.map +1 -0
- package/dist/infrastructure/file-scanner.js +189 -0
- package/dist/infrastructure/file-scanner.js.map +1 -0
- package/dist/infrastructure/index.d.ts +9 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +9 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +34 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +88 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +88 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +443 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/services/fix-generator.d.ts +56 -0
- package/dist/services/fix-generator.d.ts.map +1 -0
- package/dist/services/fix-generator.js +346 -0
- package/dist/services/fix-generator.js.map +1 -0
- package/dist/services/fix-verifier.d.ts +62 -0
- package/dist/services/fix-verifier.d.ts.map +1 -0
- package/dist/services/fix-verifier.js +224 -0
- package/dist/services/fix-verifier.js.map +1 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +13 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/report-generator.d.ts +87 -0
- package/dist/services/report-generator.d.ts.map +1 -0
- package/dist/services/report-generator.js +463 -0
- package/dist/services/report-generator.js.map +1 -0
- package/dist/services/security-service.d.ts +151 -0
- package/dist/services/security-service.d.ts.map +1 -0
- package/dist/services/security-service.js +279 -0
- package/dist/services/security-service.js.map +1 -0
- package/dist/types/config.d.ts +188 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +89 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dependency.d.ts +266 -0
- package/dist/types/dependency.d.ts.map +1 -0
- package/dist/types/dependency.js +7 -0
- package/dist/types/dependency.js.map +1 -0
- package/dist/types/fix.d.ts +213 -0
- package/dist/types/fix.d.ts.map +1 -0
- package/dist/types/fix.js +7 -0
- package/dist/types/fix.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/secret.d.ts +151 -0
- package/dist/types/secret.d.ts.map +1 -0
- package/dist/types/secret.js +91 -0
- package/dist/types/secret.js.map +1 -0
- package/dist/types/taint.d.ts +182 -0
- package/dist/types/taint.d.ts.map +1 -0
- package/dist/types/taint.js +24 -0
- package/dist/types/taint.js.map +1 -0
- package/dist/types/vulnerability.d.ts +136 -0
- package/dist/types/vulnerability.d.ts.map +1 -0
- package/dist/types/vulnerability.js +7 -0
- package/dist/types/vulnerability.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Security service - facade for all security scanning operations
|
|
3
|
+
* @module @nahisaho/musubix-security/services/security-service
|
|
4
|
+
* @trace REQ-SEC-SCAN-001
|
|
5
|
+
*/
|
|
6
|
+
import type { SecurityConfig, ScanResult, TaintResult, SecretScanResult, AuditResult, Fix, VerificationResult } from '../types/index.js';
|
|
7
|
+
import { type ReportFormat } from './report-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Scan options
|
|
10
|
+
*/
|
|
11
|
+
export interface ScanOptions {
|
|
12
|
+
/** Target path (file or directory) */
|
|
13
|
+
target: string;
|
|
14
|
+
/** Enable vulnerability scanning */
|
|
15
|
+
vulnerabilities?: boolean;
|
|
16
|
+
/** Enable taint analysis */
|
|
17
|
+
taint?: boolean;
|
|
18
|
+
/** Enable secret detection */
|
|
19
|
+
secrets?: boolean;
|
|
20
|
+
/** Enable dependency audit */
|
|
21
|
+
dependencies?: boolean;
|
|
22
|
+
/** Generate fixes */
|
|
23
|
+
generateFixes?: boolean;
|
|
24
|
+
/** Verify fixes */
|
|
25
|
+
verifyFixes?: boolean;
|
|
26
|
+
/** Use cache */
|
|
27
|
+
useCache?: boolean;
|
|
28
|
+
/** Configuration overrides */
|
|
29
|
+
config?: Partial<SecurityConfig>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Complete scan result
|
|
33
|
+
*/
|
|
34
|
+
export interface CompleteScanResult {
|
|
35
|
+
/** Scan metadata */
|
|
36
|
+
metadata: {
|
|
37
|
+
target: string;
|
|
38
|
+
scanTime: Date;
|
|
39
|
+
duration: number;
|
|
40
|
+
filesScanned: number;
|
|
41
|
+
rulesApplied: number;
|
|
42
|
+
};
|
|
43
|
+
/** Vulnerability scan results */
|
|
44
|
+
vulnerabilities?: ScanResult;
|
|
45
|
+
/** Taint analysis results */
|
|
46
|
+
taint?: TaintResult;
|
|
47
|
+
/** Secret scan results */
|
|
48
|
+
secrets?: SecretScanResult;
|
|
49
|
+
/** Dependency audit results */
|
|
50
|
+
dependencies?: AuditResult;
|
|
51
|
+
/** Generated fixes */
|
|
52
|
+
fixes?: Fix[];
|
|
53
|
+
/** Fix verification results */
|
|
54
|
+
verifications?: VerificationResult[];
|
|
55
|
+
/** Summary statistics */
|
|
56
|
+
summary: {
|
|
57
|
+
totalVulnerabilities: number;
|
|
58
|
+
bySeverity: {
|
|
59
|
+
critical: number;
|
|
60
|
+
high: number;
|
|
61
|
+
medium: number;
|
|
62
|
+
low: number;
|
|
63
|
+
info: number;
|
|
64
|
+
};
|
|
65
|
+
taintedPaths: number;
|
|
66
|
+
secretsFound: number;
|
|
67
|
+
vulnerableDependencies: number;
|
|
68
|
+
fixesGenerated: number;
|
|
69
|
+
fixesVerified: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Security service - main facade for security operations
|
|
74
|
+
*/
|
|
75
|
+
export declare class SecurityService {
|
|
76
|
+
private config;
|
|
77
|
+
private vulnerabilityScanner;
|
|
78
|
+
private taintAnalyzer;
|
|
79
|
+
private secretDetector;
|
|
80
|
+
private dependencyAuditor;
|
|
81
|
+
private fixGenerator;
|
|
82
|
+
private fixVerifier;
|
|
83
|
+
private reportGenerator;
|
|
84
|
+
private fileScanner;
|
|
85
|
+
constructor(config?: Partial<SecurityConfig>);
|
|
86
|
+
/**
|
|
87
|
+
* Run a complete security scan
|
|
88
|
+
*/
|
|
89
|
+
scan(options: ScanOptions): Promise<CompleteScanResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Quick scan - vulnerabilities only
|
|
92
|
+
*/
|
|
93
|
+
quickScan(target: string): Promise<ScanResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Scan a single file
|
|
96
|
+
*/
|
|
97
|
+
scanFile(filePath: string): Promise<ScanResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Run taint analysis only
|
|
100
|
+
*/
|
|
101
|
+
analyzeTaint(target: string): Promise<TaintResult>;
|
|
102
|
+
/**
|
|
103
|
+
* Detect secrets only
|
|
104
|
+
*/
|
|
105
|
+
detectSecrets(target: string): Promise<SecretScanResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Audit dependencies only
|
|
108
|
+
*/
|
|
109
|
+
auditDependencies(target: string): Promise<AuditResult>;
|
|
110
|
+
/**
|
|
111
|
+
* Generate a fix for a vulnerability
|
|
112
|
+
*/
|
|
113
|
+
generateFix(vulnerabilityId: string, scanResult: ScanResult): Promise<Fix | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Verify a fix
|
|
116
|
+
*/
|
|
117
|
+
verifyFix(fix: Fix): Promise<VerificationResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Generate a report from scan results
|
|
120
|
+
*/
|
|
121
|
+
generateReport(scanResult: CompleteScanResult, format?: ReportFormat): Promise<string>;
|
|
122
|
+
/**
|
|
123
|
+
* Generate summary statistics
|
|
124
|
+
*/
|
|
125
|
+
private generateSummary;
|
|
126
|
+
/**
|
|
127
|
+
* Get current configuration
|
|
128
|
+
*/
|
|
129
|
+
getConfig(): SecurityConfig;
|
|
130
|
+
/**
|
|
131
|
+
* Update configuration
|
|
132
|
+
*/
|
|
133
|
+
setConfig(config: Partial<SecurityConfig>): void;
|
|
134
|
+
/**
|
|
135
|
+
* Load configuration from file
|
|
136
|
+
*/
|
|
137
|
+
loadConfigFile(searchFrom?: string): Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create a security service
|
|
141
|
+
*/
|
|
142
|
+
export declare function createSecurityService(config?: Partial<SecurityConfig>): SecurityService;
|
|
143
|
+
/**
|
|
144
|
+
* Quick scan helper function
|
|
145
|
+
*/
|
|
146
|
+
export declare function scanForVulnerabilities(target: string): Promise<ScanResult>;
|
|
147
|
+
/**
|
|
148
|
+
* Full scan helper function
|
|
149
|
+
*/
|
|
150
|
+
export declare function runSecurityScan(target: string, options?: Partial<ScanOptions>): Promise<CompleteScanResult>;
|
|
151
|
+
//# sourceMappingURL=security-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-service.d.ts","sourceRoot":"","sources":["../../src/services/security-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,GAAG,EACH,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qBAAqB;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,iCAAiC;IACjC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,sBAAsB;IACtB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,+BAA+B;IAC/B,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACrC,yBAAyB;IACzB,OAAO,EAAE;QACP,oBAAoB,EAAE,MAAM,CAAC;QAC7B,UAAU,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAkBhD;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4G7D;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAoBrD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9D;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI7D;;OAEG;IACG,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAUvF;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAItD;;OAEG;IACG,cAAc,CAClB,UAAU,EAAE,kBAAkB,EAC9B,MAAM,GAAE,YAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC;IA4BlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA6BvB;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAIhD;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,eAAe,CAEvF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Security service - facade for all security scanning operations
|
|
3
|
+
* @module @nahisaho/musubix-security/services/security-service
|
|
4
|
+
* @trace REQ-SEC-SCAN-001
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { DEFAULT_CONFIG } from '../types/index.js';
|
|
8
|
+
import { VulnerabilityScanner } from '../analysis/index.js';
|
|
9
|
+
import { TaintAnalyzer } from '../analysis/index.js';
|
|
10
|
+
import { SecretDetector } from '../analysis/index.js';
|
|
11
|
+
import { DependencyAuditor } from '../analysis/index.js';
|
|
12
|
+
import { FileScanner } from '../infrastructure/index.js';
|
|
13
|
+
import { loadConfig } from '../infrastructure/index.js';
|
|
14
|
+
import { FixGenerator } from './fix-generator.js';
|
|
15
|
+
import { FixVerifier } from './fix-verifier.js';
|
|
16
|
+
import { ReportGenerator, } from './report-generator.js';
|
|
17
|
+
/**
|
|
18
|
+
* Security service - main facade for security operations
|
|
19
|
+
*/
|
|
20
|
+
export class SecurityService {
|
|
21
|
+
config;
|
|
22
|
+
vulnerabilityScanner;
|
|
23
|
+
taintAnalyzer;
|
|
24
|
+
secretDetector;
|
|
25
|
+
dependencyAuditor;
|
|
26
|
+
fixGenerator;
|
|
27
|
+
fixVerifier;
|
|
28
|
+
reportGenerator;
|
|
29
|
+
fileScanner;
|
|
30
|
+
constructor(config = {}) {
|
|
31
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
32
|
+
// Initialize components
|
|
33
|
+
this.vulnerabilityScanner = new VulnerabilityScanner();
|
|
34
|
+
this.taintAnalyzer = new TaintAnalyzer();
|
|
35
|
+
this.secretDetector = new SecretDetector();
|
|
36
|
+
this.dependencyAuditor = new DependencyAuditor();
|
|
37
|
+
this.fixGenerator = new FixGenerator();
|
|
38
|
+
this.fixVerifier = new FixVerifier();
|
|
39
|
+
this.reportGenerator = new ReportGenerator(this.config.report);
|
|
40
|
+
this.fileScanner = new FileScanner({
|
|
41
|
+
extensions: this.config.scan?.severityFilter,
|
|
42
|
+
excludePatterns: this.config.excludePatterns,
|
|
43
|
+
maxFileSize: this.config.scan?.maxFileSize,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Run a complete security scan
|
|
48
|
+
*/
|
|
49
|
+
async scan(options) {
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
const scanConfig = { ...this.config, ...options.config };
|
|
52
|
+
// Determine what to scan
|
|
53
|
+
const runVulns = options.vulnerabilities ?? true;
|
|
54
|
+
const runTaint = options.taint ?? (scanConfig.taint !== undefined);
|
|
55
|
+
const runSecrets = options.secrets ?? (scanConfig.secret !== undefined);
|
|
56
|
+
const runDeps = options.dependencies ?? (scanConfig.audit !== undefined);
|
|
57
|
+
const genFixes = options.generateFixes ?? true;
|
|
58
|
+
const verFixes = options.verifyFixes ?? false;
|
|
59
|
+
// Collect files to scan
|
|
60
|
+
const files = await this.fileScanner.scan(options.target);
|
|
61
|
+
// Run scans in parallel where possible
|
|
62
|
+
const results = {};
|
|
63
|
+
// Run parallel scans
|
|
64
|
+
const promises = [];
|
|
65
|
+
if (runVulns) {
|
|
66
|
+
promises.push(this.vulnerabilityScanner.scanDirectory(options.target).then((r) => {
|
|
67
|
+
results.vulnerabilities = r;
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
if (runTaint) {
|
|
71
|
+
promises.push(this.taintAnalyzer.analyze(options.target).then((r) => {
|
|
72
|
+
results.taint = r;
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
if (runSecrets) {
|
|
76
|
+
promises.push(this.secretDetector.scan(options.target).then((r) => {
|
|
77
|
+
results.secrets = r;
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
if (runDeps) {
|
|
81
|
+
promises.push(this.dependencyAuditor.audit(options.target).then((r) => {
|
|
82
|
+
results.dependencies = r;
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
await Promise.all(promises);
|
|
86
|
+
// Generate fixes if requested
|
|
87
|
+
let fixes = [];
|
|
88
|
+
if (genFixes && results.vulnerabilities) {
|
|
89
|
+
fixes = await this.fixGenerator.generateFixes(results.vulnerabilities.vulnerabilities);
|
|
90
|
+
// Add taint-based fixes
|
|
91
|
+
if (results.taint) {
|
|
92
|
+
for (const taintPath of results.taint.unsafePaths) {
|
|
93
|
+
const taintFix = await this.fixGenerator.generateTaintFix(taintPath);
|
|
94
|
+
if (taintFix) {
|
|
95
|
+
fixes.push(taintFix);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Verify fixes if requested
|
|
101
|
+
let verifications = [];
|
|
102
|
+
if (verFixes && fixes.length > 0) {
|
|
103
|
+
verifications = await this.fixVerifier.verifyBatch(fixes);
|
|
104
|
+
}
|
|
105
|
+
// Calculate duration
|
|
106
|
+
const duration = Date.now() - startTime;
|
|
107
|
+
// Generate summary
|
|
108
|
+
const summary = this.generateSummary(results, fixes, verifications);
|
|
109
|
+
return {
|
|
110
|
+
metadata: {
|
|
111
|
+
target: options.target,
|
|
112
|
+
scanTime: new Date(),
|
|
113
|
+
duration,
|
|
114
|
+
filesScanned: files.length,
|
|
115
|
+
rulesApplied: this.vulnerabilityScanner.getRuleCount(),
|
|
116
|
+
},
|
|
117
|
+
vulnerabilities: results.vulnerabilities,
|
|
118
|
+
taint: results.taint,
|
|
119
|
+
secrets: results.secrets,
|
|
120
|
+
dependencies: results.dependencies,
|
|
121
|
+
fixes: genFixes ? fixes : undefined,
|
|
122
|
+
verifications: verFixes ? verifications : undefined,
|
|
123
|
+
summary,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Quick scan - vulnerabilities only
|
|
128
|
+
*/
|
|
129
|
+
async quickScan(target) {
|
|
130
|
+
return this.vulnerabilityScanner.scanDirectory(target);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Scan a single file
|
|
134
|
+
*/
|
|
135
|
+
async scanFile(filePath) {
|
|
136
|
+
const vulnerabilities = this.vulnerabilityScanner.scanFile(filePath);
|
|
137
|
+
return {
|
|
138
|
+
vulnerabilities,
|
|
139
|
+
scannedFiles: 1,
|
|
140
|
+
skippedFiles: 0,
|
|
141
|
+
duration: 0,
|
|
142
|
+
timestamp: new Date(),
|
|
143
|
+
options: {},
|
|
144
|
+
summary: {
|
|
145
|
+
critical: vulnerabilities.filter((v) => v.severity === 'critical').length,
|
|
146
|
+
high: vulnerabilities.filter((v) => v.severity === 'high').length,
|
|
147
|
+
medium: vulnerabilities.filter((v) => v.severity === 'medium').length,
|
|
148
|
+
low: vulnerabilities.filter((v) => v.severity === 'low').length,
|
|
149
|
+
info: vulnerabilities.filter((v) => v.severity === 'info').length,
|
|
150
|
+
total: vulnerabilities.length,
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Run taint analysis only
|
|
156
|
+
*/
|
|
157
|
+
async analyzeTaint(target) {
|
|
158
|
+
return this.taintAnalyzer.analyze(target);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Detect secrets only
|
|
162
|
+
*/
|
|
163
|
+
async detectSecrets(target) {
|
|
164
|
+
return this.secretDetector.scan(target);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Audit dependencies only
|
|
168
|
+
*/
|
|
169
|
+
async auditDependencies(target) {
|
|
170
|
+
return this.dependencyAuditor.audit(target);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Generate a fix for a vulnerability
|
|
174
|
+
*/
|
|
175
|
+
async generateFix(vulnerabilityId, scanResult) {
|
|
176
|
+
const vulnerability = scanResult.vulnerabilities.find((v) => v.id === vulnerabilityId);
|
|
177
|
+
if (!vulnerability) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return this.fixGenerator.generateFix(vulnerability);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Verify a fix
|
|
184
|
+
*/
|
|
185
|
+
async verifyFix(fix) {
|
|
186
|
+
return this.fixVerifier.verify(fix);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Generate a report from scan results
|
|
190
|
+
*/
|
|
191
|
+
async generateReport(scanResult, format = 'json') {
|
|
192
|
+
const combined = {
|
|
193
|
+
vulnerabilities: scanResult.vulnerabilities ?? {
|
|
194
|
+
vulnerabilities: [],
|
|
195
|
+
scannedFiles: 0,
|
|
196
|
+
skippedFiles: 0,
|
|
197
|
+
duration: 0,
|
|
198
|
+
timestamp: new Date(),
|
|
199
|
+
options: {},
|
|
200
|
+
summary: { critical: 0, high: 0, medium: 0, low: 0, info: 0, total: 0 },
|
|
201
|
+
},
|
|
202
|
+
dependencies: scanResult.dependencies,
|
|
203
|
+
taint: scanResult.taint,
|
|
204
|
+
secrets: scanResult.secrets,
|
|
205
|
+
fixes: scanResult.fixes,
|
|
206
|
+
};
|
|
207
|
+
const metadata = {
|
|
208
|
+
title: 'Security Scan Report',
|
|
209
|
+
project: path.basename(scanResult.metadata.target),
|
|
210
|
+
scanTime: scanResult.metadata.scanTime,
|
|
211
|
+
duration: scanResult.metadata.duration,
|
|
212
|
+
targetPath: scanResult.metadata.target,
|
|
213
|
+
};
|
|
214
|
+
return this.reportGenerator.generate(combined, metadata, format);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Generate summary statistics
|
|
218
|
+
*/
|
|
219
|
+
generateSummary(results, fixes, verifications) {
|
|
220
|
+
const vulns = results.vulnerabilities?.vulnerabilities ?? [];
|
|
221
|
+
return {
|
|
222
|
+
totalVulnerabilities: vulns.length,
|
|
223
|
+
bySeverity: {
|
|
224
|
+
critical: vulns.filter((v) => v.severity === 'critical').length,
|
|
225
|
+
high: vulns.filter((v) => v.severity === 'high').length,
|
|
226
|
+
medium: vulns.filter((v) => v.severity === 'medium').length,
|
|
227
|
+
low: vulns.filter((v) => v.severity === 'low').length,
|
|
228
|
+
info: vulns.filter((v) => v.severity === 'info').length,
|
|
229
|
+
},
|
|
230
|
+
taintedPaths: results.taint?.unsafePaths.length ?? 0,
|
|
231
|
+
secretsFound: results.secrets?.summary.total ?? 0,
|
|
232
|
+
vulnerableDependencies: results.dependencies?.vulnerableDependencies.length ?? 0,
|
|
233
|
+
fixesGenerated: fixes.length,
|
|
234
|
+
fixesVerified: verifications.filter((v) => v.status === 'verified').length,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get current configuration
|
|
239
|
+
*/
|
|
240
|
+
getConfig() {
|
|
241
|
+
return { ...this.config };
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Update configuration
|
|
245
|
+
*/
|
|
246
|
+
setConfig(config) {
|
|
247
|
+
this.config = { ...this.config, ...config };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Load configuration from file
|
|
251
|
+
*/
|
|
252
|
+
async loadConfigFile(searchFrom) {
|
|
253
|
+
const loaded = await loadConfig(searchFrom);
|
|
254
|
+
if (loaded) {
|
|
255
|
+
this.config = { ...this.config, ...loaded };
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Create a security service
|
|
261
|
+
*/
|
|
262
|
+
export function createSecurityService(config) {
|
|
263
|
+
return new SecurityService(config);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Quick scan helper function
|
|
267
|
+
*/
|
|
268
|
+
export async function scanForVulnerabilities(target) {
|
|
269
|
+
const service = createSecurityService();
|
|
270
|
+
return service.quickScan(target);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Full scan helper function
|
|
274
|
+
*/
|
|
275
|
+
export async function runSecurityScan(target, options) {
|
|
276
|
+
const service = createSecurityService();
|
|
277
|
+
return service.scan({ target, ...options });
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=security-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-service.js","sourceRoot":"","sources":["../../src/services/security-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAWlC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,eAAe,GAIhB,MAAM,uBAAuB,CAAC;AAoE/B;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAiB;IACvB,oBAAoB,CAAuB;IAC3C,aAAa,CAAgB;IAC7B,cAAc,CAAiB;IAC/B,iBAAiB,CAAoB;IACrC,YAAY,CAAe;IAC3B,WAAW,CAAc;IACzB,eAAe,CAAkB;IACjC,WAAW,CAAc;IAEjC,YAAY,SAAkC,EAAE;QAC9C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAE/C,wBAAwB;QACxB,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAiD;YAC/E,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;YAC5C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW;SAC3C,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAEzD,yBAAyB;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAE9C,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1D,uCAAuC;QACvC,MAAM,OAAO,GAKT,EAAE,CAAC;QAEP,qBAAqB;QACrB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjE,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACpD,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClD,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtD,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;YAC3B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,8BAA8B;QAC9B,IAAI,KAAK,GAAU,EAAE,CAAC;QACtB,IAAI,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YACxC,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAC3C,OAAO,CAAC,eAAe,CAAC,eAAe,CACxC,CAAC;YAEF,wBAAwB;YACxB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBACrE,IAAI,QAAQ,EAAE,CAAC;wBACb,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,aAAa,GAAyB,EAAE,CAAC;QAC7C,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAED,qBAAqB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAExC,mBAAmB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAEpE,OAAO;YACL,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,IAAI,IAAI,EAAE;gBACpB,QAAQ;gBACR,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;aACvD;YACD,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACnC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACnD,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO;YACL,eAAe;YACf,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;gBACzE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;gBACjE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;gBACrE,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;gBAC/D,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;gBACjE,KAAK,EAAE,eAAe,CAAC,MAAM;aAC9B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,eAAuB,EAAE,UAAsB;QAC/D,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,eAAe,CAChC,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,GAAQ;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,UAA8B,EAC9B,SAAuB,MAAM;QAE7B,MAAM,QAAQ,GAAoB;YAChC,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI;gBAC7C,eAAe,EAAE,EAAE;gBACnB,YAAY,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;aACxE;YACD,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;QAEF,MAAM,QAAQ,GAAmB;YAC/B,KAAK,EAAE,sBAAsB;YAC7B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ;YACtC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ;YACtC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM;SACvC,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,OAKC,EACD,KAAY,EACZ,aAAmC;QAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,eAAe,IAAI,EAAE,CAAC;QAE7D,OAAO;YACL,oBAAoB,EAAE,KAAK,CAAC,MAAM;YAClC,UAAU,EAAE;gBACV,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;gBAC/D,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;gBACvD,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;gBAC3D,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;gBACrD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;aACxD;YACD,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;YACpD,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;YACjD,sBAAsB,EAAE,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC,MAAM,IAAI,CAAC;YAChF,cAAc,EAAE,KAAK,CAAC,MAAM;YAC5B,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;SAC3E,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAA+B;QACvC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAmB;QACtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAgC;IACpE,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc;IACzD,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,OAA8B;IAE9B,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Security configuration type definitions
|
|
3
|
+
* @module @nahisaho/musubix-security/types/config
|
|
4
|
+
* @trace REQ-SEC-CONFIG-001, REQ-SEC-CONFIG-002, REQ-SEC-REPORT-001
|
|
5
|
+
*/
|
|
6
|
+
import type { Severity, ScanOptions } from './vulnerability.js';
|
|
7
|
+
import type { TaintAnalysisOptions } from './taint.js';
|
|
8
|
+
import type { FixGenerationOptions } from './fix.js';
|
|
9
|
+
import type { SecretScanOptions } from './secret.js';
|
|
10
|
+
import type { AuditOptions, SBOMOptions, LicensePolicy } from './dependency.js';
|
|
11
|
+
/**
|
|
12
|
+
* Output format for reports
|
|
13
|
+
* @trace REQ-SEC-REPORT-001
|
|
14
|
+
*/
|
|
15
|
+
export type ReportFormat = 'json' | 'sarif' | 'markdown' | 'html';
|
|
16
|
+
/**
|
|
17
|
+
* Knowledge graph mode
|
|
18
|
+
* @trace REQ-SEC-KG-001
|
|
19
|
+
*/
|
|
20
|
+
export type KnowledgeGraphMode = 'local' | 'global' | 'hybrid' | 'disabled';
|
|
21
|
+
/**
|
|
22
|
+
* Cache strategy
|
|
23
|
+
*/
|
|
24
|
+
export type CacheStrategy = 'memory' | 'file' | 'none';
|
|
25
|
+
/**
|
|
26
|
+
* Report configuration
|
|
27
|
+
* @trace REQ-SEC-REPORT-001
|
|
28
|
+
*/
|
|
29
|
+
export interface ReportConfig {
|
|
30
|
+
/** Output format(s) */
|
|
31
|
+
format: ReportFormat | ReportFormat[];
|
|
32
|
+
/** Output file path (stdout if not specified) */
|
|
33
|
+
outputPath?: string;
|
|
34
|
+
/** Include code snippets in report */
|
|
35
|
+
includeCode?: boolean;
|
|
36
|
+
/** Include code snippets in report (alias) */
|
|
37
|
+
includeCodeSnippets?: boolean;
|
|
38
|
+
/** Include fix suggestions in report */
|
|
39
|
+
includeFixes?: boolean;
|
|
40
|
+
/** Include taint paths in report */
|
|
41
|
+
includeTaintPaths?: boolean;
|
|
42
|
+
/** Group by file or vulnerability type */
|
|
43
|
+
groupBy?: 'file' | 'type' | 'severity';
|
|
44
|
+
/** Sort by */
|
|
45
|
+
sortBy?: 'severity' | 'file' | 'type';
|
|
46
|
+
/** Maximum vulnerabilities per file in report */
|
|
47
|
+
maxPerFile?: number;
|
|
48
|
+
/** Include summary section */
|
|
49
|
+
includeSummary?: boolean;
|
|
50
|
+
/** Custom report template path */
|
|
51
|
+
templatePath?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Knowledge graph configuration
|
|
55
|
+
* @trace REQ-SEC-KG-001
|
|
56
|
+
*/
|
|
57
|
+
export interface KnowledgeGraphConfig {
|
|
58
|
+
/** KG mode */
|
|
59
|
+
mode: KnowledgeGraphMode;
|
|
60
|
+
/** Local KG database path */
|
|
61
|
+
localDbPath?: string;
|
|
62
|
+
/** Global YATA endpoint */
|
|
63
|
+
globalEndpoint?: string;
|
|
64
|
+
/** Auto-learn from scan results */
|
|
65
|
+
autoLearn?: boolean;
|
|
66
|
+
/** Namespace for learned patterns */
|
|
67
|
+
namespace?: string;
|
|
68
|
+
/** Maximum patterns to cache */
|
|
69
|
+
maxCachedPatterns?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* AI assistance configuration
|
|
73
|
+
*/
|
|
74
|
+
export interface AIConfig {
|
|
75
|
+
/** Enable AI-assisted features */
|
|
76
|
+
enabled: boolean;
|
|
77
|
+
/** AI provider */
|
|
78
|
+
provider?: 'vscode-lm' | 'openai' | 'anthropic';
|
|
79
|
+
/** Model identifier */
|
|
80
|
+
model?: string;
|
|
81
|
+
/** Maximum tokens for generation */
|
|
82
|
+
maxTokens?: number;
|
|
83
|
+
/** Temperature for generation */
|
|
84
|
+
temperature?: number;
|
|
85
|
+
/** Use AI for fix generation */
|
|
86
|
+
useForFixes?: boolean;
|
|
87
|
+
/** Use AI for vulnerability explanation */
|
|
88
|
+
useForExplanation?: boolean;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Cache configuration
|
|
92
|
+
*/
|
|
93
|
+
export interface CacheConfig {
|
|
94
|
+
/** Cache strategy */
|
|
95
|
+
strategy: CacheStrategy;
|
|
96
|
+
/** Cache directory for file strategy */
|
|
97
|
+
cacheDir?: string;
|
|
98
|
+
/** TTL in seconds for cached entries */
|
|
99
|
+
ttlSeconds?: number;
|
|
100
|
+
/** Maximum cache size in MB */
|
|
101
|
+
maxSizeMB?: number;
|
|
102
|
+
/** Cache AST parse results */
|
|
103
|
+
cacheAST?: boolean;
|
|
104
|
+
/** Cache vulnerability patterns */
|
|
105
|
+
cachePatterns?: boolean;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* CI/CD integration configuration
|
|
109
|
+
*/
|
|
110
|
+
export interface CIConfig {
|
|
111
|
+
/** Fail build on severity */
|
|
112
|
+
failOnSeverity?: Severity;
|
|
113
|
+
/** Fail build on vulnerability count */
|
|
114
|
+
failOnCount?: number;
|
|
115
|
+
/** Fail build on new vulnerabilities only */
|
|
116
|
+
failOnNewOnly?: boolean;
|
|
117
|
+
/** Baseline file path for comparison */
|
|
118
|
+
baselinePath?: string;
|
|
119
|
+
/** Output SARIF for GitHub Code Scanning */
|
|
120
|
+
sarifOutput?: boolean;
|
|
121
|
+
/** SARIF output path */
|
|
122
|
+
sarifPath?: string;
|
|
123
|
+
/** Enable PR comments */
|
|
124
|
+
prComments?: boolean;
|
|
125
|
+
/** CI platform */
|
|
126
|
+
platform?: 'github' | 'gitlab' | 'azure-devops' | 'jenkins';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Complete security configuration
|
|
130
|
+
* @trace REQ-SEC-CONFIG-001
|
|
131
|
+
*/
|
|
132
|
+
export interface SecurityConfig {
|
|
133
|
+
/** Configuration version */
|
|
134
|
+
version: '1.0';
|
|
135
|
+
/** Project root path */
|
|
136
|
+
projectRoot?: string;
|
|
137
|
+
/** Scan configuration */
|
|
138
|
+
scan?: ScanOptions;
|
|
139
|
+
/** Taint analysis configuration */
|
|
140
|
+
taint?: TaintAnalysisOptions;
|
|
141
|
+
/** Fix generation configuration */
|
|
142
|
+
fix?: FixGenerationOptions;
|
|
143
|
+
/** Secret detection configuration */
|
|
144
|
+
secret?: SecretScanOptions;
|
|
145
|
+
/** Dependency audit configuration */
|
|
146
|
+
audit?: AuditOptions;
|
|
147
|
+
/** SBOM generation configuration */
|
|
148
|
+
sbom?: SBOMOptions;
|
|
149
|
+
/** License policy */
|
|
150
|
+
licensePolicy?: LicensePolicy;
|
|
151
|
+
/** Report configuration */
|
|
152
|
+
report?: ReportConfig;
|
|
153
|
+
/** Knowledge graph configuration */
|
|
154
|
+
knowledgeGraph?: KnowledgeGraphConfig;
|
|
155
|
+
/** AI configuration */
|
|
156
|
+
ai?: AIConfig;
|
|
157
|
+
/** Cache configuration */
|
|
158
|
+
cache?: CacheConfig;
|
|
159
|
+
/** CI/CD configuration */
|
|
160
|
+
ci?: CIConfig;
|
|
161
|
+
/** Global severity filter */
|
|
162
|
+
severityFilter?: Severity[];
|
|
163
|
+
/** Global exclude patterns */
|
|
164
|
+
excludePatterns?: string[];
|
|
165
|
+
/** Custom rules directory */
|
|
166
|
+
customRulesDir?: string;
|
|
167
|
+
/** Enable verbose logging */
|
|
168
|
+
verbose?: boolean;
|
|
169
|
+
/** Enable debug mode */
|
|
170
|
+
debug?: boolean;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Default security configuration
|
|
174
|
+
*/
|
|
175
|
+
export declare const DEFAULT_CONFIG: SecurityConfig;
|
|
176
|
+
/**
|
|
177
|
+
* Configuration file locations (in order of precedence)
|
|
178
|
+
*/
|
|
179
|
+
export declare const CONFIG_FILE_LOCATIONS: string[];
|
|
180
|
+
/**
|
|
181
|
+
* Environment variable prefix for configuration
|
|
182
|
+
*/
|
|
183
|
+
export declare const ENV_PREFIX = "MUSUBIX_SECURITY_";
|
|
184
|
+
/**
|
|
185
|
+
* Configuration schema version
|
|
186
|
+
*/
|
|
187
|
+
export declare const CONFIG_SCHEMA_VERSION = "1.0";
|
|
188
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|