circle-ir 3.2.0 → 3.3.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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"cargo-parser.js","sourceRoot":"","sources":["../../src/analysis/cargo-parser.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Dependency vulnerability scanner for Rust projects
3
- *
4
- * Scans Cargo.lock files for known vulnerable crate versions
5
- * using the RustSec Advisory Database.
6
- */
7
- import type { Severity } from '../types/index.js';
8
- import type { AdvisoryVulnerability, AdvisoryDatabase } from './advisory-db.js';
9
- /**
10
- * A finding for a vulnerable dependency
11
- */
12
- export interface DependencyFinding {
13
- type: 'vulnerable_dependency';
14
- /** Crate name */
15
- crate: string;
16
- /** Installed version */
17
- version: string;
18
- /** Matching advisories */
19
- vulnerabilities: AdvisoryVulnerability[];
20
- /** Source file (Cargo.lock) */
21
- source: string;
22
- /** Location information */
23
- location: {
24
- file: string;
25
- line?: number;
26
- };
27
- /** Severity level */
28
- severity: Severity;
29
- /** CWE IDs from advisories */
30
- cwes: string[];
31
- /** CVE IDs from advisories */
32
- cves: string[];
33
- }
34
- /**
35
- * Options for dependency scanning
36
- */
37
- export interface ScanOptions {
38
- /** Path to Cargo.lock file */
39
- cargoLockPath?: string;
40
- /** Cargo.lock content (if already loaded) */
41
- cargoLockContent?: string;
42
- /** Custom advisory database (defaults to bundled) */
43
- advisoryDb?: AdvisoryDatabase;
44
- /** Include dev dependencies */
45
- includeDevDeps?: boolean;
46
- }
47
- /**
48
- * Scan result
49
- */
50
- export interface ScanResult {
51
- /** List of vulnerable dependencies */
52
- findings: DependencyFinding[];
53
- /** Total dependencies scanned */
54
- totalDependencies: number;
55
- /** Number of vulnerable dependencies */
56
- vulnerableCount: number;
57
- /** Advisory database info */
58
- advisoryDbInfo: {
59
- source: string;
60
- lastUpdated: string;
61
- totalAdvisories: number;
62
- };
63
- }
64
- /**
65
- * Check if a specific crate version is vulnerable
66
- */
67
- export declare function checkCrateVulnerability(crateName: string, version: string, db: AdvisoryDatabase): AdvisoryVulnerability[];
68
- /**
69
- * Scan Cargo.lock content for vulnerable dependencies
70
- */
71
- export declare function scanCargoLock(content: string, options?: ScanOptions): ScanResult;
72
- /**
73
- * Format a dependency finding as a human-readable string
74
- */
75
- export declare function formatFinding(finding: DependencyFinding): string;
76
- /**
77
- * Format scan result as a human-readable report
78
- */
79
- export declare function formatScanReport(result: ScanResult): string;
@@ -1,122 +0,0 @@
1
- /**
2
- * Dependency vulnerability scanner for Rust projects
3
- *
4
- * Scans Cargo.lock files for known vulnerable crate versions
5
- * using the RustSec Advisory Database.
6
- */
7
- import { loadBundledAdvisories, getAdvisoriesForCrate, categoryToSeverity, } from './advisory-db.js';
8
- import { parseCargoLock, filterRegistryDeps } from './cargo-parser.js';
9
- import { isVersionVulnerable } from './semver.js';
10
- /**
11
- * Check if a specific crate version is vulnerable
12
- */
13
- export function checkCrateVulnerability(crateName, version, db) {
14
- const advisories = getAdvisoriesForCrate(db, crateName);
15
- return advisories.filter((advisory) => {
16
- return isVersionVulnerable(version, advisory.versions.patched, advisory.versions.unaffected);
17
- });
18
- }
19
- /**
20
- * Scan Cargo.lock content for vulnerable dependencies
21
- */
22
- export function scanCargoLock(content, options = {}) {
23
- const db = options.advisoryDb || loadBundledAdvisories();
24
- const cargoLock = parseCargoLock(content);
25
- const deps = filterRegistryDeps(cargoLock.dependencies);
26
- const findings = [];
27
- for (const dep of deps) {
28
- const vulnerableAdvisories = checkCrateVulnerability(dep.name, dep.version, db);
29
- if (vulnerableAdvisories.length > 0) {
30
- // Extract CWEs and CVEs from advisories
31
- const cwes = [];
32
- const cves = [];
33
- for (const advisory of vulnerableAdvisories) {
34
- for (const alias of advisory.aliases) {
35
- if (alias.startsWith('CVE-')) {
36
- cves.push(alias);
37
- }
38
- else if (alias.startsWith('CWE-')) {
39
- cwes.push(alias);
40
- }
41
- }
42
- }
43
- // Calculate severity from all advisories
44
- const allCategories = vulnerableAdvisories.flatMap((a) => a.categories);
45
- const severity = categoryToSeverity(allCategories);
46
- findings.push({
47
- type: 'vulnerable_dependency',
48
- crate: dep.name,
49
- version: dep.version,
50
- vulnerabilities: vulnerableAdvisories,
51
- source: 'Cargo.lock',
52
- location: {
53
- file: options.cargoLockPath || 'Cargo.lock',
54
- },
55
- severity,
56
- cwes: [...new Set(cwes)],
57
- cves: [...new Set(cves)],
58
- });
59
- }
60
- }
61
- // Sort findings by severity
62
- const severityOrder = {
63
- critical: 0,
64
- high: 1,
65
- medium: 2,
66
- low: 3,
67
- };
68
- findings.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
69
- return {
70
- findings,
71
- totalDependencies: deps.length,
72
- vulnerableCount: findings.length,
73
- advisoryDbInfo: {
74
- source: db.source,
75
- lastUpdated: db.lastUpdated,
76
- totalAdvisories: db.stats?.totalAdvisories || 0,
77
- },
78
- };
79
- }
80
- /**
81
- * Format a dependency finding as a human-readable string
82
- */
83
- export function formatFinding(finding) {
84
- const lines = [];
85
- lines.push(`${finding.crate}@${finding.version} [${finding.severity.toUpperCase()}]`);
86
- for (const vuln of finding.vulnerabilities) {
87
- lines.push(` ${vuln.id}: ${vuln.title || vuln.description.slice(0, 80)}`);
88
- if (vuln.aliases.length > 0) {
89
- lines.push(` Aliases: ${vuln.aliases.join(', ')}`);
90
- }
91
- if (vuln.versions.patched && vuln.versions.patched.length > 0) {
92
- lines.push(` Patched: ${vuln.versions.patched.join(', ')}`);
93
- }
94
- lines.push(` URL: ${vuln.url}`);
95
- }
96
- return lines.join('\n');
97
- }
98
- /**
99
- * Format scan result as a human-readable report
100
- */
101
- export function formatScanReport(result) {
102
- const lines = [];
103
- lines.push('=== RUST DEPENDENCY VULNERABILITY SCAN ===');
104
- lines.push('');
105
- lines.push(`Dependencies scanned: ${result.totalDependencies}`);
106
- lines.push(`Vulnerable packages: ${result.vulnerableCount}`);
107
- lines.push(`Advisory DB: ${result.advisoryDbInfo.source} (${result.advisoryDbInfo.lastUpdated})`);
108
- lines.push('');
109
- if (result.findings.length === 0) {
110
- lines.push('No known vulnerabilities found.');
111
- }
112
- else {
113
- lines.push('VULNERABLE DEPENDENCIES:');
114
- lines.push('');
115
- for (const finding of result.findings) {
116
- lines.push(formatFinding(finding));
117
- lines.push('');
118
- }
119
- }
120
- return lines.join('\n');
121
- }
122
- //# sourceMappingURL=dependency-scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-scanner.js","sourceRoot":"","sources":["../../src/analysis/dependency-scanner.ts"],"names":[],"mappings":"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"}