/** * @fileoverview CPE (Common Platform Enumeration) Matching Engine * @module @nahisaho/musubix-security/cve/cpe-matcher * * Provides npm package name to CPE conversion and semver-based * vulnerability matching. * * @requirement REQ-CVE-003 - CPE matching for vulnerability lookup * @design DES-EPIC2-004 - CPE Matcher component */ /** * CPE 2.3 URI components * @see https://nvd.nist.gov/products/cpe */ export interface CPEComponents { /** CPE part: 'a' = application, 'o' = OS, 'h' = hardware */ part: 'a' | 'o' | 'h'; /** Vendor/publisher name */ vendor: string; /** Product name */ product: string; /** Version string */ version: string; /** Update/patch level */ update?: string; /** Edition */ edition?: string; /** Language */ language?: string; /** Software edition */ swEdition?: string; /** Target software */ targetSw?: string; /** Target hardware */ targetHw?: string; /** Other attributes */ other?: string; } /** * Version range for vulnerability matching */ export interface VersionRange { /** Starting version (inclusive unless startExcluding is set) */ versionStart?: string; /** Ending version (inclusive unless endExcluding is set) */ versionEnd?: string; /** Start version is exclusive */ versionStartExcluding?: boolean; /** End version is exclusive */ versionEndExcluding?: boolean; } /** * CPE match criteria from NVD */ export interface CPEMatch { /** CPE 2.3 URI */ criteria: string; /** Whether this criteria makes the configuration vulnerable */ vulnerable: boolean; /** Match criteria ID */ matchCriteriaId: string; /** Version range */ versionRange?: VersionRange; } /** * Vulnerability match result */ export interface VulnerabilityMatch { /** Package name */ packageName: string; /** Package version */ packageVersion: string; /** CVE ID */ cveId: string; /** Generated CPE URI */ cpe: string; /** Match criteria that matched */ matchCriteria?: CPEMatch; /** Whether version is in vulnerable range */ isVulnerable: boolean; /** Match confidence (0-1) */ confidence: number; } /** * CPE Matcher for npm packages * * @example * ```typescript * const matcher = new CPEMatcher(); * * // Generate CPE from package * const cpe = matcher.generateCPE('express', '4.18.2'); * // => 'cpe:2.3:a:expressjs:express:4.18.2:*:*:*:*:node.js:*:*' * * // Check if version is vulnerable * const isVuln = matcher.isVersionVulnerable('4.18.2', { * versionStart: '4.0.0', * versionEnd: '4.19.0', * versionEndExcluding: true * }); * ``` */ export declare class CPEMatcher { private vendorMappings; constructor(customMappings?: Record); /** * Generate CPE 2.3 URI for an npm package * @param packageName - npm package name * @param version - Package version * @returns CPE 2.3 formatted URI */ generateCPE(packageName: string, version: string): string; /** * Convert npm package info to CPE components */ packageToCPEComponents(packageName: string, version: string): CPEComponents; /** * Convert CPE components to URI string */ componentsToURI(components: CPEComponents): string; /** * Parse CPE 2.3 URI to components */ parseURI(cpeUri: string): CPEComponents | null; /** * Check if a version falls within a vulnerable range * @param version - Version to check * @param range - Version range from CVE data * @returns True if version is within vulnerable range */ isVersionVulnerable(version: string, range: VersionRange): boolean; /** * Match a package against CPE criteria */ matchPackage(packageName: string, packageVersion: string, cpeMatch: CPEMatch): VulnerabilityMatch | null; /** * Add a custom vendor mapping */ addVendorMapping(packageName: string, vendor: string): void; /** * Get the vendor for a package */ getVendor(packageName: string): string; /** * Normalize package name for CPE */ private normalizeName; /** * Normalize version string */ private normalizeVersion; /** * Resolve vendor for a package */ private resolveVendor; /** * Get possible vendor names for a package */ private getPossibleVendors; /** * Compare two semver versions * @returns -1 if a < b, 0 if a == b, 1 if a > b */ compareVersions(a: string, b: string): number; /** * Escape special characters in CPE component */ private escapeComponent; /** * Unescape CPE component value */ private unescapeComponent; } /** * Create a CPE search query from package info * Generates wildcarded CPE for searching NVD */ export declare function createCPESearchQuery(packageName: string, vendor?: string): string; /** * Extract package name from CPE URI */ export declare function extractPackageFromCPE(cpeUri: string): string | null; //# sourceMappingURL=cpe-matcher.d.ts.map