@nahisaho/musubix-security 1.8.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +27 -0
  2. package/dist/analyzers/ai/index.d.ts +6 -0
  3. package/dist/analyzers/ai/index.d.ts.map +1 -0
  4. package/dist/analyzers/ai/index.js +6 -0
  5. package/dist/analyzers/ai/index.js.map +1 -0
  6. package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
  7. package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
  8. package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
  9. package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
  10. package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
  11. package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
  12. package/dist/analyzers/api/api-security-analyzer.js +581 -0
  13. package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
  14. package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
  15. package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
  16. package/dist/analyzers/compliance/compliance-checker.js +772 -0
  17. package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
  18. package/dist/analyzers/container/image-scanner.d.ts +163 -0
  19. package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
  20. package/dist/analyzers/container/image-scanner.js +459 -0
  21. package/dist/analyzers/container/image-scanner.js.map +1 -0
  22. package/dist/analyzers/container/index.d.ts +6 -0
  23. package/dist/analyzers/container/index.d.ts.map +1 -0
  24. package/dist/analyzers/container/index.js +6 -0
  25. package/dist/analyzers/container/index.js.map +1 -0
  26. package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
  27. package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
  28. package/dist/analyzers/dashboard/security-dashboard.js +796 -0
  29. package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
  30. package/dist/analyzers/iac/iac-checker.d.ts +124 -0
  31. package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
  32. package/dist/analyzers/iac/iac-checker.js +755 -0
  33. package/dist/analyzers/iac/iac-checker.js.map +1 -0
  34. package/dist/analyzers/iac/index.d.ts +6 -0
  35. package/dist/analyzers/iac/index.d.ts.map +1 -0
  36. package/dist/analyzers/iac/index.js +6 -0
  37. package/dist/analyzers/iac/index.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +9 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +13 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
  43. package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
  44. package/dist/analyzers/monitor/realtime-monitor.js +601 -0
  45. package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
  46. package/dist/analyzers/sast/index.d.ts +7 -0
  47. package/dist/analyzers/sast/index.d.ts.map +1 -0
  48. package/dist/analyzers/sast/index.js +7 -0
  49. package/dist/analyzers/sast/index.js.map +1 -0
  50. package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
  51. package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
  53. package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
  54. package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
  55. package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
  56. package/dist/analyzers/sast/zero-day-detector.js +593 -0
  57. package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
  58. package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
  59. package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
  60. package/dist/analyzers/sca/dependency-scanner.js +642 -0
  61. package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
  62. package/dist/core/index.d.ts +8 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +10 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/pipeline-manager.d.ts +105 -0
  67. package/dist/core/pipeline-manager.d.ts.map +1 -0
  68. package/dist/core/pipeline-manager.js +449 -0
  69. package/dist/core/pipeline-manager.js.map +1 -0
  70. package/dist/core/result-aggregator.d.ts +96 -0
  71. package/dist/core/result-aggregator.d.ts.map +1 -0
  72. package/dist/core/result-aggregator.js +462 -0
  73. package/dist/core/result-aggregator.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +68 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/integrations/ci-integration.d.ts +227 -0
  79. package/dist/integrations/ci-integration.d.ts.map +1 -0
  80. package/dist/integrations/ci-integration.js +472 -0
  81. package/dist/integrations/ci-integration.js.map +1 -0
  82. package/dist/integrations/git-hooks.d.ts +155 -0
  83. package/dist/integrations/git-hooks.d.ts.map +1 -0
  84. package/dist/integrations/git-hooks.js +425 -0
  85. package/dist/integrations/git-hooks.js.map +1 -0
  86. package/dist/integrations/index.d.ts +9 -0
  87. package/dist/integrations/index.d.ts.map +1 -0
  88. package/dist/integrations/index.js +9 -0
  89. package/dist/integrations/index.js.map +1 -0
  90. package/dist/integrations/report-aggregator.d.ts +250 -0
  91. package/dist/integrations/report-aggregator.d.ts.map +1 -0
  92. package/dist/integrations/report-aggregator.js +488 -0
  93. package/dist/integrations/report-aggregator.js.map +1 -0
  94. package/dist/integrations/vscode-integration.d.ts +245 -0
  95. package/dist/integrations/vscode-integration.d.ts.map +1 -0
  96. package/dist/integrations/vscode-integration.js +449 -0
  97. package/dist/integrations/vscode-integration.js.map +1 -0
  98. package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
  99. package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
  100. package/dist/intelligence/attack-pattern-matcher.js +887 -0
  101. package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
  102. package/dist/intelligence/index.d.ts +12 -0
  103. package/dist/intelligence/index.d.ts.map +1 -0
  104. package/dist/intelligence/index.js +18 -0
  105. package/dist/intelligence/index.js.map +1 -0
  106. package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
  107. package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
  108. package/dist/intelligence/neuro-symbolic-core.js +403 -0
  109. package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
  110. package/dist/intelligence/predictive-analyzer.d.ts +317 -0
  111. package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
  112. package/dist/intelligence/predictive-analyzer.js +714 -0
  113. package/dist/intelligence/predictive-analyzer.js.map +1 -0
  114. package/dist/intelligence/risk-scorer.d.ts +333 -0
  115. package/dist/intelligence/risk-scorer.d.ts.map +1 -0
  116. package/dist/intelligence/risk-scorer.js +824 -0
  117. package/dist/intelligence/risk-scorer.js.map +1 -0
  118. package/dist/intelligence/security-analytics.d.ts +349 -0
  119. package/dist/intelligence/security-analytics.d.ts.map +1 -0
  120. package/dist/intelligence/security-analytics.js +813 -0
  121. package/dist/intelligence/security-analytics.js.map +1 -0
  122. package/dist/intelligence/threat-intelligence.d.ts +288 -0
  123. package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
  124. package/dist/intelligence/threat-intelligence.js +639 -0
  125. package/dist/intelligence/threat-intelligence.js.map +1 -0
  126. package/dist/policy/index.d.ts +6 -0
  127. package/dist/policy/index.d.ts.map +1 -0
  128. package/dist/policy/index.js +6 -0
  129. package/dist/policy/index.js.map +1 -0
  130. package/dist/policy/policy-engine.d.ts +254 -0
  131. package/dist/policy/policy-engine.d.ts.map +1 -0
  132. package/dist/policy/policy-engine.js +651 -0
  133. package/dist/policy/policy-engine.js.map +1 -0
  134. package/dist/remediation/auto-fixer.d.ts +179 -0
  135. package/dist/remediation/auto-fixer.d.ts.map +1 -0
  136. package/dist/remediation/auto-fixer.js +540 -0
  137. package/dist/remediation/auto-fixer.js.map +1 -0
  138. package/dist/remediation/fix-validator.d.ts +195 -0
  139. package/dist/remediation/fix-validator.d.ts.map +1 -0
  140. package/dist/remediation/fix-validator.js +462 -0
  141. package/dist/remediation/fix-validator.js.map +1 -0
  142. package/dist/remediation/index.d.ts +10 -0
  143. package/dist/remediation/index.d.ts.map +1 -0
  144. package/dist/remediation/index.js +15 -0
  145. package/dist/remediation/index.js.map +1 -0
  146. package/dist/remediation/patch-generator.d.ts +203 -0
  147. package/dist/remediation/patch-generator.d.ts.map +1 -0
  148. package/dist/remediation/patch-generator.js +533 -0
  149. package/dist/remediation/patch-generator.js.map +1 -0
  150. package/dist/remediation/remediation-planner.d.ts +262 -0
  151. package/dist/remediation/remediation-planner.d.ts.map +1 -0
  152. package/dist/remediation/remediation-planner.js +531 -0
  153. package/dist/remediation/remediation-planner.js.map +1 -0
  154. package/dist/remediation/secure-code-transformer.d.ts +222 -0
  155. package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
  156. package/dist/remediation/secure-code-transformer.js +625 -0
  157. package/dist/remediation/secure-code-transformer.js.map +1 -0
  158. package/dist/types/fix.d.ts +3 -1
  159. package/dist/types/fix.d.ts.map +1 -1
  160. package/dist/types/index.d.ts +6 -0
  161. package/dist/types/index.d.ts.map +1 -1
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/interprocedural.d.ts +203 -0
  165. package/dist/types/interprocedural.d.ts.map +1 -0
  166. package/dist/types/interprocedural.js +7 -0
  167. package/dist/types/interprocedural.js.map +1 -0
  168. package/dist/types/neuro-symbolic.d.ts +179 -0
  169. package/dist/types/neuro-symbolic.d.ts.map +1 -0
  170. package/dist/types/neuro-symbolic.js +7 -0
  171. package/dist/types/neuro-symbolic.js.map +1 -0
  172. package/dist/types/pipeline.d.ts +173 -0
  173. package/dist/types/pipeline.d.ts.map +1 -0
  174. package/dist/types/pipeline.js +7 -0
  175. package/dist/types/pipeline.js.map +1 -0
  176. package/dist/types/result.d.ts +134 -0
  177. package/dist/types/result.d.ts.map +1 -0
  178. package/dist/types/result.js +25 -0
  179. package/dist/types/result.js.map +1 -0
  180. package/dist/types/vulnerability.d.ts +2 -2
  181. package/dist/types/vulnerability.d.ts.map +1 -1
  182. package/dist/types/zero-day.d.ts +146 -0
  183. package/dist/types/zero-day.d.ts.map +1 -0
  184. package/dist/types/zero-day.js +7 -0
  185. package/dist/types/zero-day.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-checker.js","sourceRoot":"","sources":["../../../src/analyzers/compliance/compliance-checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * @fileoverview Container Image Scanner - scans container images for vulnerabilities
