/** * Vigil Exploit Chaining Engine * * Goes beyond Glasswing's approach: transforms isolated vulnerability * findings into composable exploitation primitives, builds attack graphs, * searches for exploit chains via A-star/beam search, grades evidence, * minimizes chains, and computes minimum cuts for defensive remediation. * * Core insight: exploit chaining is NOT a list of CVEs — it's a sequence * of state transitions where Postcondition(e_i) ⊧ Precondition(e_{i+1}). * * Exploit chain building for authorized targets. */ export type PrimitiveClass = 'reachability' | 'information_disclosure' | 'memory_corruption' | 'identity_authorization' | 'isolation_escape' | 'stability' | 'unknown'; export type ChainStatus = 'conceptual' | 'environment_satisfiable' | 'individually_reproduced' | 'end_to_end_reproduced' | 'impact_validated' | 'patch_verified'; export type EvidenceLevel = 0 | 1 | 2 | 3 | 4 | 5; export interface SecurityState { principal: string; privilege: 'none' | 'low' | 'medium' | 'high' | 'root'; reachableComponents: string[]; knownSecrets: string[]; capabilities: string[]; isolationBoundary: string; integrityLevel: 'untrusted' | 'low' | 'medium' | 'high' | 'system'; } export interface PrimitiveConditions { attackerCanReach?: boolean; requiresAuthentication?: boolean; requiresKnownObjectId?: boolean; requiresKnownAddress?: boolean; requiresSpecificBuild?: boolean; requiresFeatureEnabled?: string[]; requiresMitigationDisabled?: string[]; raceWindowUs?: number; } export interface PrimitiveEffects { disclosesObjectMetadata?: boolean; disclosesMemoryAddresses?: boolean; disclosesCredentials?: boolean; enablesArbitraryRead?: boolean; enablesArbitraryWrite?: boolean; enablesControlFlow?: boolean; crossesPrivilegeBoundary?: boolean; crossesIsolationBoundary?: boolean; enablesPersistence?: boolean; repeatable: boolean; } export interface ExploitPrimitive { id: string; class: PrimitiveClass; sourceFinding: string; preconditions: PrimitiveConditions; postconditions: PrimitiveEffects; environmentConstraints: string[]; evidenceLevel: EvidenceLevel; confidence: number; validationRounds: number; sandboxReproduced: boolean; } export interface ChainEdge { from: string; to: string; compatScore: number; evidenceMatches: string[]; evidenceGaps: string[]; } export interface AttackGraph { nodes: Map; primitives: ExploitPrimitive[]; edges: ChainEdge[]; chainabilityMatrix: number[][]; } export interface ExploitChain { id: string; primitives: ExploitPrimitive[]; edges: ChainEdge[]; status: ChainStatus; totalConfidence: number; assumptionDebt: number; impactLevel: 'low' | 'medium' | 'high' | 'critical'; minimizedFrom: number; patchPoints: string[]; } export interface ChainSearchOptions { maxDepth: number; beamWidth: number; minConfidence: number; maxAssumptionDebt: number; targetImpact: 'low' | 'medium' | 'high' | 'critical'; timeoutMs: number; } /** * Compute how well postconditions of primitive A satisfy preconditions of primitive B. * Returns compatibility score 0..1 and evidence match/gap details. */ export declare function computeChainability(a: ExploitPrimitive, b: ExploitPrimitive): ChainEdge; export declare function buildAttackGraph(primitives: ExploitPrimitive[]): AttackGraph; export declare function searchChains(primitives: ExploitPrimitive[], options?: Partial): ExploitChain[]; export declare function minimizeChain(chain: ExploitChain, graph: AttackGraph): ExploitChain; export declare function gradeChainEvidence(chain: ExploitChain): ChainStatus; export declare function normalizePrimitive(raw: { id: string; class: PrimitiveClass; source: string; conditions: Partial; effects: Partial; constraints?: string[]; evidence?: EvidenceLevel; confidence?: number; reproduced?: boolean; }): ExploitPrimitive; export declare function formatChainDisplay(chain: ExploitChain): string; export declare function chainCumulativeImpact(chain: ExploitChain): number; //# sourceMappingURL=exploitChaining.d.ts.map