diff --git a/.claude/rules/loc-exceptions.txt b/.claude/rules/loc-exceptions.txt
index f3803d3d..9a74acc9 100644
--- a/.claude/rules/loc-exceptions.txt
+++ b/.claude/rules/loc-exceptions.txt
@@ -150,3 +150,11 @@ admin-compliance/app/sdk/compliance-scope/page.tsx
# --- zeroclaw: ground-truth corpus (test fixture data, not source) ---
zeroclaw/docs/ground-truth/06-spiegel-dsi-fulltext.txt
+
+# --- IACE data tables and orchestration files (Phase 16-18 refactor backlog) ---
+# Each file grew during the IACE polish phases (Stufe-A manufacturer library,
+# Klärungen Phase 3 PDF export + methodology, app routes). Phase 5+ split
+# targets — splitting now would fragment unrelated cohesive logic.
+ai-compliance-sdk/internal/iace/manufacturer_safety_features.go
+ai-compliance-sdk/internal/api/handlers/iace_handler_clarifications.go
+ai-compliance-sdk/internal/app/routes.go
diff --git a/admin-compliance/app/sdk/iace/[projectId]/clarifications/page.tsx b/admin-compliance/app/sdk/iace/[projectId]/clarifications/page.tsx
index 5b227bfd..5b362f9b 100644
--- a/admin-compliance/app/sdk/iace/[projectId]/clarifications/page.tsx
+++ b/admin-compliance/app/sdk/iace/[projectId]/clarifications/page.tsx
@@ -92,6 +92,14 @@ export default function ClarificationsPage() {
groupedBySource[key].push(c)
}
+ // CRA-Spur: zeige Banner, wenn mindestens eine Klaerung einen CRA-Bezug
+ // hat (Norm-Referenz "2024/2847" oder "DIN EN 40000-1-2"). Die Banner
+ // erinnert den Anwender daran, dass die CRA-Pflichten zwar bereits jetzt
+ // dokumentiert werden, aber erst zum 11.12.2027 verpflichtend gelten.
+ const hasCRAClarifications = (data?.clarifications ?? []).some(c =>
+ (c.norm_references ?? []).some(n => n.includes('2024/2847') || n.includes('40000-1-2'))
+ )
+
return (
@@ -156,6 +164,15 @@ export default function ClarificationsPage() {
/>
+ {!loading && hasCRAClarifications && (
+
+
Cyber Resilience Act (CRA) — Hinweis zur Geltung
+
+ Diese Klärungsliste enthält Fragen zur Verordnung (EU) 2024/2847 (CRA). Die CRA gilt für „Produkte mit digitalen Elementen", die ab dem 11.12.2027 auf dem EU-Markt bereitgestellt werden. Die hier dokumentierten Pflichten (SBOM, signierte Updates, CVD-Policy, Patch-SLA, Incident-Notification an ENISA) sollten bereits jetzt im Entwurf des Anlagenbauers berücksichtigt sein. Harmonisierter Standard: DIN EN 40000-1-2 (Entwurf 11/2025).
+
+
+ )}
+
{loading &&
Lade Klärungen…
}
{error &&
Fehler: {error}
}
diff --git a/ai-compliance-sdk/internal/api/handlers/iace_handler_init_helpers.go b/ai-compliance-sdk/internal/api/handlers/iace_handler_init_helpers.go
index 258eea4b..a0651935 100644
--- a/ai-compliance-sdk/internal/api/handlers/iace_handler_init_helpers.go
+++ b/ai-compliance-sdk/internal/api/handlers/iace_handler_init_helpers.go
@@ -95,6 +95,15 @@ func acceptableMeasureCategories(patternCat string) map[string]bool {
"data_poisoning": {"ai_specific", "software_control"},
"sensor_spoofing": {"ai_specific", "software_control"},
"unintended_bias": {"ai_specific", "software_control"},
+ // CRA / DIN EN 40000-1-2 cyber-resilience patterns (HP1910+).
+ // cyber_resilience is the umbrella category used by patterns that
+ // fire on the manufacturer-side obligations: SBOM, signed updates,
+ // CVD policy, patch-SLA, hardening docs, incident notification.
+ // Accept measures from the dedicated cyber_resilience pool plus the
+ // broader cyber_network and software_control pools (existing
+ // measures like "intrusion detection" or "audit logging" are
+ // applicable here too).
+ "cyber_resilience": {"cyber_resilience", "cyber_network", "software_control"},
// Edge-case pattern categories from legacy authors. Treated as
// synonyms of their primary hazard category so existing patterns
// keep matching the right measure pool.
@@ -156,6 +165,7 @@ func patternCatToMeasureCat(patternCat string) string {
"update_failure": "software_control", "hmi_error": "software_control",
"emc_hazard": "electrical", "maintenance_hazard": "mechanical",
"mode_confusion": "software_control", "chemical_risk": "material_environmental",
+ "cyber_resilience": "cyber_resilience",
}
if cat, ok := m[patternCat]; ok {
return cat
diff --git a/ai-compliance-sdk/internal/iace/hazard_patterns_cra.go b/ai-compliance-sdk/internal/iace/hazard_patterns_cra.go
new file mode 100644
index 00000000..36db3b4b
--- /dev/null
+++ b/ai-compliance-sdk/internal/iace/hazard_patterns_cra.go
@@ -0,0 +1,198 @@
+package iace
+
+// GetCRAPatterns returns hazard patterns for the EU Cyber Resilience Act
+// compliance track. They fire when a project's components carry digital
+// elements (software, network, AI) and therefore fall under the CRA.
+//
+// The CRA itself (Verordnung (EU) 2024/2847) became force-of-law on
+// 11 December 2024 and applies to products with digital elements placed
+// on the EU market from 11 December 2027. The harmonised standard for
+// machinery is DIN EN 40000-1-2 (Entwurf November 2025).
+//
+// Identifiers only — no normative text is reproduced.
+//
+// HP range: HP1910-HP1918.
+func GetCRAPatterns() []HazardPattern {
+ return []HazardPattern{
+ {
+ ID: "HP1910", NameDE: "Fehlende Software-Stueckliste (SBOM) fuer die Maschine", NameEN: "Missing Software Bill of Materials (SBOM)",
+ RequiredComponentTags: []string{"has_software"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M540"},
+ Priority: 70,
+ ApplicableLifecycles: []string{"normal_operation", "maintenance"},
+ ScenarioDE: "Die Maschine enthaelt Software-Komponenten (PLC-Firmware, HMI, Roboter-Controller). Wird keine maschinenlesbare Komponentenliste mitgeliefert, kann der Betreiber im Falle einer veroeffentlichten Schwachstelle (CVE) nicht feststellen, ob seine Maschine betroffen ist.",
+ TriggerDE: "Veroeffentlichung einer Sicherheitsluecke in einer mitverwendeten Bibliothek (z.B. log4j, OpenSSL); Audit-Anfrage des Betreibers; Schwachstellenmeldung durch Forscher.",
+ HarmDE: "Cybersecurity-Folgeschaden: nicht behebbare Schwachstelle, Maschinen-Stillstand bei Behoerden-Audit, Reputations- und Haftungsrisiko.",
+ AffectedDE: "Betreiber, IT-/OT-Verantwortliche, Anlagenbauer",
+ ZoneDE: "Maschinendokumentation, Software-Auslieferung",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Wird eine SBOM (SPDX oder CycloneDX) mit jeder Maschine bzw. jedem Software-Release ausgeliefert?",
+ "Sind alle Open-Source-Bibliotheken in der SBOM mit Version und Lizenz inventarisiert?",
+ "Wie wird die SBOM bei einem Software-Update aktualisiert?",
+ },
+ DefaultSeverity: 3, DefaultExposure: 4, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1911", NameDE: "Updates ohne kryptographische Signatur einspielbar", NameEN: "Unsigned firmware/software updates accepted",
+ RequiredComponentTags: []string{"has_software", "networked"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M541", "M547"},
+ Priority: 90,
+ ApplicableLifecycles: []string{"maintenance", "fault_clearing"},
+ ScenarioDE: "Software- oder Firmware-Updates der Maschine koennen ohne Pruefung einer Hersteller-Signatur eingespielt werden. Ein Angreifer mit physischem oder Netzwerk-Zugriff kann manipulierte Updates aufspielen und die Maschinensicherheit kompromittieren.",
+ TriggerDE: "Update-USB an HMI angesteckt; ungesicherter Update-Endpoint im Netzwerk erreichbar; Service-Techniker bringt nicht authentifiziertes Update mit.",
+ HarmDE: "Kompromittierung der Steuerung mit Folgewirkung auf Maschinensicherheit (z.B. Deaktivieren von Sicherheitsfunktionen, Manipulation von Achs-Limits, Daten-Diebstahl).",
+ AffectedDE: "Bedienpersonal, Wartungspersonal, Betreiber",
+ ZoneDE: "Steuerung, HMI, Update-Schnittstellen",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Werden alle Software-/Firmware-Updates kryptographisch signiert ausgeliefert?",
+ "Prueft die Maschine die Signatur vor dem Anwenden eines Updates und verweigert unsignierte Pakete?",
+ "Ist ein Rollback auf nachweislich verwundbare Versionen durch einen Versions-Counter blockiert?",
+ },
+ DefaultSeverity: 4, DefaultExposure: 2, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1912", NameDE: "Werkseitige Default-Passwoerter bleiben im Betrieb aktiv", NameEN: "Factory-default credentials remain active in production",
+ RequiredComponentTags: []string{"has_software", "user_interface"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M542"},
+ Priority: 85,
+ ApplicableLifecycles: []string{"setup", "normal_operation"},
+ ScenarioDE: "Die Maschine wird mit werkseitigen Standard-Passwoertern (z.B. admin/admin, 1234, Werks-Default-PIN) ausgeliefert. Werden diese nicht beim ersten Hochfahren zwangsweise geaendert, sind sie ueblicherweise oeffentlich bekannt.",
+ TriggerDE: "Inbetriebnahme ohne Initialisierungs-Wizard; Werks-Reset durch unbefugte Person; Werks-Default in Online-Listen veroeffentlicht.",
+ HarmDE: "Unautorisierter Zugriff auf Bediener-/Wartungsebene, Manipulation der Maschinen-Konfiguration, Abgriff von Produktions-/Personendaten.",
+ AffectedDE: "Betreiber, IT-/OT-Verantwortliche",
+ ZoneDE: "HMI, Wartungs-Login, Remote-Service-Zugang",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Erzwingt die Maschine beim ersten Hochfahren die Aenderung aller werkseitigen Default-Passwoerter?",
+ "Sind die werkseitigen Credentials in der oeffentlichen Dokumentation NICHT enthalten?",
+ "Wie wird ein Werks-Reset gegen unbefugten Zugriff geschuetzt?",
+ },
+ DefaultSeverity: 3, DefaultExposure: 3, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1913", NameDE: "Keine veroeffentlichte CVD-Policy (Vulnerability Disclosure)", NameEN: "No coordinated vulnerability disclosure policy",
+ RequiredComponentTags: []string{"has_software"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M543"},
+ Priority: 70,
+ ApplicableLifecycles: []string{"normal_operation"},
+ ScenarioDE: "Der Anlagenbauer hat keine veroeffentlichte Kontaktstelle fuer die Meldung von Schwachstellen. Externe Sicherheitsforscher oder Kunden finden keinen Weg, Schwachstellen vertraulich zu melden — diese werden im Zweifel ungefiltert oeffentlich (Full-Disclosure).",
+ TriggerDE: "Sicherheitsforscher findet Schwachstelle, kein PSIRT-Kontakt; Kunde will Schwachstelle melden, scheitert an Erreichbarkeit.",
+ HarmDE: "Veroeffentlichung von Schwachstellen ohne Patch verfuegbar (0-day in der Wildbahn), Reputationsverlust, Behoerden-Sanktion nach CRA.",
+ AffectedDE: "Hersteller, Betreiber, Sicherheitsforscher",
+ ZoneDE: "Hersteller-Website, Dokumentation",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Existiert eine veroeffentlichte CVD-Policy mit eindeutiger Meldekontaktstelle?",
+ "Ist eine security.txt nach RFC 9116 auf der Hersteller-Website hinterlegt?",
+ "Sind Antwort- und Behebungsfristen in der Policy dokumentiert?",
+ },
+ DefaultSeverity: 2, DefaultExposure: 3, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1914", NameDE: "Keine dokumentierte Patch-SLA fuer Sicherheits-Updates", NameEN: "No documented security patch SLA",
+ RequiredComponentTags: []string{"has_software"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M544"},
+ Priority: 70,
+ ApplicableLifecycles: []string{"normal_operation"},
+ ScenarioDE: "Der Hersteller hat keine verbindlichen Reaktionszeiten fuer Sicherheits-Patches definiert. Im Schwachstellenfall ist offen, wie schnell ein Patch geliefert wird — Betreiber kann sein Risiko nicht steuern.",
+ TriggerDE: "CVE wird veroeffentlicht; Betreiber fragt Patch-Termin an; Hersteller hat keine SLA und kann keinen Termin nennen.",
+ HarmDE: "Lange Exposition gegenueber bekannter Schwachstelle; Verstoss gegen CRA-Pflichten zur Schwachstellenbehandlung.",
+ AffectedDE: "Hersteller, Betreiber, IT-/OT-Verantwortliche",
+ ZoneDE: "Vertrags-/Dokumentationsebene",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Existiert eine dokumentierte Patch-SLA mit CVSS-abhaengigen Reaktionszeiten?",
+ "Welcher Sicherheits-Supportzeitraum wird zugesagt (CRA-Mindest: erwartete Nutzungsdauer, typ. 5 Jahre)?",
+ "Wird die SLA mit der Maschine ausgeliefert oder vertraglich vereinbart?",
+ },
+ DefaultSeverity: 2, DefaultExposure: 3, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1915", NameDE: "Fehlende Cybersecurity-Anwender-Dokumentation (Hardening-Guide)", NameEN: "Missing user-facing cybersecurity hardening guide",
+ RequiredComponentTags: []string{"has_software", "networked"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M545"},
+ Priority: 65,
+ ApplicableLifecycles: []string{"setup", "normal_operation"},
+ ScenarioDE: "Der Betreiber erhaelt keine Anleitung zur sicheren Inbetriebnahme und Konfiguration der Maschine im Werks-Netzwerk. Konfigurations-Fehler (offene Ports, ungehaerteter Default-Zustand) bleiben unentdeckt.",
+ TriggerDE: "Inbetriebnahme der Maschine im IT/OT-Netzwerk; Sicherheits-Audit beim Betreiber.",
+ HarmDE: "Angreifbares Konfigurations-Profil, das vom Standardzustand der Maschine vererbt wurde; Verstoss gegen CRA Anhang II (Anwender-Information).",
+ AffectedDE: "Betreiber, IT-/OT-Verantwortliche",
+ ZoneDE: "Maschinen-Konfiguration, Netzwerk-Anbindung",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Liegt der Maschine ein Cybersecurity-Hardening-Guide bei (Netzwerk-Segmentierung, deaktivierbare Dienste, sichere Konfiguration)?",
+ "Wird der Guide bei Updates gepflegt?",
+ "Enthaelt die Betriebsanleitung ein Kapitel 'Sichere Inbetriebnahme'?",
+ },
+ DefaultSeverity: 2, DefaultExposure: 3, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1916", NameDE: "Kein definierter Meldeprozess fuer Sicherheitsvorfaelle an ENISA/CSIRT", NameEN: "No incident notification process to ENISA / national CSIRT",
+ RequiredComponentTags: []string{"has_software"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M546"},
+ Priority: 75,
+ ApplicableLifecycles: []string{"normal_operation"},
+ ScenarioDE: "Der Hersteller hat keinen internen Prozess, um aktiv ausgenutzte Schwachstellen oder schwere Sicherheitsvorfaelle innerhalb der CRA-Meldefristen (24 h / 72 h / 14 Tage) an ENISA bzw. die zustaendige nationale Stelle zu melden.",
+ TriggerDE: "Schwachstelle wird in der Wildbahn ausgenutzt; Sicherheitsvorfall bei einem Kunden gemeldet.",
+ HarmDE: "Versaeumte Meldefrist nach CRA Art. 14 — Bussgeldrisiko, Verlust der CE-Konformitaetsvermutung.",
+ AffectedDE: "Hersteller, Compliance/PSIRT-Team",
+ ZoneDE: "Hersteller-Prozesse",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Existiert ein dokumentierter Incident-Notification-Prozess mit Eskalationsmatrix?",
+ "Sind die CRA-Meldefristen (Erstmeldung 24 h, Update 72 h, Abschluss 14 Tage) als interne SLA umgesetzt?",
+ "Ist die zustaendige nationale CSIRT-Stelle ermittelt und der Meldekanal getestet?",
+ },
+ DefaultSeverity: 3, DefaultExposure: 2, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1917", NameDE: "Keine Sicherheitsbewertung vor Inverkehrbringen (Pen-Test / Static Analysis)", NameEN: "No security assessment prior to placing on market",
+ RequiredComponentTags: []string{"has_software"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M548"},
+ Priority: 70,
+ ApplicableLifecycles: []string{"setup"},
+ ScenarioDE: "Vor dem erstmaligen Inverkehrbringen wurde keine dokumentierte Sicherheitsbewertung (mind. statische Code-Analyse + Schwachstellen-Scan) durchgefuehrt. Bekannte Schwachstellen-Klassen gelangen unbemerkt in die Auslieferung.",
+ TriggerDE: "Inverkehrbringen einer neuen Maschinen-Variante oder eines Major-Updates; behoerdlicher Konformitaetsnachweis.",
+ HarmDE: "Auslieferung von Maschinen mit bekannten Schwachstellen; Verstoss gegen CRA Anhang I (Cybersecurity-Anforderungen).",
+ AffectedDE: "Hersteller, Betreiber",
+ ZoneDE: "Entwicklungs-/Auslieferungsprozess",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Wird vor jedem Major-Release eine dokumentierte Sicherheitsbewertung durchgefuehrt?",
+ "Sind statische Analyse und Dependency-Scan in den CI-Pipeline integriert?",
+ "Werden bei erhoehtem Risiko Penetrationstests durch unabhaengige Stellen durchgefuehrt?",
+ },
+ DefaultSeverity: 3, DefaultExposure: 2, DefaultAvoidability: 1,
+ },
+ {
+ ID: "HP1918", NameDE: "AI-Komponente ohne Cybersecurity-Risikobetrachtung", NameEN: "AI component without cybersecurity risk assessment",
+ RequiredComponentTags: []string{"has_ai"},
+ GeneratedHazardCats: []string{"cyber_resilience"},
+ SuggestedMeasureIDs: []string{"M548", "M545"},
+ Priority: 75,
+ ApplicableLifecycles: []string{"normal_operation"},
+ ScenarioDE: "Die Maschine enthaelt KI-Komponenten (z.B. Bildverarbeitung, anomalie-basierte Wartung). Cybersecurity-spezifische KI-Risiken (Model Inversion, Adversarial Examples, Poisoning des Trainingsdatensatzes) wurden nicht geprueft.",
+ TriggerDE: "Adversarial Input wird ueber Sensor-/HMI-Schnittstelle eingespielt; manipuliertes Update-Modell wird ausgespielt.",
+ HarmDE: "Fehlsteuerung der Maschine durch manipuliertes KI-Modell; mittelbare Sicherheitsfolgen, Datenleckage aus Modell.",
+ AffectedDE: "Bedienpersonal, Betreiber",
+ ZoneDE: "KI-Modul, Modell-Auslieferungspfad",
+ ISO12100Section: "6.3.5.7",
+ ClarificationQuestionsDE: []string{
+ "Sind KI-spezifische Cybersecurity-Risiken (Adversarial Inputs, Poisoning, Model Inversion) im Risikobeurteilungsprozess betrachtet?",
+ "Wie wird die Integritaet ausgelieferter KI-Modelle sichergestellt (Signatur, Hash, sichere Auslieferungs-Kanal)?",
+ "Existiert ein Monitoring auf ungewoehnliche Eingangsmuster im Betrieb?",
+ },
+ DefaultSeverity: 3, DefaultExposure: 2, DefaultAvoidability: 1,
+ },
+ }
+}
diff --git a/ai-compliance-sdk/internal/iace/measures_library.go b/ai-compliance-sdk/internal/iace/measures_library.go
index 0274c2b3..40a0cece 100644
--- a/ai-compliance-sdk/internal/iace/measures_library.go
+++ b/ai-compliance-sdk/internal/iace/measures_library.go
@@ -20,6 +20,7 @@ func GetProtectiveMeasureLibrary() []ProtectiveMeasureEntry {
all = append(all, getVDMAMeasures()...) // VDMA-Sektoren: Holz, Oberfläche, Druck, Pumpen (Phase 3)
all = append(all, GetTextileAgriMeasures()...) // Textil + Landmaschinen (Phase 5)
all = append(all, getGTBremseMeasures()...) // GT-Bremse-Coverage-Gaps (M483-M522)
+ all = append(all, GetCRAMeasures()...) // CRA / DIN EN 40000-1-2 cyber-resilience (M540-M548)
return all
}
diff --git a/ai-compliance-sdk/internal/iace/measures_library_cra.go b/ai-compliance-sdk/internal/iace/measures_library_cra.go
new file mode 100644
index 00000000..60339f27
--- /dev/null
+++ b/ai-compliance-sdk/internal/iace/measures_library_cra.go
@@ -0,0 +1,70 @@
+package iace
+
+// GetCRAMeasures returns measures specific to the EU Cyber Resilience Act
+// (Verordnung (EU) 2024/2847, CRA). They cover the obligations the CRA
+// imposes on manufacturers of "products with digital elements" — SBOM,
+// vulnerability handling, secure updates, security documentation, incident
+// notification. Identifiers and short obligation summaries only — the
+// regulation itself is EU law and freely reproducible, but the harmonised
+// standard DIN EN 40000-1-2 (Entwurf) is DIN/Beuth proprietary and is
+// referenced by identifier only.
+//
+// M-ID range: M540-M548.
+func GetCRAMeasures() []ProtectiveMeasureEntry {
+ return []ProtectiveMeasureEntry{
+ {ID: "M540", ReductionType: "information", SubType: "documentation",
+ Name: "Software Bill of Materials (SBOM) erstellen und mit der Maschine ausliefern",
+ Description: "Der Anlagenbauer fuehrt eine maschinenlesbare Komponentenliste aller in der Steuerungs- und Anwendungssoftware enthaltenen Module (inkl. Open-Source-Bibliotheken, Lizenzen und Versionen) in einem Standardformat (SPDX oder CycloneDX). Die SBOM wird mit der Maschine uebergeben und bei Updates aktualisiert. Sie ist Grundlage fuer das Schwachstellen-Management nach CRA.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"SBOM im CycloneDX-JSON-Format auf Wartungs-USB", "SPDX-Datei im Geraete-Webinterface unter /system/sbom"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA)", "DIN EN 40000-1-2 (Entwurf)", "ISO/IEC 5962 (SPDX)"}},
+ {ID: "M541", ReductionType: "design", SubType: "secure_update",
+ Name: "Signierte Software- und Firmware-Updates mit Rollback-Schutz",
+ Description: "Updates der Steuerungs-, Roboter- und Visualisierungssoftware werden ausschliesslich kryptographisch signiert ausgeliefert. Die Steuerung prueft die Signatur vor der Installation und verweigert das Einspielen unsignierter Pakete. Ein Rollback-Schutz verhindert das Downgraden auf nachweislich verwundbare Versionen.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"X.509-signierte Update-Pakete mit Root-CA des Herstellers", "TPM-gestuetzter Boot-Pfad mit Versions-Counter"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Anhang I", "DIN EN 40000-1-2 (Entwurf)", "IEC 62443-4-1"}},
+ {ID: "M542", ReductionType: "design", SubType: "auth",
+ Name: "Initiale Default-Passwoerter beim ersten Start erzwungen aendern",
+ Description: "Die Maschine fordert beim ersten Hochfahren zwingend die Aenderung aller werkseitigen Default-Passwoerter (Bediener, Wartung, Admin). Default-Credentials werden nicht in Klartext in der Dokumentation veroeffentlicht, sondern dem Betreiber separat (versiegelt) uebergeben. Eine Wiederherstellung auf Default-Credentials ist nur ueber physischen Zugriff moeglich.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"First-Boot-Wizard mit Passwort-Komplexitaetspruefung", "Versiegeltes Werks-Passwort-Tag am HMI"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Anhang I", "DIN EN 40000-1-2 (Entwurf)", "ETSI EN 303 645"}},
+ {ID: "M543", ReductionType: "information", SubType: "process",
+ Name: "CVD-Policy (Coordinated Vulnerability Disclosure) veroeffentlichen",
+ Description: "Der Hersteller veroeffentlicht eine Coordinated-Vulnerability-Disclosure-Policy: Eine eindeutige Kontaktstelle (E-Mail, PGP-Key oder Web-Formular) ermoeglicht die vertrauliche Meldung von Schwachstellen. Antwort- und Behebungsfristen sind dokumentiert. Die Policy wird mit der Maschinendokumentation ausgeliefert und auf der Hersteller-Website publiziert.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"security.txt nach RFC 9116 auf Hersteller-Website", "PSIRT-Kontakt mit PGP-Public-Key in der Betriebsanleitung"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Art. 11", "DIN EN 40000-1-2 (Entwurf)", "ISO/IEC 29147"}},
+ {ID: "M544", ReductionType: "information", SubType: "process",
+ Name: "Patch-SLA mit Severity-Tiers dokumentieren",
+ Description: "Der Hersteller dokumentiert verbindliche Reaktionszeiten fuer Sicherheits-Updates abhaengig von der CVSS-Schwere: Kritisch (CVSS 9.0+): Patch innerhalb von 30 Tagen; Hoch (7.0+): 90 Tage; Mittel (4.0+): 180 Tage. Die Patch-SLA wird mit der Lieferung uebergeben. Erforderlich fuer den gesamten CRA-Supportzeitraum (typ. 5 Jahre, max. erwartete Nutzungsdauer).",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"Sicherheits-Support-Erklaerung im Vertrag", "Online-Statusseite mit Roadmap der CVE-Reaktionen"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Art. 13", "DIN EN 40000-1-2 (Entwurf)"}},
+ {ID: "M545", ReductionType: "information", SubType: "documentation",
+ Name: "Cybersecurity-Hardening-Guide fuer den Anwender beilegen",
+ Description: "Die mit der Maschine ausgelieferte Dokumentation enthaelt einen Cybersecurity-Hardening-Guide: empfohlene Netzwerk-Segmentierung, deaktivierbare Dienste, sichere Konfiguration aller eingebauten Komponenten (PLC, HMI, Roboter), Empfehlungen zur Benutzer-Verwaltung. Der Guide wird bei Update-Releases gepflegt.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"Kapitel 'Sichere Inbetriebnahme' in der Betriebsanleitung", "Separater PDF-Guide mit aktualisierter Pflege"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Anhang II", "DIN EN 40000-1-2 (Entwurf)", "IEC 62443-3-3"}},
+ {ID: "M546", ReductionType: "information", SubType: "process",
+ Name: "Incident-Meldeprozess an ENISA / nationale CSIRT definieren",
+ Description: "Der Hersteller hat einen dokumentierten Prozess fuer die Meldung aktiv ausgenutzter Schwachstellen und schwerer Sicherheitsvorfaelle an ENISA bzw. die zustaendige nationale Stelle gemaess CRA-Pflichten (Erstmeldung innerhalb von 24 h, Update binnen 72 h, Abschlussbericht binnen 14 Tagen).",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"Interner PSIRT-Workflow mit Eskalationsmatrix", "Vorlage Meldebogen 'ENISA Initial Notification'"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Art. 14", "Richtlinie (EU) 2022/2555 (NIS2)"}},
+ {ID: "M547", ReductionType: "design", SubType: "secure_update",
+ Name: "Updates ueber authentisierten Kanal mit Integritaetspruefung",
+ Description: "Der Update-Kanal (Online-Pull oder USB-Push) ist gegen Manipulation gesichert: TLS-1.3 mit Zertifikatspruefung bei Online-Updates, Hash-Pruefung der Update-Datei vor dem Anwenden. Der Update-Prozess ist atomar: bei Abbruch bleibt die alte Version lauffaehig.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"HTTPS-Update-Endpoint mit Pin der Hersteller-CA", "A/B-Slot-Update mit Roll-Back bei Boot-Fehler"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Anhang I", "DIN EN 40000-1-2 (Entwurf)", "IEC 62443-4-2"}},
+ {ID: "M548", ReductionType: "information", SubType: "validation",
+ Name: "Sicherheitsbewertung / Penetrationstest vor Inverkehrbringen",
+ Description: "Vor dem erstmaligen Inverkehrbringen wird eine dokumentierte Sicherheitsbewertung der Maschine durchgefuehrt (mind. statische Analyse + Schwachstellen-Scan, bei hoeherem Risiko: Penetrationstest durch unabhaengige Stelle). Die Ergebnisse werden in der technischen Dokumentation aufbewahrt und bei wesentlichen Aenderungen wiederholt.",
+ HazardCategory: "cyber_resilience",
+ Examples: []string{"Statische Code-Analyse + OWASP-Dependency-Check im CI", "Penetrationstest-Bericht eines akkreditierten Labors"},
+ NormReferences: []string{"Verordnung (EU) 2024/2847 (CRA), Anhang I", "DIN EN 40000-1-2 (Entwurf)", "ISO/IEC 15408 (Common Criteria)"}},
+ }
+}
diff --git a/ai-compliance-sdk/internal/iace/pattern_coverage_test.go b/ai-compliance-sdk/internal/iace/pattern_coverage_test.go
index 13325dcb..2c4a0f09 100644
--- a/ai-compliance-sdk/internal/iace/pattern_coverage_test.go
+++ b/ai-compliance-sdk/internal/iace/pattern_coverage_test.go
@@ -48,6 +48,7 @@ var patternCategoryCompatibility = map[string]map[string]bool{
"vibration_source": {"noise_vibration": true, "ergonomic": true},
"high_temperature": {"thermal": true, "material_environmental": true},
"material_environmental_hazard": {"material_environmental": true},
+ "cyber_resilience": {"cyber_resilience": true, "cyber_network": true, "software_control": true},
}
// TestEveryPattern_HasCategoryCompatibleMeasure is the contract that replaces
diff --git a/ai-compliance-sdk/internal/iace/pattern_registry.go b/ai-compliance-sdk/internal/iace/pattern_registry.go
index 27b06035..6c54c829 100644
--- a/ai-compliance-sdk/internal/iace/pattern_registry.go
+++ b/ai-compliance-sdk/internal/iace/pattern_registry.go
@@ -41,5 +41,6 @@ func collectAllPatterns() []HazardPattern {
patterns = append(patterns, GetRobotCellPatternsExt()...) // HP1650-HP1699 Robot cell extended (GT gaps)
patterns = append(patterns, GetGTBremseHazardPatterns()...) // HP1710-HP1729 GT Bremse coverage gaps
patterns = append(patterns, GetISO12100GapPatterns()...) // HP1900-HP1909 ISO 12100 Annex B gaps (Vakuum, Federn, Rutsch, Hochdruckinjektion, Ersticken)
+ patterns = append(patterns, GetCRAPatterns()...) // HP1910-HP1918 CRA / DIN EN 40000-1-2 cyber-resilience spur
return patterns
}