3
+ * @module @nahisaho/musubix-security/analyzers/container/image-scanner
4
+ * @trace DES-SEC2-CONTAINER-001, REQ-SEC2-CONTAINER-001
5
+ */
6
+ import type { Vulnerability, Severity } from '../../types/vulnerability.js';
7
+ /**
8
+ * Container image vulnerability
9
+ */
10
+ export interface ContainerVulnerability {
11
+ id: string;
12
+ packageName: string;
13
+ installedVersion: string;
14
+ fixedVersion?: string;
15
+ severity: Severity;
16
+ cve?: string;
17
+ description: string;
18
+ layer?: string;
19
+ }
20
+ /**
21
+ * Image scan result
22
+ */
23
+ export interface ImageScanResult {
24
+ image: string;
25
+ tag: string;
26
+ digest?: string;
27
+ vulnerabilities: ContainerVulnerability[];
28
+ metadata: ImageMetadata;
29
+ scanTime: Date;
30
+ scanner: 'trivy' | 'grype' | 'internal';
31
+ }
32
+ /**
33
+ * Image metadata
34
+ */
35
+ export interface ImageMetadata {
36
+ os?: string;
37
+ osVersion?: string;
38
+ architecture?: string;
39
+ size?: number;
40
+ layers?: number;
41
+ created?: Date;
42
+ }
43
+ /**
44
+ * Image scan options
45
+ */
46
+ export interface ImageScanOptions {
47
+ /** Scanner to use (default: trivy) */
48
+ scanner?: 'trivy' | 'grype';
49
+ /** Minimum severity to report */
50
+ minSeverity?: Severity;
51
+ /** Skip update of vulnerability database */
52
+ skipDbUpdate?: boolean;
53
+ /** Scan timeout in milliseconds */
54
+ timeout?: number;
55
+ /** Include unfixed vulnerabilities */
56
+ includeUnfixed?: boolean;
57
+ /** Rule IDs to skip (e.g., ['DKR-001', 'DKR-002']) */
58
+ skipRules?: string[];
59
+ }
60
+ /**
61
+ * Dockerfile analysis result
62
+ */
63
+ export interface DockerfileAnalysis {
64
+ filePath: string;
65
+ baseImage: string;
66
+ issues: DockerfileIssue[];
67
+ bestPractices: BestPracticeViolation[];
68
+ }
69
+ /**
70
+ * Dockerfile issue
71
+ */
72
+ export interface DockerfileIssue {
73
+ id: string;
74
+ severity: Severity;
75
+ line: number;
76
+ instruction: string;
77
+ message: string;
78
+ recommendation: string;
79
+ }
80
+ /**
81
+ * Best practice violation
82
+ */
83
+ export interface BestPracticeViolation {
84
+ rule: string;
85
+ description: string;
86
+ line?: number;
87
+ recommendation: string;
88
+ }
89
+ /**
90
+ * Container Image Scanner
91
+ * @trace DES-SEC2-CONTAINER-001
92
+ */
93
+ export declare class ImageScanner {
94
+ private options;
95
+ constructor(options?: ImageScanOptions);
96
+ /**
97
+ * Scan a container image
98
+ * @trace REQ-SEC2-CONTAINER-001
99
+ */
100
+ scan(imageRef: string, options?: ImageScanOptions): Promise<ImageScanResult>;
101
+ /**
102
+ * Analyze a Dockerfile for security issues
103
+ * @trace REQ-SEC2-CONTAINER-002
104
+ */
105
+ analyzeDockerfile(dockerfilePath: string): Promise<DockerfileAnalysis>;
106
+ /**
107
+ * Convert container vulnerabilities to standard vulnerability format
108
+ */
109
+ toVulnerabilities(result: ImageScanResult): Vulnerability[];
110
+ /**
111
+ * Parse image reference into image name and tag
112
+ */
113
+ private parseImageRef;
114
+ /**
115
+ * Run external scanner (Trivy or Grype)
116
+ */
117
+ private runExternalScanner;
118
+ /**
119
+ * Check if a scanner is available
120
+ */
121
+ private isScannerAvailable;
122
+ /**
123
+ * Run Trivy scanner
124
+ */
125
+ private runTrivy;
126
+ /**
127
+ * Run Grype scanner
128
+ */
129
+ private runGrype;
130
+ /**
131
+ * Parse Trivy JSON output
132
+ */
133
+ private parseTrivyOutput;
134
+ /**
135
+ * Parse Grype JSON output
136
+ */
137
+ private parseGrypeOutput;
138
+ /**
139
+ * Get numeric severity level for comparison
140
+ */
141
+ private getSeverityLevel;
142
+ /**
143
+ * Extract base image from Dockerfile
144
+ */
145
+ private extractBaseImage;
146
+ /**
147
+ * Check Dockerfile for security issues
148
+ */
149
+ private checkDockerfileIssues;
150
+ /**
151
+ * Check best practices
152
+ */
153
+ private checkBestPractices;
154
+ /**
155
+ * Map CVE to CWE
156
+ */
157
+ private mapCVEToCWE;
158
+ }
159
+ /**
160
+ * Create image scanner instance
161
+ */
162
+ export declare function createImageScanner(options?: ImageScanOptions): ImageScanner;
163
+ //# sourceMappingURL=image-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-scanner.d.ts","sourceRoot":"","sources":["../../../src/analyzers/container/image-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,459 @@
1
+ /**
2
+ * @fileoverview Container Image Scanner - scans container images for vulnerabilities
3
+ * @module @nahisaho/musubix-security/analyzers/container/image-scanner
4
+ * @trace DES-SEC2-CONTAINER-001, REQ-SEC2-CONTAINER-001
5
+ */
6
+ import { spawn } from 'node:child_process';
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ /**
9
+ * Severity mapping from external scanners
10
+ */
11
+ const SEVERITY_MAP = {
12
+ 'CRITICAL': 'critical',
13
+ 'HIGH': 'high',
14
+ 'MEDIUM': 'medium',
15
+ 'LOW': 'low',
16
+ 'UNKNOWN': 'info',
17
+ 'NEGLIGIBLE': 'info',
18
+ };
19
+ /**
20
+ * Dockerfile best practice rules
21
+ */
22
+ const DOCKERFILE_RULES = [
23
+ {
24
+ id: 'DKR-001',
25
+ pattern: /^FROM\s+\S+:latest\s*$/im,
26
+ severity: 'medium',
27
+ message: 'Using `:latest` tag is not recommended',
28
+ recommendation: 'Use a specific version tag for reproducible builds',
29
+ },
30
+ {
31
+ id: 'DKR-002',
32
+ pattern: /^USER\s+root\s*$/im,
33
+ severity: 'high',
34
+ message: 'Running as root user',
35
+ recommendation: 'Create and use a non-root user',
36
+ },
37
+ {
38
+ id: 'DKR-003',
39
+ pattern: /^RUN\s+.*apt-get\s+install.*-y(?!.*--no-install-recommends)/im,
40
+ severity: 'low',
41
+ message: 'Installing packages without --no-install-recommends',
42
+ recommendation: 'Add --no-install-recommends to reduce image size',
43
+ },
44
+ {
45
+ id: 'DKR-004',
46
+ pattern: /^RUN\s+.*curl.*\|\s*(bash|sh)/im,
47
+ severity: 'critical',
48
+ message: 'Piping curl to shell is dangerous',
49
+ recommendation: 'Download and verify script before execution',
50
+ },
51
+ {
52
+ id: 'DKR-005',
53
+ pattern: /^ADD\s+https?:\/\//im,
54
+ severity: 'medium',
55
+ message: 'Using ADD with URL is discouraged',
56
+ recommendation: 'Use RUN with curl/wget for better caching',
57
+ },
58
+ {
59
+ id: 'DKR-006',
60
+ pattern: /^EXPOSE\s+22\s*$/im,
61
+ severity: 'high',
62
+ message: 'Exposing SSH port',
63
+ recommendation: 'Avoid SSH in containers; use kubectl exec or docker exec',
64
+ },
65
+ {
66
+ id: 'DKR-007',
67
+ pattern: /ENV\s+.*PASSWORD|SECRET|KEY|TOKEN.*=/i,
68
+ severity: 'critical',
69
+ message: 'Hardcoded secrets in ENV',
70
+ recommendation: 'Use Docker secrets or environment variables at runtime',
71
+ },
72
+ {
73
+ id: 'DKR-008',
74
+ pattern: /^COPY\s+\.\s+/im,
75
+ severity: 'medium',
76
+ message: 'Copying entire context',
77
+ recommendation: 'Use specific paths or .dockerignore',
78
+ },
79
+ ];
80
+ /**
81
+ * Container Image Scanner
82
+ * @trace DES-SEC2-CONTAINER-001
83
+ */
84
+ export class ImageScanner {
85
+ options;
86
+ constructor(options = {}) {
87
+ this.options = {
88
+ scanner: options.scanner ?? 'trivy',
89
+ minSeverity: options.minSeverity ?? 'low',
90
+ skipDbUpdate: options.skipDbUpdate ?? false,
91
+ timeout: options.timeout ?? 300000, // 5 minutes
92
+ includeUnfixed: options.includeUnfixed ?? true,
93
+ skipRules: options.skipRules ?? [],
94
+ };
95
+ }
96
+ /**
97
+ * Scan a container image
98
+ * @trace REQ-SEC2-CONTAINER-001
99
+ */
100
+ async scan(imageRef, options) {
101
+ const mergedOptions = { ...this.options, ...options };
102
+ // Parse image reference
103
+ const { image, tag } = this.parseImageRef(imageRef);
104
+ try {
105
+ // Try external scanner first
106
+ const externalResult = await this.runExternalScanner(imageRef, mergedOptions);
107
+ if (externalResult) {
108
+ return {
109
+ ...externalResult,
110
+ image,
111
+ tag,
112
+ scanTime: new Date(),
113
+ };
114
+ }
115
+ }
116
+ catch {
117
+ // Fall back to internal scanning
118
+ }
119
+ // Internal scanning (Dockerfile analysis only without external scanner)
120
+ return {
121
+ image,
122
+ tag,
123
+ vulnerabilities: [],
124
+ metadata: {},
125
+ scanTime: new Date(),
126
+ scanner: 'internal',
127
+ };
128
+ }
129
+ /**
130
+ * Analyze a Dockerfile for security issues
131
+ * @trace REQ-SEC2-CONTAINER-002
132
+ */
133
+ async analyzeDockerfile(dockerfilePath) {
134
+ if (!existsSync(dockerfilePath)) {
135
+ throw new Error(`Dockerfile not found: ${dockerfilePath}`);
136
+ }
137
+ const content = readFileSync(dockerfilePath, 'utf-8');
138
+ const lines = content.split('\n');
139
+ // Extract base image
140
+ const baseImage = this.extractBaseImage(content);
141
+ // Check for issues and filter by skipRules
142
+ const allIssues = this.checkDockerfileIssues(content, lines);
143
+ const skipRules = this.options.skipRules ?? [];
144
+ const issues = allIssues.filter(issue => !skipRules.includes(issue.id));
145
+ // Check best practices
146
+ const bestPractices = this.checkBestPractices(content, lines);
147
+ return {
148
+ filePath: dockerfilePath,
149
+ baseImage,
150
+ issues,
151
+ bestPractices,
152
+ };
153
+ }
154
+ /**
155
+ * Convert container vulnerabilities to standard vulnerability format
156
+ */
157
+ toVulnerabilities(result) {
158
+ return result.vulnerabilities.map((cv, index) => ({
159
+ id: `CONTAINER-${result.image.replace(/[^a-zA-Z0-9]/g, '-')}-${index}`,
160
+ type: 'dependency',
161
+ severity: cv.severity,
162
+ cwes: this.mapCVEToCWE(cv.cve),
163
+ owasp: ['A06:2021'], // Vulnerable and Outdated Components
164
+ location: {
165
+ file: result.image,
166
+ startLine: 1,
167
+ endLine: 1,
168
+ startColumn: 0,
169
+ endColumn: 0,
170
+ },
171
+ description: `${cv.packageName}@${cv.installedVersion}: ${cv.description}`,
172
+ recommendation: cv.fixedVersion
173
+ ? `Upgrade to ${cv.packageName}@${cv.fixedVersion}`
174
+ : 'No fix available; consider using an alternative package',
175
+ confidence: 0.95,
176
+ ruleId: cv.cve ?? cv.id,
177
+ codeSnippet: `Package: ${cv.packageName}\nVersion: ${cv.installedVersion}${cv.layer ? `\nLayer: ${cv.layer}` : ''}`,
178
+ detectedAt: new Date(),
179
+ }));
180
+ }
181
+ /**
182
+ * Parse image reference into image name and tag
183
+ */
184
+ parseImageRef(imageRef) {
185
+ // Handle digest format
186
+ if (imageRef.includes('@sha256:')) {
187
+ const [image, digest] = imageRef.split('@');
188
+ return { image, tag: 'latest', digest };
189
+ }
190
+ // Handle tag format
191
+ const lastColon = imageRef.lastIndexOf(':');
192
+ if (lastColon > 0 && !imageRef.substring(lastColon).includes('/')) {
193
+ return {
194
+ image: imageRef.substring(0, lastColon),
195
+ tag: imageRef.substring(lastColon + 1),
196
+ };
197
+ }
198
+ return { image: imageRef, tag: 'latest' };
199
+ }
200
+ /**
201
+ * Run external scanner (Trivy or Grype)
202
+ */
203
+ async runExternalScanner(imageRef, options) {
204
+ const scanner = options.scanner ?? 'trivy';
205
+ // Check if scanner is available
206
+ const isAvailable = await this.isScannerAvailable(scanner);
207
+ if (!isAvailable) {
208
+ return null;
209
+ }
210
+ if (scanner === 'trivy') {
211
+ return this.runTrivy(imageRef, options);
212
+ }
213
+ else if (scanner === 'grype') {
214
+ return this.runGrype(imageRef, options);
215
+ }
216
+ return null;
217
+ }
218
+ /**
219
+ * Check if a scanner is available
220
+ */
221
+ async isScannerAvailable(scanner) {
222
+ return new Promise((resolve) => {
223
+ const proc = spawn(scanner, ['--version'], { stdio: 'ignore' });
224
+ proc.on('close', (code) => resolve(code === 0));
225
+ proc.on('error', () => resolve(false));
226
+ });
227
+ }
228
+ /**
229
+ * Run Trivy scanner
230
+ */
231
+ async runTrivy(imageRef, options) {
232
+ const args = ['image', '--format', 'json'];
233
+ if (options.skipDbUpdate) {
234
+ args.push('--skip-db-update');
235
+ }
236
+ if (!options.includeUnfixed) {
237
+ args.push('--ignore-unfixed');
238
+ }
239
+ args.push(imageRef);
240
+ return new Promise((resolve, reject) => {
241
+ let stdout = '';
242
+ let stderr = '';
243
+ const proc = spawn('trivy', args, {
244
+ timeout: options.timeout,
245
+ });
246
+ proc.stdout.on('data', (data) => { stdout += data; });
247
+ proc.stderr.on('data', (data) => { stderr += data; });
248
+ proc.on('close', (code) => {
249
+ if (code !== 0) {
250
+ reject(new Error(`Trivy failed: ${stderr}`));
251
+ return;
252
+ }
253
+ try {
254
+ const result = JSON.parse(stdout);
255
+ resolve(this.parseTrivyOutput(result, options));
256
+ }
257
+ catch (e) {
258
+ reject(new Error(`Failed to parse Trivy output: ${e}`));
259
+ }
260
+ });
261
+ proc.on('error', (err) => reject(err));
262
+ });
263
+ }
264
+ /**
265
+ * Run Grype scanner
266
+ */
267
+ async runGrype(imageRef, options) {
268
+ const args = ['-o', 'json', imageRef];
269
+ return new Promise((resolve, reject) => {
270
+ let stdout = '';
271
+ let stderr = '';
272
+ const proc = spawn('grype', args, {
273
+ timeout: options.timeout,
274
+ });
275
+ proc.stdout.on('data', (data) => { stdout += data; });
276
+ proc.stderr.on('data', (data) => { stderr += data; });
277
+ proc.on('close', (code) => {
278
+ if (code !== 0) {
279
+ reject(new Error(`Grype failed: ${stderr}`));
280
+ return;
281
+ }
282
+ try {
283
+ const result = JSON.parse(stdout);
284
+ resolve(this.parseGrypeOutput(result, options));
285
+ }
286
+ catch (e) {
287
+ reject(new Error(`Failed to parse Grype output: ${e}`));
288
+ }
289
+ });
290
+ proc.on('error', (err) => reject(err));
291
+ });
292
+ }
293
+ /**
294
+ * Parse Trivy JSON output
295
+ */
296
+ parseTrivyOutput(output, options) {
297
+ const vulnerabilities = [];
298
+ const minSeverityLevel = this.getSeverityLevel(options.minSeverity ?? 'low');
299
+ // Handle Results array
300
+ const results = output.Results ?? [];
301
+ for (const result of results) {
302
+ const vulns = result.Vulnerabilities ?? [];
303
+ for (const vuln of vulns) {
304
+ const severity = SEVERITY_MAP[vuln.Severity?.toUpperCase()] ?? 'info';
305
+ if (this.getSeverityLevel(severity) < minSeverityLevel) {
306
+ continue;
307
+ }
308
+ vulnerabilities.push({
309
+ id: vuln.VulnerabilityID,
310
+ packageName: vuln.PkgName,
311
+ installedVersion: vuln.InstalledVersion,
312
+ fixedVersion: vuln.FixedVersion,
313
+ severity,
314
+ cve: vuln.VulnerabilityID?.startsWith('CVE-') ? vuln.VulnerabilityID : undefined,
315
+ description: vuln.Description ?? vuln.Title ?? 'No description',
316
+ layer: result.Target,
317
+ });
318
+ }
319
+ }
320
+ // Extract metadata
321
+ const metadata = {};
322
+ if (output.Metadata) {
323
+ metadata.os = output.Metadata.OS?.Family;
324
+ metadata.osVersion = output.Metadata.OS?.Name;
325
+ metadata.architecture = output.Metadata.ImageConfig?.architecture;
326
+ }
327
+ return {
328
+ vulnerabilities,
329
+ metadata,
330
+ scanner: 'trivy',
331
+ };
332
+ }
333
+ /**
334
+ * Parse Grype JSON output
335
+ */
336
+ parseGrypeOutput(output, options) {
337
+ const vulnerabilities = [];
338
+ const minSeverityLevel = this.getSeverityLevel(options.minSeverity ?? 'low');
339
+ const matches = output.matches ?? [];
340
+ for (const match of matches) {
341
+ const vuln = match.vulnerability;
342
+ const artifact = match.artifact;
343
+ const severity = SEVERITY_MAP[vuln?.severity?.toUpperCase()] ?? 'info';
344
+ if (this.getSeverityLevel(severity) < minSeverityLevel) {
345
+ continue;
346
+ }
347
+ vulnerabilities.push({
348
+ id: vuln?.id ?? 'UNKNOWN',
349
+ packageName: artifact?.name ?? 'unknown',
350
+ installedVersion: artifact?.version ?? 'unknown',
351
+ fixedVersion: match.vulnerability?.fix?.versions?.[0],
352
+ severity,
353
+ cve: vuln?.id?.startsWith('CVE-') ? vuln.id : undefined,
354
+ description: vuln?.description ?? 'No description',
355
+ });
356
+ }
357
+ // Extract metadata
358
+ const metadata = {};
359
+ if (output.source?.target?.imageID) {
360
+ metadata.os = output.distro?.name;
361
+ metadata.osVersion = output.distro?.version;
362
+ }
363
+ return {
364
+ vulnerabilities,
365
+ metadata,
366
+ scanner: 'grype',
367
+ };
368
+ }
369
+ /**
370
+ * Get numeric severity level for comparison
371
+ */
372
+ getSeverityLevel(severity) {
373
+ const levels = {
374
+ critical: 4,
375
+ high: 3,
376
+ medium: 2,
377
+ low: 1,
378
+ info: 0,
379
+ };
380
+ return levels[severity] ?? 0;
381
+ }
382
+ /**
383
+ * Extract base image from Dockerfile
384
+ */
385
+ extractBaseImage(content) {
386
+ const match = content.match(/^FROM\s+(\S+)/im);
387
+ return match?.[1] ?? 'unknown';
388
+ }
389
+ /**
390
+ * Check Dockerfile for security issues
391
+ */
392
+ checkDockerfileIssues(content, lines) {
393
+ const issues = [];
394
+ for (const rule of DOCKERFILE_RULES) {
395
+ const match = content.match(rule.pattern);
396
+ if (match) {
397
+ // Find line number
398
+ let lineNumber = 1;
399
+ for (let i = 0; i < lines.length; i++) {
400
+ if (lines[i].match(rule.pattern)) {
401
+ lineNumber = i + 1;
402
+ break;
403
+ }
404
+ }
405
+ issues.push({
406
+ id: rule.id,
407
+ severity: rule.severity,
408
+ line: lineNumber,
409
+ instruction: match[0].trim(),
410
+ message: rule.message,
411
+ recommendation: rule.recommendation,
412
+ });
413
+ }
414
+ }
415
+ return issues;
416
+ }
417
+ /**
418
+ * Check best practices
419
+ */
420
+ checkBestPractices(content, _lines) {
421
+ const violations = [];
422
+ // Check for HEALTHCHECK
423
+ if (!content.includes('HEALTHCHECK')) {
424
+ violations.push({
425
+ rule: 'HEALTHCHECK',
426
+ description: 'No HEALTHCHECK instruction found',
427
+ recommendation: 'Add HEALTHCHECK to enable container health monitoring',
428
+ });
429
+ }
430
+ // Check for multi-stage builds when large packages are installed
431
+ const hasInstallCommands = /apt-get install|npm install|pip install|yarn add/i.test(content);
432
+ const isMultiStage = (content.match(/^FROM\s+/gim) ?? []).length > 1;
433
+ if (hasInstallCommands && !isMultiStage) {
434
+ violations.push({
435
+ rule: 'MULTI_STAGE_BUILD',
436
+ description: 'Consider using multi-stage builds',
437
+ recommendation: 'Use multi-stage builds to reduce final image size',
438
+ });
439
+ }
440
+ // Check for .dockerignore mention
441
+ // This is a reminder, not detectable from Dockerfile alone
442
+ return violations;
443
+ }
444
+ /**
445
+ * Map CVE to CWE
446
+ */
447
+ mapCVEToCWE(cve) {
448
+ // In a real implementation, this would query a CVE database
449
+ // For now, return a generic CWE for supply chain vulnerability
450
+ return cve ? ['CWE-1035'] : ['CWE-1035']; // Using Components from Untrusted Source
451
+ }
452
+ }
453
+ /**
454
+ * Create image scanner instance
455
+ */
456
+ export function createImageScanner(options) {
457
+ return new ImageScanner(options);
458
+ }
459
+ //# sourceMappingURL=image-scanner.js.map