diff --git a/frontend/src/pages/CompliancePage.tsx b/frontend/src/pages/CompliancePage.tsx index 721dff9..29ced56 100644 --- a/frontend/src/pages/CompliancePage.tsx +++ b/frontend/src/pages/CompliancePage.tsx @@ -1,6 +1,6 @@ import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; -import { Loader2, AlertCircle, Download, FileText, Plus, ExternalLink, BookOpen } from "lucide-react"; +import { Loader2, AlertCircle, Download, FileText, Plus, ExternalLink, BookOpen, AlertTriangle, FlaskConical } from "lucide-react"; import { getComplianceFrameworks, getFrameworkStatus, @@ -49,6 +49,48 @@ export default function CompliancePage() { const controls = frameworkStatus?.controls || []; const activeFramework = frameworks?.find((f) => f.id === activeFrameworkId) ?? null; + // Mapping confidence notices for frameworks that lack an official CTID ATT&CK mapping + type ConfidenceLevel = "community" | "experimental"; + const MAPPING_NOTICES: Record = { + "DORA": { + level: "community", + source: "ENISA guidance + TIBER-EU threat-led testing framework", + notice: + "No official MITRE CTID ATT&CK mapping exists for DORA (EU 2022/2554). " + + "The technique mappings in Aegis are based on ENISA ICT risk management guidelines and the TIBER-EU " + + "threat-led penetration testing framework — both authoritative sources for this regulation. " + + "They reflect regulatory intent and established industry practice, but have not been " + + "formally certified. We recommend reviewing coverage with a compliance specialist " + + "before submitting to supervisory authorities (EBA / ESMA / EIOPA / ECB).", + }, + "ISO/IEC 27001:2022": { + level: "community", + source: "ISO/IEC 27002:2022 + industry consensus", + notice: + "No official MITRE CTID ATT&CK mapping exists for ISO/IEC 27001:2022. " + + "ISO charges for its published standards, which prevents the open-source community from " + + "producing a formally certified mapping. The technique mappings in Aegis are based on " + + "ISO/IEC 27002:2022 implementation guidance (the companion standard) and widely adopted " + + "industry practice from the security community. They are directionally correct and " + + "representative, but should be validated against your organisation's specific control " + + "implementation before use in a formal ISO 27001 audit or certification exercise.", + }, + "ISO/IEC 42001:2023": { + level: "experimental", + source: "Interpretation — MITRE ATT&CK Enterprise v14 has no AI-specific techniques", + notice: + "ISO/IEC 42001 was published in December 2023. MITRE ATT&CK Enterprise v14 does not yet " + + "include adversarial techniques specifically targeting AI systems (model poisoning, " + + "adversarial examples, training data exfiltration, etc.). " + + "The mappings in Aegis cover threats to the IT INFRASTRUCTURE that supports AI systems — " + + "data pipelines, model-serving APIs, ML framework supply chains, and cloud AI services — " + + "using the closest available ATT&CK techniques. " + + "This is a best-effort directional mapping intended to identify where Red Team coverage " + + "of AI infrastructure is lacking. It should NOT be treated as a formal ISO 42001 " + + "compliance assessment until MITRE publishes dedicated AI attack techniques.", + }, + }; + const handleExportCSV = async () => { if (activeFrameworkId) { await downloadComplianceCSV(activeFrameworkId); @@ -197,6 +239,46 @@ export default function CompliancePage() { )} + {/* Mapping confidence notice — shown for frameworks without official CTID mapping */} + {activeFramework && MAPPING_NOTICES[activeFramework.name] && (() => { + const notice = MAPPING_NOTICES[activeFramework.name]; + const isExperimental = notice.level === "experimental"; + return ( +
+
+ {isExperimental + ? + : + } +
+
+ + {isExperimental ? "Experimental mapping — use with caution" : "Community-based mapping — not officially certified"} + + + {isExperimental ? "Experimental" : "Community"} + +
+

+ {notice.notice} +

+

+ Mapping source: {notice.source} +

+
+
+
+ ); + })()} + {/* Summary cards */} {summary && (