1use super::{StandardKind, ViolationSeverity};
6
7#[derive(Debug, Clone, Copy)]
14pub struct RuleMeta {
15 pub sarif_id: &'static str,
18 pub default_severity: ViolationSeverity,
22 pub refs: &'static [(StandardKind, &'static str)],
24 pub remediation: &'static str,
26}
27
28pub(crate) const REMEDIATION_GENERIC: &str = "Review the requirement and update the SBOM accordingly. Consult the EU CRA regulation (EU 2024/2847) for detailed guidance.";
30
31const REMEDIATION_SSDF: &str = "Follow NIST SP 800-218 SSDF practices: include tool provenance, source VCS references, build metadata, and cryptographic hashes for all components.";
33
34const REMEDIATION_EO14028: &str = "Follow EO 14028 Section 4(e) requirements: use a machine-readable format (CycloneDX 1.4+, SPDX 2.3+, or SPDX 3.0+), auto-generate the SBOM, include unique identifiers, versions, hashes, dependencies, and supplier information.";
36
37const REMEDIATION_AIACT_NA: &str = "EU AI Act Annex IV readiness applies only to SBOMs that describe AI/ML systems. Add machine-learning-model or dataset components (CycloneDX 1.5+ AI/ML BOM) to enable the assessment.";
39
40const REMEDIATION_BSIAI_NA: &str = "BSI/G7 SBOM-for-AI minimum-elements readiness applies only to SBOMs that describe AI/ML systems. Add machine-learning-model or dataset components (CycloneDX 1.5+ AI/ML BOM, or an SPDX 3.0 AI/Dataset profile) to enable the assessment.";
42
43const REMEDIATION_BSIAI_MODELS: &str = "Declare the BSI/G7 SBOM-for-AI Models minimum elements for each MachineLearningModel component: name, version, a unique identifier (PURL/CPE/SWHID/SWID), a model-weight hash using a NIST-approved algorithm (SHA-256+), a model card, the architecture, training datasets, limitations, and a license.";
45
46const REMEDIATION_BSIAI_DATASETS: &str = "Declare the BSI/G7 SBOM-for-AI Datasets minimum elements for each Data component: name, a unique identifier, a hash value, a license, a sensitivity classification, and provenance / intended-use (SPDX 3.0 dataset_intendedUse / dataPreprocessing / anonymizationMethodUsed, or governance owners).";
48
49const REMEDIATION_BSIAI_GENERAL: &str = "Declare the BSI/G7 SBOM-for-AI minimum elements: document author, data-format name + version, timestamp, generation tool, and signature; the primary AI system, its producer, and its data-flow/usage; runtime/framework infrastructure links; and AI-specific security controls / exploitability references where they can be expressed.";
51
52#[must_use]
59pub fn rule_meta(rule_id: &str) -> Option<RuleMeta> {
60 use StandardKind as K;
61 const CRA: K = K::CraArticle;
62 const ANNEX: K = K::CraAnnex;
63 const PREN: K = K::Pren40000_1_3;
64 let meta = match rule_id {
65 "SBOM-CRA-ART-13-2" => RuleMeta {
67 sarif_id: "SBOM-CRA-GENERAL",
68 default_severity: ViolationSeverity::Warning,
69 refs: &[(CRA, "Art. 13(2)")],
70 remediation: REMEDIATION_GENERIC,
71 },
72 "SBOM-CRA-ART-13-3" => RuleMeta {
73 sarif_id: "SBOM-CRA-ART-13-3",
74 default_severity: ViolationSeverity::Warning,
75 refs: &[(CRA, "Art. 13(3)")],
76 remediation: "Regenerate the SBOM when components are added, removed, or updated. CRA Art. 13(3) requires timely updates reflecting the current state of the software.",
77 },
78 "SBOM-CRA-ART-13-4" => RuleMeta {
79 sarif_id: "SBOM-CRA-ART-13-4",
80 default_severity: ViolationSeverity::Warning,
81 refs: &[(CRA, "Art. 13(4)"), (PREN, "PRE-7-RQ-04")],
82 remediation: "Ensure the SBOM is produced in CycloneDX 1.4+ (JSON or XML), SPDX 2.3+ (JSON or tag-value), or SPDX 3.0+ (JSON-LD). Older format versions may not be recognized as machine-readable under the CRA.",
83 },
84 "SBOM-CRA-ART-13-5" => RuleMeta {
85 sarif_id: "SBOM-CRA-ART-13-5",
86 default_severity: ViolationSeverity::Warning,
87 refs: &[(CRA, "Art. 13(5)")],
88 remediation: "Ensure every component has license information. CycloneDX: use component.licenses[]. SPDX 2.x: use PackageLicenseDeclared / PackageLicenseConcluded. SPDX 3.0: use HAS_DECLARED_LICENSE / HAS_CONCLUDED_LICENSE relationships.",
89 },
90 "SBOM-CRA-ART-13-6-CONTACT" => RuleMeta {
91 sarif_id: "SBOM-CRA-ART-13-6",
92 default_severity: ViolationSeverity::Warning,
93 refs: &[(CRA, "Art. 13(6)")],
94 remediation: "Add a security contact or vulnerability disclosure URL. CycloneDX: add a component externalReference with type 'security-contact' or set metadata.manufacturer.contact. SPDX: add an SECURITY external reference.",
95 },
96 "SBOM-CRA-ART-13-6-METADATA" => RuleMeta {
97 sarif_id: "SBOM-CRA-ART-13-6",
98 default_severity: ViolationSeverity::Warning,
99 refs: &[(CRA, "Art. 13(6)")],
100 remediation: "Add severity (e.g., CVSS score) and remediation details to each vulnerability entry. CycloneDX: use vulnerability.ratings[].score and vulnerability.analysis. SPDX: use annotation or externalRef.",
101 },
102 "SBOM-CRA-ART-13-7" => RuleMeta {
103 sarif_id: "SBOM-CRA-ART-13-7",
104 default_severity: ViolationSeverity::Warning,
105 refs: &[(CRA, "Art. 13(7)"), (PREN, "RLS-2-RQ-03-RE")],
106 remediation: "Reference a coordinated vulnerability disclosure policy. CycloneDX: add an externalReference of type 'advisories' linking to your disclosure policy. SPDX: add an external document reference.",
107 },
108 "SBOM-CRA-ART-13-8" => RuleMeta {
109 sarif_id: "SBOM-CRA-ART-13-8",
110 default_severity: ViolationSeverity::Info,
111 refs: &[(CRA, "Art. 13(8)")],
112 remediation: "Specify when security updates will no longer be provided. CycloneDX 1.5+: use component.releaseNotes or metadata properties. SPDX: use an annotation with end-of-support date.",
113 },
114 "SBOM-CRA-ART-13-9" => RuleMeta {
115 sarif_id: "SBOM-CRA-ART-13-9",
116 default_severity: ViolationSeverity::Info,
117 refs: &[(CRA, "Art. 13(9)")],
118 remediation: "Include vulnerability data or add a vulnerability-assertion external reference stating no known vulnerabilities. CycloneDX: use the vulnerabilities array. SPDX: use annotations or external references.",
119 },
120 "SBOM-CRA-ART-13-11" => RuleMeta {
121 sarif_id: "SBOM-CRA-ART-13-11",
122 default_severity: ViolationSeverity::Info,
123 refs: &[(CRA, "Art. 13(11)")],
124 remediation: "Include lifecycle or end-of-support metadata for components. CycloneDX: use component properties (e.g., cdx:lifecycle:status). SPDX: use annotations.",
125 },
126 "SBOM-CRA-ART-13-12-PRODUCT" => RuleMeta {
127 sarif_id: "SBOM-CRA-ART-13-12",
128 default_severity: ViolationSeverity::Warning,
129 refs: &[(CRA, "Art. 13(12)")],
130 remediation: "The SBOM must identify the product by name. CycloneDX: set metadata.component.name. SPDX: set documentDescribes with the primary package name.",
131 },
132 "SBOM-CRA-ART-13-12-VERSION" => RuleMeta {
133 sarif_id: "SBOM-CRA-ART-13-12",
134 default_severity: ViolationSeverity::Error,
135 refs: &[(CRA, "Art. 13(12)"), (PREN, "PRE-7-RQ-06")],
136 remediation: "Every component must have a version string. Use the actual release version (e.g., '1.2.3'), not a range or placeholder.",
137 },
138 "SBOM-CRA-ART-13-15" => RuleMeta {
139 sarif_id: "SBOM-CRA-ART-13-15",
140 default_severity: ViolationSeverity::Warning,
141 refs: &[(CRA, "Art. 13(15)")],
142 remediation: "Identify the manufacturer/supplier. CycloneDX: set metadata.manufacturer or component.supplier. SPDX: set PackageSupplier.",
143 },
144 "SBOM-CRA-ART-13-15-EMAIL" => RuleMeta {
145 sarif_id: "SBOM-CRA-ART-13-15",
146 default_severity: ViolationSeverity::Warning,
147 refs: &[(CRA, "Art. 13(15)")],
148 remediation: "Provide a valid contact email for the manufacturer. The email must contain an @ sign with valid local and domain parts.",
149 },
150 "SBOM-CRA-ART-14" => RuleMeta {
151 sarif_id: "SBOM-CRA-GENERAL",
152 default_severity: ViolationSeverity::Info,
153 refs: &[(CRA, "Art. 14")],
154 remediation: REMEDIATION_GENERIC,
155 },
156 "SBOM-CRA-ART-24" => RuleMeta {
157 sarif_id: "SBOM-CRA-GENERAL",
158 default_severity: ViolationSeverity::Warning,
159 refs: &[],
160 remediation: REMEDIATION_GENERIC,
161 },
162 "SBOM-CRA-ANNEX-I-IDENTIFIER" => RuleMeta {
164 sarif_id: "SBOM-CRA-ANNEX-I",
165 default_severity: ViolationSeverity::Warning,
166 refs: &[(ANNEX, "Annex I"), (PREN, "PRE-7-RQ-07")],
167 remediation: "Add a PURL, CPE, or SWID tag to each component for unique identification. PURLs are preferred (e.g., pkg:npm/lodash@4.17.21).",
168 },
169 "SBOM-CRA-ANNEX-I-TRACEABILITY" => RuleMeta {
170 sarif_id: "SBOM-CRA-ANNEX-I",
171 default_severity: ViolationSeverity::Warning,
172 refs: &[(ANNEX, "Annex I Part II"), (PREN, "PRE-7-RQ-07")],
173 remediation: "Add a PURL, CPE, or SWID tag to each component for unique identification. PURLs are preferred (e.g., pkg:npm/lodash@4.17.21).",
174 },
175 "SBOM-CRA-ANNEX-I-SUPPLY-CHAIN" => RuleMeta {
176 sarif_id: "SBOM-CRA-ANNEX-I",
177 default_severity: ViolationSeverity::Warning,
178 refs: &[
179 (ANNEX, "Annex I Part II"),
180 (ANNEX, "Annex I Part III"),
181 (PREN, "PRE-7-RQ-01"),
182 (PREN, "PRE-7-RQ-03"),
183 ],
184 remediation: "Add dependency relationships between components. CycloneDX: use the dependencies array. SPDX: use DEPENDS_ON relationships.",
185 },
186 "SBOM-CRA-ANNEX-I-INTEGRITY" => RuleMeta {
187 sarif_id: "SBOM-CRA-ANNEX-I",
188 default_severity: ViolationSeverity::Info,
189 refs: &[(ANNEX, "Annex I")],
190 remediation: "Add cryptographic hashes (SHA-256 or stronger) to components for integrity verification.",
191 },
192 "SBOM-CRA-ANNEX-I-DEPENDENCY" => RuleMeta {
193 sarif_id: "SBOM-CRA-ANNEX-I",
194 default_severity: ViolationSeverity::Error,
195 refs: &[(ANNEX, "Annex I")],
196 remediation: "Add dependency relationships between components. CycloneDX: use the dependencies array. SPDX: use DEPENDS_ON relationships.",
197 },
198 "SBOM-CRA-ANNEX-I-PRIMARY" => RuleMeta {
199 sarif_id: "SBOM-CRA-ANNEX-I",
200 default_severity: ViolationSeverity::Warning,
201 refs: &[(ANNEX, "Annex I")],
202 remediation: "Identify the top-level product component. CycloneDX: set metadata.component. SPDX: use documentDescribes to point to the primary package.",
203 },
204 "SBOM-CRA-ANNEX-I-CONTROLS" => RuleMeta {
205 sarif_id: "SBOM-CRA-ANNEX-I",
206 default_severity: ViolationSeverity::Warning,
207 refs: &[(ANNEX, "Annex I")],
208 remediation: REMEDIATION_GENERIC,
209 },
210 "SBOM-CRA-ANNEX-III" => RuleMeta {
211 sarif_id: "SBOM-CRA-ANNEX-III",
212 default_severity: ViolationSeverity::Info,
213 refs: &[(ANNEX, "Annex III")],
214 remediation: "Add document-level integrity metadata: a serial number (CycloneDX: serialNumber, SPDX: documentNamespace), or a digital signature/attestation with a cryptographic hash.",
215 },
216 "SBOM-CRA-ANNEX-IV" => RuleMeta {
217 sarif_id: "SBOM-CRA-GENERAL",
218 default_severity: ViolationSeverity::Info,
219 refs: &[(ANNEX, "Annex IV")],
220 remediation: REMEDIATION_GENERIC,
221 },
222 "SBOM-CRA-ANNEX-VII" => RuleMeta {
223 sarif_id: "SBOM-CRA-ANNEX-VII",
224 default_severity: ViolationSeverity::Info,
225 refs: &[(ANNEX, "Annex VII")],
226 remediation: "Reference the EU Declaration of Conformity. CycloneDX: add an externalReference of type 'attestation' or 'certification'. SPDX: add an external document reference.",
227 },
228 "SBOM-CRA-ANNEX-VIII" => RuleMeta {
229 sarif_id: "SBOM-CRA-ANNEX-VII",
231 default_severity: ViolationSeverity::Info,
232 refs: &[(ANNEX, "Annex VIII")],
233 remediation: REMEDIATION_GENERIC,
234 },
235 "SBOM-CRA-PRE-8-RQ-02" => RuleMeta {
236 sarif_id: "SBOM-CRA-PRE-8-RQ-02",
237 default_severity: ViolationSeverity::Error,
238 refs: &[(PREN, "PRE-8-RQ-02")],
239 remediation: REMEDIATION_GENERIC,
240 },
241 "SBOM-CRA-PRE-7-RQ-07-RE" => RuleMeta {
242 sarif_id: "SBOM-CRA-PRE-7-RQ-07-RE",
243 default_severity: ViolationSeverity::Warning,
244 refs: &[
245 (ANNEX, "Annex I Part II"),
246 (PREN, "PRE-7-RQ-07"),
247 (PREN, "PRE-7-RQ-07-RE"),
248 ],
249 remediation: "Add cryptographic hashes (SHA-256 or stronger) to components for integrity verification.",
250 },
251 "SBOM-CRA-GENERAL" => RuleMeta {
253 sarif_id: "SBOM-CRA-GENERAL",
254 default_severity: ViolationSeverity::Warning,
255 refs: &[],
256 remediation: REMEDIATION_GENERIC,
257 },
258 "SBOM-EUCC" => RuleMeta {
260 sarif_id: "SBOM-CRA-GENERAL",
261 default_severity: ViolationSeverity::Warning,
262 refs: &[],
263 remediation: REMEDIATION_GENERIC,
264 },
265 "SBOM-AIACT-NA" => RuleMeta {
267 sarif_id: "SBOM-AIACT-NA",
268 default_severity: ViolationSeverity::Info,
269 refs: &[(K::EuAiAct, "Annex IV")],
270 remediation: REMEDIATION_AIACT_NA,
271 },
272 "SBOM-AIACT-ANNEX-IV-1-DESCRIPTION" => RuleMeta {
273 sarif_id: "SBOM-AIACT-ANNEX-IV-1",
274 default_severity: ViolationSeverity::Warning,
275 refs: &[(K::EuAiAct, "Annex IV §1")],
276 remediation: "Add a general description of the AI model: architecture family/name and a model-card reference. CycloneDX: set modelCard.modelParameters.architectureFamily / modelArchitecture and an external reference of type 'model-card'.",
277 },
278 "SBOM-AIACT-ANNEX-IV-1-PURPOSE" => RuleMeta {
279 sarif_id: "SBOM-AIACT-ANNEX-IV-1",
280 default_severity: ViolationSeverity::Warning,
281 refs: &[(K::EuAiAct, "Annex IV §1")],
282 remediation: "Document the intended purpose / use-cases of the AI model. CycloneDX: set modelCard.considerations.useCases.",
283 },
284 "SBOM-AIACT-ANNEX-IV-2D-DATASETS" => RuleMeta {
285 sarif_id: "SBOM-AIACT-ANNEX-IV-2D",
286 default_severity: ViolationSeverity::Warning,
287 refs: &[(K::EuAiAct, "Annex IV §2(d)")],
288 remediation: "Reference the training datasets used. CycloneDX: set modelCard.modelParameters.datasets with a {ref} to a data component.",
289 },
290 "SBOM-AIACT-ANNEX-IV-2D-SENSITIVITY" => RuleMeta {
291 sarif_id: "SBOM-AIACT-ANNEX-IV-2D",
292 default_severity: ViolationSeverity::Warning,
293 refs: &[(K::EuAiAct, "Annex IV §2(d)")],
294 remediation: "Declare a sensitivity classification for each dataset (e.g. 'none', 'pii', 'personal'). CycloneDX: set the data component's sensitiveData array.",
295 },
296 "SBOM-AIACT-ANNEX-IV-2D-PERSONAL-DATA" => RuleMeta {
297 sarif_id: "SBOM-AIACT-ANNEX-IV-2D",
298 default_severity: ViolationSeverity::Info,
299 refs: &[(K::EuAiAct, "Annex IV §2(d)")],
300 remediation: "Where training data involves personal data, document the GDPR lawful basis and data-protection measures alongside the SBOM (AI Act and GDPR apply in parallel).",
301 },
302 "SBOM-AIACT-ANNEX-IV-2G-METRICS" => RuleMeta {
303 sarif_id: "SBOM-AIACT-ANNEX-IV-2G",
304 default_severity: ViolationSeverity::Warning,
305 refs: &[(K::EuAiAct, "Annex IV §2(g)")],
306 remediation: "Record validation/testing metrics (accuracy, robustness). CycloneDX: set modelCard.quantitativeAnalysis.performanceMetrics.",
307 },
308 "SBOM-AIACT-ANNEX-IV-2G-ENERGY" => RuleMeta {
309 sarif_id: "SBOM-AIACT-ANNEX-IV-2G",
310 default_severity: ViolationSeverity::Info,
311 refs: &[(K::EuAiAct, "Annex IV §2(g)")],
312 remediation: "Disclose computational resources / training energy. CycloneDX: set modelCard.considerations.environmentalConsiderations.energyConsumptions.",
313 },
314 "SBOM-AIACT-ANNEX-IV-3-LIMITATIONS" => RuleMeta {
315 sarif_id: "SBOM-AIACT-ANNEX-IV-3",
316 default_severity: ViolationSeverity::Info,
317 refs: &[(K::EuAiAct, "Annex IV §3")],
318 remediation: "State the foreseeable limitations and risks of the model, including ethical and fairness considerations. CycloneDX: set modelCard.considerations.technicalLimitations / ethicalConsiderations / fairnessAssessments.",
319 },
320 "SBOM-BSIAI-NA" => RuleMeta {
322 sarif_id: "SBOM-BSIAI-NA",
323 default_severity: ViolationSeverity::Info,
324 refs: &[(K::BsiSbomForAi, "Applicability")],
325 remediation: REMEDIATION_BSIAI_NA,
326 },
327 "SBOM-BSIAI-META-AUTHOR" => RuleMeta {
329 sarif_id: "SBOM-BSIAI-META",
330 default_severity: ViolationSeverity::Error,
331 refs: &[(K::BsiSbomForAi, "Metadata / Author")],
332 remediation: REMEDIATION_BSIAI_GENERAL,
333 },
334 "SBOM-BSIAI-META-FORMAT" => RuleMeta {
335 sarif_id: "SBOM-BSIAI-META",
336 default_severity: ViolationSeverity::Error,
337 refs: &[(K::BsiSbomForAi, "Metadata / Data format name + version")],
338 remediation: REMEDIATION_BSIAI_GENERAL,
339 },
340 "SBOM-BSIAI-META-TIMESTAMP" => RuleMeta {
341 sarif_id: "SBOM-BSIAI-META",
342 default_severity: ViolationSeverity::Error,
343 refs: &[(K::BsiSbomForAi, "Metadata / Timestamp")],
344 remediation: REMEDIATION_BSIAI_GENERAL,
345 },
346 "SBOM-BSIAI-META-TOOL" => RuleMeta {
347 sarif_id: "SBOM-BSIAI-META",
348 default_severity: ViolationSeverity::Warning,
349 refs: &[(K::BsiSbomForAi, "Metadata / Generation tool")],
350 remediation: REMEDIATION_BSIAI_GENERAL,
351 },
352 "SBOM-BSIAI-META-SIGNATURE" => RuleMeta {
353 sarif_id: "SBOM-BSIAI-META",
354 default_severity: ViolationSeverity::Info,
355 refs: &[(K::BsiSbomForAi, "Metadata / Signature")],
356 remediation: REMEDIATION_BSIAI_GENERAL,
357 },
358 "SBOM-BSIAI-SYS-PRIMARY" => RuleMeta {
360 sarif_id: "SBOM-BSIAI-SYS",
361 default_severity: ViolationSeverity::Warning,
362 refs: &[(K::BsiSbomForAi, "System-Level / Primary AI system")],
363 remediation: REMEDIATION_BSIAI_GENERAL,
364 },
365 "SBOM-BSIAI-SYS-PRODUCER" => RuleMeta {
366 sarif_id: "SBOM-BSIAI-SYS",
367 default_severity: ViolationSeverity::Warning,
368 refs: &[(K::BsiSbomForAi, "System-Level / Producer")],
369 remediation: REMEDIATION_BSIAI_GENERAL,
370 },
371 "SBOM-BSIAI-SYS-DATAFLOW" => RuleMeta {
372 sarif_id: "SBOM-BSIAI-SYS",
373 default_severity: ViolationSeverity::Info,
374 refs: &[(K::BsiSbomForAi, "System-Level / Data flow & usage")],
375 remediation: REMEDIATION_BSIAI_GENERAL,
376 },
377 "SBOM-BSIAI-MODEL-NAME" => RuleMeta {
379 sarif_id: "SBOM-BSIAI-MODEL",
380 default_severity: ViolationSeverity::Error,
381 refs: &[(K::BsiSbomForAi, "Models / Model name")],
382 remediation: REMEDIATION_BSIAI_MODELS,
383 },
384 "SBOM-BSIAI-MODEL-VERSION" => RuleMeta {
385 sarif_id: "SBOM-BSIAI-MODEL",
386 default_severity: ViolationSeverity::Error,
387 refs: &[(K::BsiSbomForAi, "Models / Model version")],
388 remediation: REMEDIATION_BSIAI_MODELS,
389 },
390 "SBOM-BSIAI-MODEL-IDENTIFIER" => RuleMeta {
391 sarif_id: "SBOM-BSIAI-MODEL",
392 default_severity: ViolationSeverity::Error,
393 refs: &[(K::BsiSbomForAi, "Models / Model identifier")],
394 remediation: REMEDIATION_BSIAI_MODELS,
395 },
396 "SBOM-BSIAI-MODEL-HASH" => RuleMeta {
397 sarif_id: "SBOM-BSIAI-MODEL",
398 default_severity: ViolationSeverity::Error,
399 refs: &[(K::BsiSbomForAi, "Models / Model hash value")],
400 remediation: REMEDIATION_BSIAI_MODELS,
401 },
402 "SBOM-BSIAI-MODEL-HASH-ALGO" => RuleMeta {
403 sarif_id: "SBOM-BSIAI-MODEL",
404 default_severity: ViolationSeverity::Error,
405 refs: &[(K::BsiSbomForAi, "Models / Hash algorithm")],
406 remediation: REMEDIATION_BSIAI_MODELS,
407 },
408 "SBOM-BSIAI-MODEL-CARD" => RuleMeta {
409 sarif_id: "SBOM-BSIAI-MODEL",
410 default_severity: ViolationSeverity::Warning,
411 refs: &[(K::BsiSbomForAi, "Models / Model card")],
412 remediation: REMEDIATION_BSIAI_MODELS,
413 },
414 "SBOM-BSIAI-MODEL-ARCHITECTURE" => RuleMeta {
415 sarif_id: "SBOM-BSIAI-MODEL",
416 default_severity: ViolationSeverity::Warning,
417 refs: &[(K::BsiSbomForAi, "Models / Architecture")],
418 remediation: REMEDIATION_BSIAI_MODELS,
419 },
420 "SBOM-BSIAI-MODEL-DATASETS" => RuleMeta {
421 sarif_id: "SBOM-BSIAI-MODEL",
422 default_severity: ViolationSeverity::Warning,
423 refs: &[(K::BsiSbomForAi, "Models / Training datasets")],
424 remediation: REMEDIATION_BSIAI_MODELS,
425 },
426 "SBOM-BSIAI-MODEL-LIMITATIONS" => RuleMeta {
427 sarif_id: "SBOM-BSIAI-MODEL",
428 default_severity: ViolationSeverity::Warning,
429 refs: &[(K::BsiSbomForAi, "Models / Limitations")],
430 remediation: REMEDIATION_BSIAI_MODELS,
431 },
432 "SBOM-BSIAI-MODEL-LICENSE" => RuleMeta {
433 sarif_id: "SBOM-BSIAI-MODEL",
434 default_severity: ViolationSeverity::Warning,
435 refs: &[(K::BsiSbomForAi, "Models / Model license")],
436 remediation: REMEDIATION_BSIAI_MODELS,
437 },
438 "SBOM-BSIAI-DATASET-NAME" => RuleMeta {
440 sarif_id: "SBOM-BSIAI-DATASET",
441 default_severity: ViolationSeverity::Error,
442 refs: &[(K::BsiSbomForAi, "Datasets / Dataset name")],
443 remediation: REMEDIATION_BSIAI_DATASETS,
444 },
445 "SBOM-BSIAI-DATASET-IDENTIFIER" => RuleMeta {
446 sarif_id: "SBOM-BSIAI-DATASET",
447 default_severity: ViolationSeverity::Error,
448 refs: &[(K::BsiSbomForAi, "Datasets / Dataset identifier")],
449 remediation: REMEDIATION_BSIAI_DATASETS,
450 },
451 "SBOM-BSIAI-DATASET-HASH" => RuleMeta {
452 sarif_id: "SBOM-BSIAI-DATASET",
453 default_severity: ViolationSeverity::Warning,
454 refs: &[(K::BsiSbomForAi, "Datasets / Dataset hash value")],
455 remediation: REMEDIATION_BSIAI_DATASETS,
456 },
457 "SBOM-BSIAI-DATASET-LICENSE" => RuleMeta {
458 sarif_id: "SBOM-BSIAI-DATASET",
459 default_severity: ViolationSeverity::Warning,
460 refs: &[(K::BsiSbomForAi, "Datasets / Dataset license")],
461 remediation: REMEDIATION_BSIAI_DATASETS,
462 },
463 "SBOM-BSIAI-DATASET-SENSITIVITY" => RuleMeta {
464 sarif_id: "SBOM-BSIAI-DATASET",
465 default_severity: ViolationSeverity::Warning,
466 refs: &[(K::BsiSbomForAi, "Datasets / Sensitivity classification")],
467 remediation: REMEDIATION_BSIAI_DATASETS,
468 },
469 "SBOM-BSIAI-DATASET-PROVENANCE" => RuleMeta {
470 sarif_id: "SBOM-BSIAI-DATASET",
471 default_severity: ViolationSeverity::Warning,
472 refs: &[(K::BsiSbomForAi, "Datasets / Provenance & intended use")],
473 remediation: REMEDIATION_BSIAI_DATASETS,
474 },
475 "SBOM-BSIAI-INFRA-RUNTIME" => RuleMeta {
477 sarif_id: "SBOM-BSIAI-INFRA",
478 default_severity: ViolationSeverity::Info,
479 refs: &[(K::BsiSbomForAi, "Infrastructure / Runtime & framework")],
480 remediation: REMEDIATION_BSIAI_GENERAL,
481 },
482 "SBOM-BSIAI-SEC-CONTROLS" => RuleMeta {
484 sarif_id: "SBOM-BSIAI-SEC",
485 default_severity: ViolationSeverity::Info,
486 refs: &[(K::BsiSbomForAi, "Security / AI security controls")],
487 remediation: REMEDIATION_BSIAI_GENERAL,
488 },
489 "SBOM-BSIAI-SEC-EXPLOITABILITY" => RuleMeta {
490 sarif_id: "SBOM-BSIAI-SEC",
491 default_severity: ViolationSeverity::Info,
492 refs: &[(K::BsiSbomForAi, "Security / Exploitability reference")],
493 remediation: REMEDIATION_BSIAI_GENERAL,
494 },
495 "SBOM-NTIA-VERSION" => RuleMeta {
497 sarif_id: "SBOM-NTIA-VERSION",
498 default_severity: ViolationSeverity::Error,
499 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
500 remediation: REMEDIATION_GENERIC,
501 },
502 "SBOM-NTIA-SUPPLIER" => RuleMeta {
503 sarif_id: "SBOM-NTIA-SUPPLIER",
504 default_severity: ViolationSeverity::Error,
505 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
506 remediation: REMEDIATION_GENERIC,
507 },
508 "SBOM-NTIA-DEPENDENCY" => RuleMeta {
509 sarif_id: "SBOM-NTIA-DEPENDENCY",
510 default_severity: ViolationSeverity::Error,
511 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
512 remediation: REMEDIATION_GENERIC,
513 },
514 "SBOM-FDA-SUPPLIER" => RuleMeta {
516 sarif_id: "SBOM-FDA-SUPPLIER",
517 default_severity: ViolationSeverity::Error,
518 refs: &[(K::FdaPremarket, "FDA Premarket")],
519 remediation: REMEDIATION_GENERIC,
520 },
521 "SBOM-FDA-SUPPORT" => RuleMeta {
522 sarif_id: "SBOM-FDA-SUPPORT",
523 default_severity: ViolationSeverity::Warning,
524 refs: &[(K::FdaPremarket, "FDA Premarket")],
525 remediation: REMEDIATION_GENERIC,
526 },
527 "SBOM-FDA-NAME" => RuleMeta {
528 sarif_id: "SBOM-FDA-GENERAL",
529 default_severity: ViolationSeverity::Warning,
530 refs: &[(K::FdaPremarket, "FDA Premarket")],
531 remediation: REMEDIATION_GENERIC,
532 },
533 "SBOM-FDA-VERSION" => RuleMeta {
534 sarif_id: "SBOM-FDA-VERSION",
535 default_severity: ViolationSeverity::Error,
536 refs: &[(K::FdaPremarket, "FDA Premarket")],
537 remediation: REMEDIATION_GENERIC,
538 },
539 "SBOM-FDA-IDENTIFIER" => RuleMeta {
540 sarif_id: "SBOM-FDA-IDENTIFIER",
541 default_severity: ViolationSeverity::Error,
542 refs: &[(K::FdaPremarket, "FDA Premarket")],
543 remediation: REMEDIATION_GENERIC,
544 },
545 "SBOM-FDA-HASH" => RuleMeta {
546 sarif_id: "SBOM-FDA-HASH",
547 default_severity: ViolationSeverity::Error,
548 refs: &[(K::FdaPremarket, "FDA Premarket")],
549 remediation: REMEDIATION_GENERIC,
550 },
551 "SBOM-FDA-CREATOR" => RuleMeta {
555 sarif_id: "SBOM-FDA-CREATOR",
556 default_severity: ViolationSeverity::Warning,
557 refs: &[(K::FdaPremarket, "FDA Premarket")],
558 remediation: REMEDIATION_GENERIC,
559 },
560 "SBOM-FDA-NAMESPACE" => RuleMeta {
561 sarif_id: "SBOM-FDA-NAMESPACE",
562 default_severity: ViolationSeverity::Warning,
563 refs: &[(K::FdaPremarket, "FDA Premarket")],
564 remediation: REMEDIATION_GENERIC,
565 },
566 "SBOM-FDA-DEPENDENCY" => RuleMeta {
567 sarif_id: "SBOM-FDA-DEPENDENCY",
568 default_severity: ViolationSeverity::Error,
569 refs: &[(K::FdaPremarket, "FDA Premarket")],
570 remediation: REMEDIATION_GENERIC,
571 },
572 "SBOM-FDA-SECURITY" => RuleMeta {
573 sarif_id: "SBOM-FDA-SECURITY",
574 default_severity: ViolationSeverity::Warning,
575 refs: &[(K::FdaPremarket, "FDA Premarket")],
576 remediation: REMEDIATION_GENERIC,
577 },
578 "SBOM-FDA-GENERAL" => RuleMeta {
579 sarif_id: "SBOM-FDA-GENERAL",
580 default_severity: ViolationSeverity::Warning,
581 refs: &[(K::FdaPremarket, "FDA Premarket")],
582 remediation: REMEDIATION_GENERIC,
583 },
584 "SBOM-NTIA-AUTHOR" => RuleMeta {
586 sarif_id: "SBOM-NTIA-AUTHOR",
587 default_severity: ViolationSeverity::Error,
588 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
589 remediation: REMEDIATION_GENERIC,
590 },
591 "SBOM-NTIA-NAME" => RuleMeta {
592 sarif_id: "SBOM-NTIA-NAME",
593 default_severity: ViolationSeverity::Error,
594 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
595 remediation: REMEDIATION_GENERIC,
596 },
597 "SBOM-NTIA-IDENTIFIER" => RuleMeta {
598 sarif_id: "SBOM-NTIA-IDENTIFIER",
599 default_severity: ViolationSeverity::Warning,
600 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
601 remediation: REMEDIATION_GENERIC,
602 },
603 "SBOM-NTIA-GENERAL" => RuleMeta {
604 sarif_id: "SBOM-NTIA-GENERAL",
605 default_severity: ViolationSeverity::Warning,
606 refs: &[(K::NtiaMinimum, "NTIA Minimum Elements")],
607 remediation: REMEDIATION_GENERIC,
608 },
609 "SBOM-SSDF-GENERAL" => RuleMeta {
613 sarif_id: "SBOM-SSDF-GENERAL",
614 default_severity: ViolationSeverity::Warning,
615 refs: &[(K::NistSsdf, "SP 800-218")],
616 remediation: REMEDIATION_SSDF,
617 },
618 "SBOM-EO14028-GENERAL" => RuleMeta {
619 sarif_id: "SBOM-EO14028-GENERAL",
620 default_severity: ViolationSeverity::Warning,
621 refs: &[(K::Eo14028, "EO 14028 §4")],
622 remediation: REMEDIATION_EO14028,
623 },
624 "SBOM-SSDF-PS1" => RuleMeta {
626 sarif_id: "SBOM-SSDF-PS1",
627 default_severity: ViolationSeverity::Error,
628 refs: &[(K::NistSsdf, "PS.1")],
629 remediation: REMEDIATION_SSDF,
630 },
631 "SBOM-SSDF-PS2" => RuleMeta {
632 sarif_id: "SBOM-SSDF-PS2",
633 default_severity: ViolationSeverity::Error,
634 refs: &[(K::NistSsdf, "PS.2")],
635 remediation: REMEDIATION_SSDF,
636 },
637 "SBOM-SSDF-PS3" => RuleMeta {
638 sarif_id: "SBOM-SSDF-PS3",
639 default_severity: ViolationSeverity::Warning,
640 refs: &[(K::NistSsdf, "PS.3")],
641 remediation: REMEDIATION_SSDF,
642 },
643 "SBOM-SSDF-PO1" => RuleMeta {
644 sarif_id: "SBOM-SSDF-PO1",
645 default_severity: ViolationSeverity::Warning,
646 refs: &[(K::NistSsdf, "PO.1")],
647 remediation: REMEDIATION_SSDF,
648 },
649 "SBOM-SSDF-PO3" => RuleMeta {
650 sarif_id: "SBOM-SSDF-PO3",
651 default_severity: ViolationSeverity::Info,
652 refs: &[(K::NistSsdf, "PO.3")],
653 remediation: REMEDIATION_SSDF,
654 },
655 "SBOM-SSDF-PW4" => RuleMeta {
656 sarif_id: "SBOM-SSDF-PW4",
657 default_severity: ViolationSeverity::Error,
658 refs: &[(K::NistSsdf, "PW.4")],
659 remediation: REMEDIATION_SSDF,
660 },
661 "SBOM-SSDF-PW6" => RuleMeta {
662 sarif_id: "SBOM-SSDF-PW6",
663 default_severity: ViolationSeverity::Info,
664 refs: &[(K::NistSsdf, "PW.6")],
665 remediation: REMEDIATION_SSDF,
666 },
667 "SBOM-SSDF-RV1" => RuleMeta {
668 sarif_id: "SBOM-SSDF-RV1",
669 default_severity: ViolationSeverity::Warning,
670 refs: &[(K::NistSsdf, "RV.1")],
671 remediation: REMEDIATION_SSDF,
672 },
673 "SBOM-EO14028-FORMAT" => RuleMeta {
675 sarif_id: "SBOM-EO14028-FORMAT",
676 default_severity: ViolationSeverity::Error,
677 refs: &[(K::Eo14028, "EO 14028 §4")],
678 remediation: REMEDIATION_EO14028,
679 },
680 "SBOM-EO14028-AUTOGEN" => RuleMeta {
681 sarif_id: "SBOM-EO14028-AUTOGEN",
682 default_severity: ViolationSeverity::Warning,
683 refs: &[(K::Eo14028, "EO 14028 §4")],
684 remediation: REMEDIATION_EO14028,
685 },
686 "SBOM-EO14028-CREATOR" => RuleMeta {
687 sarif_id: "SBOM-EO14028-CREATOR",
688 default_severity: ViolationSeverity::Error,
689 refs: &[(K::Eo14028, "EO 14028 §4")],
690 remediation: REMEDIATION_EO14028,
691 },
692 "SBOM-EO14028-IDENTIFIER" => RuleMeta {
693 sarif_id: "SBOM-EO14028-IDENTIFIER",
694 default_severity: ViolationSeverity::Error,
695 refs: &[(K::Eo14028, "EO 14028 §4")],
696 remediation: REMEDIATION_EO14028,
697 },
698 "SBOM-EO14028-DEPENDENCY" => RuleMeta {
699 sarif_id: "SBOM-EO14028-DEPENDENCY",
700 default_severity: ViolationSeverity::Error,
701 refs: &[(K::Eo14028, "EO 14028 §4")],
702 remediation: REMEDIATION_EO14028,
703 },
704 "SBOM-EO14028-VERSION" => RuleMeta {
705 sarif_id: "SBOM-EO14028-VERSION",
706 default_severity: ViolationSeverity::Error,
707 refs: &[(K::Eo14028, "EO 14028 §4")],
708 remediation: REMEDIATION_EO14028,
709 },
710 "SBOM-EO14028-INTEGRITY" => RuleMeta {
711 sarif_id: "SBOM-EO14028-INTEGRITY",
712 default_severity: ViolationSeverity::Warning,
713 refs: &[(K::Eo14028, "EO 14028 §4")],
714 remediation: REMEDIATION_EO14028,
715 },
716 "SBOM-EO14028-DISCLOSURE" => RuleMeta {
717 sarif_id: "SBOM-EO14028-DISCLOSURE",
718 default_severity: ViolationSeverity::Warning,
719 refs: &[(K::Eo14028, "EO 14028 §4")],
720 remediation: REMEDIATION_EO14028,
721 },
722 "SBOM-EO14028-SUPPLIER" => RuleMeta {
723 sarif_id: "SBOM-EO14028-SUPPLIER",
724 default_severity: ViolationSeverity::Warning,
725 refs: &[(K::Eo14028, "EO 14028 §4")],
726 remediation: REMEDIATION_EO14028,
727 },
728 "SBOM-BSI-TR-03183-2-5-1" => RuleMeta {
730 sarif_id: "SBOM-BSI-TR-03183-2-5-1",
731 default_severity: ViolationSeverity::Error,
732 refs: &[(K::BsiTr03183_2, "§5.1")],
733 remediation: REMEDIATION_GENERIC,
734 },
735 "SBOM-BSI-TR-03183-2-5-2" => RuleMeta {
736 sarif_id: "SBOM-BSI-TR-03183-2-5-2",
737 default_severity: ViolationSeverity::Warning,
738 refs: &[(K::BsiTr03183_2, "§5.2")],
739 remediation: REMEDIATION_GENERIC,
740 },
741 "SBOM-BSI-TR-03183-2-5-3" => RuleMeta {
742 sarif_id: "SBOM-BSI-TR-03183-2-5-3",
743 default_severity: ViolationSeverity::Warning,
744 refs: &[(K::BsiTr03183_2, "§5.3")],
745 remediation: REMEDIATION_GENERIC,
746 },
747 "SBOM-BSI-TR-03183-2-5-4" => RuleMeta {
748 sarif_id: "SBOM-BSI-TR-03183-2-5-4",
749 default_severity: ViolationSeverity::Warning,
750 refs: &[(K::BsiTr03183_2, "§5.4")],
751 remediation: REMEDIATION_GENERIC,
752 },
753 "SBOM-BSI-TR-03183-2-5-5" => RuleMeta {
754 sarif_id: "SBOM-BSI-TR-03183-2-5-5",
755 default_severity: ViolationSeverity::Warning,
756 refs: &[(K::BsiTr03183_2, "§5.5")],
757 remediation: REMEDIATION_GENERIC,
758 },
759 "SBOM-BSI-TR-03183-2-6" => RuleMeta {
760 sarif_id: "SBOM-BSI-TR-03183-2-6",
761 default_severity: ViolationSeverity::Info,
762 refs: &[(K::BsiTr03183_2, "§6")],
763 remediation: REMEDIATION_GENERIC,
764 },
765 "SBOM-CNSA2-ALG-001" => RuleMeta {
767 sarif_id: "SBOM-CNSA2-ALG-001",
768 default_severity: ViolationSeverity::Error,
769 refs: &[(K::Cnsa2, "CNSA 2.0")],
770 remediation: REMEDIATION_GENERIC,
771 },
772 "SBOM-CNSA2-ALG-002" => RuleMeta {
773 sarif_id: "SBOM-CNSA2-ALG-002",
774 default_severity: ViolationSeverity::Error,
775 refs: &[(K::Cnsa2, "CNSA 2.0")],
776 remediation: REMEDIATION_GENERIC,
777 },
778 "SBOM-CNSA2-ALG-003" => RuleMeta {
779 sarif_id: "SBOM-CNSA2-ALG-003",
780 default_severity: ViolationSeverity::Error,
781 refs: &[(K::Cnsa2, "CNSA 2.0")],
782 remediation: REMEDIATION_GENERIC,
783 },
784 "SBOM-CNSA2-ALG-004" => RuleMeta {
785 sarif_id: "SBOM-CNSA2-ALG-004",
786 default_severity: ViolationSeverity::Error,
787 refs: &[(K::Cnsa2, "CNSA 2.0")],
788 remediation: REMEDIATION_GENERIC,
789 },
790 "SBOM-CNSA2-ALG-006" => RuleMeta {
791 sarif_id: "SBOM-CNSA2-ALG-006",
792 default_severity: ViolationSeverity::Error,
793 refs: &[(K::Cnsa2, "CNSA 2.0")],
794 remediation: REMEDIATION_GENERIC,
795 },
796 "SBOM-CNSA2-ALG-007" => RuleMeta {
797 sarif_id: "SBOM-CNSA2-ALG-007",
798 default_severity: ViolationSeverity::Error,
799 refs: &[(K::Cnsa2, "CNSA 2.0")],
800 remediation: REMEDIATION_GENERIC,
801 },
802 "SBOM-CNSA2-CERT-001" => RuleMeta {
803 sarif_id: "SBOM-CNSA2-CERT-001",
804 default_severity: ViolationSeverity::Error,
805 refs: &[(K::Cnsa2, "CNSA 2.0")],
806 remediation: REMEDIATION_GENERIC,
807 },
808 "SBOM-PQC-001" => RuleMeta {
810 sarif_id: "SBOM-PQC-001",
811 default_severity: ViolationSeverity::Error,
812 refs: &[],
813 remediation: REMEDIATION_GENERIC,
814 },
815 "SBOM-PQC-012" => RuleMeta {
816 sarif_id: "SBOM-PQC-012",
817 default_severity: ViolationSeverity::Warning,
818 refs: &[],
819 remediation: REMEDIATION_GENERIC,
820 },
821 "SBOM-PQC-010" => RuleMeta {
822 sarif_id: "SBOM-PQC-010",
823 default_severity: ViolationSeverity::Warning,
824 refs: &[],
825 remediation: REMEDIATION_GENERIC,
826 },
827 "SBOM-PQC-005" => RuleMeta {
828 sarif_id: "SBOM-PQC-005",
829 default_severity: ViolationSeverity::Error,
830 refs: &[],
831 remediation: REMEDIATION_GENERIC,
832 },
833 "SBOM-PQC-008" => RuleMeta {
834 sarif_id: "SBOM-PQC-008",
835 default_severity: ViolationSeverity::Error,
836 refs: &[],
837 remediation: REMEDIATION_GENERIC,
838 },
839 "SBOM-PQC-009" => RuleMeta {
840 sarif_id: "SBOM-PQC-009",
841 default_severity: ViolationSeverity::Info,
842 refs: &[(K::NistPqc, "NIST PQC")],
843 remediation: REMEDIATION_GENERIC,
844 },
845 "SBOM-PQC-KEY-001" => RuleMeta {
846 sarif_id: "SBOM-PQC-KEY-001",
847 default_severity: ViolationSeverity::Error,
848 refs: &[],
849 remediation: REMEDIATION_GENERIC,
850 },
851 _ => return None,
852 };
853 Some(meta)
854}