@mitre/hdf-schema 3.4.3 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,19 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.4.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.5.0",
4
4
  "type": "object",
5
5
  "unevaluatedProperties": false,
6
6
  "required": [
7
7
  "baselines"
8
8
  ],
9
9
  "properties": {
10
+ "externalReferences": {
11
+ "type": "array",
12
+ "items": {
13
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
14
+ },
15
+ "description": "Optional references to external artifacts (CTI/STIX, BOMs, advisories, runbooks, or any URI-addressable artifact) relevant to this assessment as a whole. Inert context; see External_Reference."
16
+ },
10
17
  "id": {
11
18
  "type": "string",
12
19
  "format": "uuid",
@@ -20,7 +27,7 @@
20
27
  "components": {
21
28
  "type": "array",
22
29
  "items": {
23
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0#/$defs/Component"
30
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0#/$defs/Component"
24
31
  },
25
32
  "description": "The components that were assessed. Each component describes a system element (host, container, cloud resource, application, etc.) with optional identity, SBOM, and external references."
26
33
  },
@@ -32,27 +39,27 @@
32
39
  "description": "Information on the baselines that were evaluated, including findings."
33
40
  },
34
41
  "statistics": {
35
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.4.0#/$defs/Statistics",
42
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0#/$defs/Statistics",
36
43
  "description": "Statistics for the assessment run, including duration and result counts."
37
44
  },
38
45
  "generator": {
39
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Generator",
46
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Generator",
40
47
  "description": "Information about the tool that generated this file."
41
48
  },
42
49
  "tool": {
43
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Tool",
50
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Tool",
44
51
  "description": "The security tool that produced the assessment data in this file."
45
52
  },
46
53
  "integrity": {
47
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Integrity",
54
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
48
55
  "description": "Cryptographic integrity information for verifying this file."
49
56
  },
50
57
  "runner": {
51
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.4.0#/$defs/Runner",
58
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0#/$defs/Runner",
52
59
  "description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
53
60
  },
54
61
  "remediation": {
55
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Remediation",
62
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Remediation",
56
63
  "description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
57
64
  },
58
65
  "systemRef": {
@@ -65,6 +72,10 @@
65
72
  "format": "uri-reference",
66
73
  "description": "Reference to an hdf-plan document describing the assessment plan that produced these results. May be a relative path, absolute URI, or fragment identifier."
67
74
  },
75
+ "derivation": {
76
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0#/$defs/Derivation",
77
+ "description": "Present ONLY on reconciled result sets: lineage recording the seed snapshot and event watermark this document was reassembled from (ADR-0005). Documents produced directly by a scan omit this field. When present, generator names the reconciling tool."
78
+ },
68
79
  "extensions": {
69
80
  "type": "object",
70
81
  "additionalProperties": true,
@@ -160,14 +171,14 @@
160
171
  ],
161
172
  "allOf": [
162
173
  {
163
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Baseline_Metadata"
174
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Baseline_Metadata"
164
175
  }
165
176
  ],
166
177
  "properties": {
167
178
  "depends": {
168
179
  "type": "array",
169
180
  "items": {
170
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Dependency"
181
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Dependency"
171
182
  },
172
183
  "description": "The set of dependencies this baseline depends on."
173
184
  },
@@ -180,15 +191,15 @@
180
191
  "description": "The description - should be more detailed than the summary."
181
192
  },
182
193
  "integrity": {
183
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Integrity",
194
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
184
195
  "description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
185
196
  },
186
197
  "originalChecksum": {
187
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
198
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
188
199
  "description": "SHA-256 checksum of the original baseline definition file (before execution). This is an immutable reference to the baseline as defined, used to detect tampering with baseline requirements or metadata."
189
200
  },
190
201
  "resultsChecksum": {
191
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
202
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
192
203
  "description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results. Compare with currentChecksum to verify amendment integrity."
193
204
  },
194
205
  "statusMessage": {
@@ -206,14 +217,14 @@
206
217
  "groups": {
207
218
  "type": "array",
208
219
  "items": {
209
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Requirement_Group"
220
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Group"
210
221
  },
211
222
  "description": "A set of descriptions for the requirement groups."
212
223
  },
213
224
  "inputs": {
214
225
  "type": "array",
215
226
  "items": {
216
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.4.0#/$defs/Input"
227
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0#/$defs/Input"
217
228
  },
218
229
  "description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
219
230
  },
@@ -238,7 +249,7 @@
238
249
  ],
239
250
  "allOf": [
240
251
  {
241
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Requirement_Core"
252
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Core"
242
253
  }
243
254
  ],
244
255
  "properties": {
@@ -246,7 +257,7 @@
246
257
  "type": "array",
247
258
  "minItems": 1,
248
259
  "items": {
249
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Requirement_Description"
260
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Requirement_Description"
250
261
  },
251
262
  "contains": {
252
263
  "type": "object",
@@ -262,37 +273,37 @@
262
273
  "description": "Array of labeled descriptions. At least one description with label 'default' must be present. Convention: place default description first. Common labels: 'default', 'check', 'fix', 'rationale'."
263
274
  },
264
275
  "severity": {
265
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Severity",
276
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Severity",
266
277
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
267
278
  },
268
279
  "sourceLocation": {
269
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Source_Location",
280
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Source_Location",
270
281
  "description": "The explicit location of the requirement within the source code."
271
282
  },
272
283
  "results": {
273
284
  "type": "array",
274
285
  "minItems": 1,
275
286
  "items": {
276
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Requirement_Result"
287
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Requirement_Result"
277
288
  },
278
289
  "description": "The set of all tests within the requirement and their results."
279
290
  },
280
291
  "statusOverrides": {
281
292
  "type": "array",
282
293
  "items": {
283
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/Status_Override"
294
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Status_Override"
284
295
  },
285
296
  "description": "Chronological history of all overrides applied to this requirement. Overrides are intentional changes to the compliance status and/or impact score (waivers, attestations, false positives, risk adjustments). Most recent override should be first in array. Preserves full audit trail."
286
297
  },
287
298
  "poams": {
288
299
  "type": "array",
289
300
  "items": {
290
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0#/$defs/POAM"
301
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/POAM"
291
302
  },
292
303
  "description": "Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance. POAMs do NOT change effectiveStatus - they track the work being done to address a failure. Separate from statusOverrides which DO change status."
293
304
  },
294
305
  "effectiveStatus": {
295
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
306
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
296
307
  "description": "The current effective compliance status of this requirement after applying the most recent non-expired override with a status field, or computed from results (worst-wins) if no status-bearing overrides exist."
297
308
  },
298
309
  "effectiveImpact": {
@@ -302,29 +313,33 @@
302
313
  "description": "The current effective impact score (0.0–1.0) after applying the most recent non-expired override with an impact field. Absent when no impact overrides apply; consumers should use the requirement's impact field in that case."
303
314
  },
304
315
  "disposition": {
305
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Override_Type",
316
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
306
317
  "description": "The type of the most recent non-expired override or POAM governing this requirement. Indicates why the requirement is in its current state (e.g., waiver, falsePositive, riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or POAMs apply."
307
318
  },
319
+ "effectiveChecksum": {
320
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
321
+ "description": "Checksum of this requirement's resolved effective posture, for per-control change detection in continuous monitoring. sha256 over the canonical JSON object with keys status, impact, disposition (in that order), holding the resolved effective status, resolved effective impact, and governing override type (null when nothing governs), with override expiry anchored to the document timestamp. Flips exactly when the operative status, impact, or disposition changes; stable under all other churn (result details, timestamps, tags). Optional; stamped by tooling (hdf convert, hdf amend apply)."
322
+ },
308
323
  "evidence": {
309
324
  "type": "array",
310
325
  "items": {
311
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
326
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
312
327
  },
313
328
  "description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
314
329
  },
315
330
  "cvss": {
316
331
  "type": "array",
317
332
  "items": {
318
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss"
333
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss"
319
334
  },
320
335
  "description": "Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for risk adjustment. See cvss.schema.json."
321
336
  },
322
337
  "epss": {
323
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.4.0#/$defs/Epss",
338
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0#/$defs/Epss",
324
339
  "description": "FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used alongside CVSS for prioritization — captures the probability the vulnerability will be exploited."
325
340
  },
326
341
  "kev": {
327
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.4.0#/$defs/Kev",
342
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0#/$defs/Kev",
328
343
  "description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
329
344
  },
330
345
  "cwe": {
@@ -338,7 +353,7 @@
338
353
  "affectedPackages": {
339
354
  "type": "array",
340
355
  "items": {
341
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0#/$defs/Affected_Package"
356
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
342
357
  },
343
358
  "description": "Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see components[] on hdf-system for component-level package inventories. One entry per matched package signature (scanners often report multiple CPE variations per CVE)."
344
359
  }
@@ -403,11 +418,15 @@
403
418
  "identifier": "ao@agency.gov"
404
419
  },
405
420
  "appliedAt": "2026-01-20T10:00:00Z",
406
- "expiresAt": "2026-07-20T00:00:00Z"
421
+ "expiresAt": "2099-12-31T00:00:00Z"
407
422
  }
408
423
  ],
409
424
  "effectiveStatus": "passed",
410
- "disposition": "waiver"
425
+ "disposition": "waiver",
426
+ "effectiveChecksum": {
427
+ "algorithm": "sha256",
428
+ "value": "d11c074ab9131807816013a71d986f1ceb2e5871a8a01dee4043391b7a6bf37b"
429
+ }
411
430
  },
412
431
  {
413
432
  "$comment": "False positive (compliance scan) — STIG check was wrong, requirement actually passes",
@@ -605,6 +624,7 @@
605
624
  "identifier": "ops@agency.gov"
606
625
  },
607
626
  "appliedAt": "2026-01-20T10:00:00Z",
627
+ "expiresAt": "2099-12-31T00:00:00Z",
608
628
  "milestones": [
609
629
  {
610
630
  "description": "Vendor releases compatible patch",
@@ -626,1270 +646,682 @@
626
646
  "description": "A requirement that has been evaluated, including any findings.",
627
647
  "title": "Evaluated Requirement"
628
648
  },
629
- "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0": {
649
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
630
650
  "$schema": "https://json-schema.org/draft/2020-12/schema",
631
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.4.0",
632
- "title": "HDF Component Primitives",
633
- "description": "First-class system component with identity, polymorphic type, generalized BOM attachment (boms[]), and system-binding properties. Components are the successor to Targets, adding stable identity (componentId), external system cross-references, and manifest inventory (SBOM, AI model/dataset, and reserved future BOM kinds).",
651
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
652
+ "title": "HDF Common Primitives",
653
+ "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
634
654
  "$defs": {
635
- "Base_Component": {
655
+ "External_Reference": {
636
656
  "type": "object",
637
- "additionalProperties": true,
657
+ "title": "External Reference",
658
+ "description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property. Purpose-agnostic: cite a CVE, an ATT&CK technique, a STIX bundle/object, a BOM, a runbook, or any vendor artifact — including kinds with no dedicated HDF reference category. `sourceName` names the system; `externalId` cites by id within that system; `href` locates it. `sourceName` + `externalId` is equivalently a URN (`urn:<sourceName>:<externalId>`, RFC 8141), so the by-identity and by-location forms stay interconvertible. A reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
638
659
  "required": [
639
- "type",
640
- "name"
660
+ "sourceName"
661
+ ],
662
+ "anyOf": [
663
+ {
664
+ "required": [
665
+ "externalId"
666
+ ]
667
+ },
668
+ {
669
+ "required": [
670
+ "href"
671
+ ]
672
+ },
673
+ {
674
+ "required": [
675
+ "description"
676
+ ]
677
+ }
641
678
  ],
642
679
  "properties": {
643
- "type": {
680
+ "sourceName": {
644
681
  "type": "string",
645
- "title": "Target Type",
646
- "enum": [
647
- "host",
648
- "containerImage",
649
- "containerInstance",
650
- "containerPlatform",
651
- "cloudAccount",
652
- "cloudResource",
653
- "repository",
654
- "application",
655
- "artifact",
656
- "network",
657
- "database",
658
- "aiModel",
659
- "dataset"
660
- ],
661
- "description": "Component type discriminator. Same values as Target types, plus aiModel and dataset (thin AI subject components whose detail lives in an attached ai-model / dataset BOM)."
682
+ "minLength": 1,
683
+ "description": "Name of the external system/source being referenced (e.g., 'cve', 'mitre-att&ck', 'stix', 'taxii', or any vendor label). Open string — not a closed enum. Use the `x-` prefix convention for custom/experimental sources, mirroring `bomType`."
662
684
  },
663
- "name": {
685
+ "externalId": {
664
686
  "type": "string",
665
- "description": "Human-readable name for this component."
687
+ "description": "Identifier of the artifact within `sourceName` (e.g., 'CVE-2021-44228' for source 'cve', 'T1059' for 'mitre-att&ck'). Cite by id without needing a URL. Together with `sourceName` this is a URN."
666
688
  },
667
- "componentId": {
689
+ "href": {
668
690
  "type": "string",
669
- "format": "uuid",
670
- "description": "Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in hdf-results. Enables cross-document correlation, diffing, and data flow references."
691
+ "format": "uri-reference",
692
+ "description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. `checksum`/`mediaType` apply only to a retrievable `href`."
671
693
  },
672
694
  "description": {
673
695
  "type": "string",
674
- "description": "Description of this component's role or purpose."
675
- },
676
- "owner": {
677
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
678
- "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
696
+ "description": "Human-readable description of what is referenced. Satisfies the at-least-one rule on its own when neither id nor href is available."
679
697
  },
680
- "externalIds": {
681
- "type": "object",
682
- "additionalProperties": {
683
- "type": "string"
684
- },
685
- "description": "Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are allowed."
698
+ "rel": {
699
+ "type": "string",
700
+ "description": "Open relationship token describing how this reference relates to the referencing object. Deliberately open (cf. OSCAL `rel` allow-other, RFC 8288 extension relations). Documented starter vocabulary: 'reference' (generic), 'definition' (defines the concept), 'evidence' (supporting evidence), 'investigate' (a live pivot to investigate), 'canonical' (the authoritative source)."
686
701
  },
687
- "labels": {
688
- "type": "object",
689
- "additionalProperties": {
690
- "type": "string"
691
- },
692
- "description": "Optional key-value labels for flexible grouping. Well-known keys: system, component, environment, region, team. Values must be strings."
702
+ "mediaType": {
703
+ "type": "string",
704
+ "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
693
705
  },
694
- "boms": {
695
- "type": "array",
696
- "items": {
697
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0#/$defs/Bom"
698
- },
699
- "description": "Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType), each carried by passthrough (ref/document) or normalized. Replaces the former sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an ai-model BOM). See primitives/bom.schema.json."
706
+ "checksum": {
707
+ "$ref": "#/$defs/Checksum",
708
+ "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
700
709
  },
701
- "integrity": {
702
- "type": "array",
703
- "items": {
704
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum"
705
- },
706
- "description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes. An array supports multi-file/sharded artifacts. This is the single, generic home for artifact/subject integrity across all component types (it replaced the former per-type Container_Image digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
710
+ "addedBy": {
711
+ "$ref": "#/$defs/Identity",
712
+ "description": "Who attached this reference. Lightweight, flat attribution — a reference overrides nothing, so it has no chaining/superseding/disposition."
707
713
  },
708
- "baselineRefs": {
709
- "type": "array",
710
- "items": {
711
- "type": "string"
712
- },
713
- "description": "Names of baselines that apply to this component."
714
+ "addedAt": {
715
+ "type": "string",
716
+ "format": "date-time",
717
+ "description": "When this reference was attached (RFC 3339 / trimmed-UTC per HDF timestamp convention)."
714
718
  },
715
- "inputOverrides": {
716
- "type": "array",
717
- "items": {
718
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Input_Override"
719
- },
720
- "description": "System-specific overrides for baseline input values."
719
+ "kind": {
720
+ "type": "string",
721
+ "minLength": 1,
722
+ "description": "Open token classifying the referenced/embedded payload, turning a bare reference into an enrichment envelope. Deliberately open (like `sourceName`/`rel`), not a closed enum. Documented starter vocabulary: 'threat-intel' (STIX/CTI object), 'annotation' (human triage note), 'exploitation' (EPSS/KEV signal carried as context), 'advisory' (vendor/security advisory). Use the `x-` prefix for custom kinds."
721
723
  },
722
- "targetSelector": {
723
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0#/$defs/Target_Selector",
724
- "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
724
+ "document": {
725
+ "type": "object",
726
+ "additionalProperties": true,
727
+ "description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim. Composes with `href`/`externalId` (which point at the artifact) and `checksum` (which ties the copy to the source): a single entry can both point and embed. HDF stays payload-agnostic — the content is carried untouched, never normalized into HDF fields — so this does not duplicate the source ontology (e.g. STIX rides here unchanged)."
725
728
  }
726
729
  },
730
+ "unevaluatedProperties": false,
727
731
  "examples": [
728
732
  {
729
- "type": "aiModel",
730
- "name": "Llama-2-7b-chat (finetuned)",
731
- "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
732
- "owner": {
733
+ "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
734
+ "sourceName": "cve",
735
+ "externalId": "CVE-2021-44228",
736
+ "rel": "definition"
737
+ },
738
+ {
739
+ "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
740
+ "sourceName": "mitre-att&ck",
741
+ "externalId": "T1059",
742
+ "href": "https://attack.mitre.org/techniques/T1059/",
743
+ "rel": "canonical"
744
+ },
745
+ {
746
+ "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
747
+ "sourceName": "stix",
748
+ "href": "https://cti.example.org/bundles/log4shell.json",
749
+ "rel": "investigate",
750
+ "mediaType": "application/json",
751
+ "checksum": {
752
+ "algorithm": "sha256",
753
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
754
+ },
755
+ "addedBy": {
733
756
  "type": "email",
734
- "identifier": "ml-platform@agency.gov"
757
+ "identifier": "analyst@agency.gov"
735
758
  },
736
- "integrity": [
737
- {
738
- "algorithm": "sha256",
739
- "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
740
- }
741
- ],
742
- "boms": [
743
- {
744
- "bomType": "ai-model",
745
- "format": "cyclonedx-ml",
746
- "model": {
747
- "adaptationType": "finetune"
759
+ "addedAt": "2026-07-26T00:00:00Z"
760
+ },
761
+ {
762
+ "$comment": "Enrichment envelope: a STIX threat-intel object embedded losslessly in `document` and classified via `kind`, cited by id and pointed at by href — the pointer and the embedded copy compose. The payload rides verbatim; HDF does not normalize STIX fields.",
763
+ "sourceName": "stix",
764
+ "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
765
+ "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
766
+ "rel": "investigate",
767
+ "kind": "threat-intel",
768
+ "document": {
769
+ "type": "vulnerability",
770
+ "spec_version": "2.1",
771
+ "id": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
772
+ "name": "CVE-2021-44228",
773
+ "external_references": [
774
+ {
775
+ "source_name": "cve",
776
+ "external_id": "CVE-2021-44228"
748
777
  }
749
- }
750
- ]
778
+ ]
779
+ }
751
780
  }
781
+ ]
782
+ },
783
+ "Hash_Algorithm": {
784
+ "type": "string",
785
+ "enum": [
786
+ "sha256",
787
+ "sha384",
788
+ "sha512",
789
+ "blake3"
752
790
  ],
753
- "description": "Base properties shared by all component types. Extends the Target concept with stable identity, external references, generalized BOM attachment (boms[]), and unified artifact integrity (integrity[]).",
754
- "title": "Base Component"
791
+ "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
792
+ "title": "Hash Algorithm"
755
793
  },
756
- "Component": {
757
- "description": "A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset of Target with identity, external IDs, and SBOM support.",
758
- "title": "Component",
759
- "oneOf": [
760
- {
761
- "$ref": "#/$defs/Host_Component"
794
+ "Requirement_Group": {
795
+ "type": "object",
796
+ "unevaluatedProperties": false,
797
+ "required": [
798
+ "id",
799
+ "requirements"
800
+ ],
801
+ "properties": {
802
+ "id": {
803
+ "type": "string",
804
+ "description": "The unique identifier for the group. Example: the relative path to the file specifying the requirements."
762
805
  },
763
- {
764
- "$ref": "#/$defs/Container_Image_Component"
806
+ "title": {
807
+ "type": "string",
808
+ "description": "The title of the group - should be human readable."
765
809
  },
766
- {
767
- "$ref": "#/$defs/Container_Instance_Component"
810
+ "requirements": {
811
+ "type": "array",
812
+ "items": {
813
+ "type": "string"
814
+ },
815
+ "description": "The set of requirements as specified by their ids in this group. Example: 'SV-238196'."
816
+ }
817
+ },
818
+ "description": "Describes a group of requirements, such as those defined in a single file.",
819
+ "title": "Requirement Group"
820
+ },
821
+ "Dependency": {
822
+ "type": "object",
823
+ "unevaluatedProperties": false,
824
+ "required": [],
825
+ "properties": {
826
+ "name": {
827
+ "type": "string",
828
+ "description": "The name or assigned alias."
768
829
  },
769
- {
770
- "$ref": "#/$defs/Container_Platform_Component"
830
+ "url": {
831
+ "type": "string",
832
+ "format": "uri-reference",
833
+ "description": "The address of the dependency."
771
834
  },
772
- {
773
- "$ref": "#/$defs/Cloud_Account_Component"
835
+ "branch": {
836
+ "type": "string",
837
+ "description": "The branch name for a git repo."
774
838
  },
775
- {
776
- "$ref": "#/$defs/Cloud_Resource_Component"
839
+ "path": {
840
+ "type": "string",
841
+ "description": "The relative path if the dependency is locally available."
777
842
  },
778
- {
779
- "$ref": "#/$defs/Repository_Component"
843
+ "statusMessage": {
844
+ "type": "string",
845
+ "description": "The reason for the status if it is 'failed' or 'skipped'."
780
846
  },
781
- {
782
- "$ref": "#/$defs/Application_Component"
847
+ "status": {
848
+ "type": "string",
849
+ "description": "The status. Should be: 'loaded', 'failed', or 'skipped'."
783
850
  },
784
- {
785
- "$ref": "#/$defs/Artifact_Component"
851
+ "git": {
852
+ "type": "string",
853
+ "format": "uri",
854
+ "description": "The location of the git repo. Example: 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'."
855
+ },
856
+ "supermarket": {
857
+ "type": "string",
858
+ "description": "The 'user/profilename' attribute for a Supermarket server."
786
859
  },
860
+ "compliance": {
861
+ "type": "string",
862
+ "description": "The 'user/profilename' attribute for an Automate server."
863
+ }
864
+ },
865
+ "examples": [
787
866
  {
788
- "$ref": "#/$defs/Network_Component"
867
+ "name": "ubuntu-22.04-baseline",
868
+ "url": "https://github.com/my-org/ubuntu-22.04-stig-baseline",
869
+ "git": "https://github.com/my-org/ubuntu-22.04-stig-baseline.git",
870
+ "branch": "main",
871
+ "status": "loaded"
789
872
  },
790
873
  {
791
- "$ref": "#/$defs/Database_Component"
874
+ "name": "ssl-tls-baseline",
875
+ "path": "../shared-baselines/ssl-tls",
876
+ "status": "loaded"
792
877
  },
793
878
  {
794
- "$ref": "#/$defs/AI_Model_Component"
879
+ "name": "windows-2022-baseline",
880
+ "git": "https://github.com/security-org/windows-2022-stig.git",
881
+ "branch": "v1.2.0",
882
+ "status": "failed",
883
+ "statusMessage": "Unable to clone repository: authentication failed"
795
884
  },
796
885
  {
797
- "$ref": "#/$defs/Dataset_Component"
886
+ "name": "chef-supermarket-baseline",
887
+ "supermarket": "dev-sec/linux-baseline",
888
+ "status": "loaded"
798
889
  }
799
- ]
890
+ ],
891
+ "description": "A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.",
892
+ "title": "Dependency"
800
893
  },
801
- "Host_Component": {
802
- "allOf": [
803
- {
804
- "$ref": "#/$defs/Base_Component"
805
- },
894
+ "Reference": {
895
+ "anyOf": [
806
896
  {
807
897
  "type": "object",
898
+ "required": [
899
+ "ref"
900
+ ],
808
901
  "properties": {
809
- "type": {
810
- "const": "host"
811
- },
812
- "hostname": {
813
- "type": "string",
814
- "description": "Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name the source reports; do not derive it from the FQDN."
815
- },
816
- "fqdn": {
817
- "type": "string",
818
- "format": "hostname",
819
- "description": "Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname' (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the schema does not enforce case so source fidelity is preserved on round-trip."
820
- },
821
- "domain": {
822
- "type": "string",
823
- "description": "Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only from a source that carries directory membership."
824
- },
825
- "ipAddress": {
902
+ "ref": {
826
903
  "anyOf": [
827
904
  {
828
905
  "type": "string",
829
- "format": "ipv4"
906
+ "description": "A human readable/meaningful reference. Example: a book title."
830
907
  },
831
908
  {
832
- "type": "string",
833
- "format": "ipv6"
909
+ "type": "array",
910
+ "items": {
911
+ "type": "object",
912
+ "additionalProperties": true
913
+ },
914
+ "description": "An array of reference objects."
834
915
  }
835
- ],
836
- "description": "IP address of the host."
837
- },
838
- "macAddress": {
839
- "type": "string",
840
- "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$",
841
- "description": "MAC address in colon-separated hexadecimal format."
842
- },
843
- "osName": {
844
- "type": "string",
845
- "description": "Operating system name."
846
- },
847
- "osVersion": {
848
- "type": "string",
849
- "description": "Operating system version."
916
+ ]
850
917
  }
851
- }
852
- }
853
- ],
854
- "examples": [
855
- {
856
- "$comment": "Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix.",
857
- "type": "host",
858
- "name": "web-server-prod-01",
859
- "componentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
860
- "hostname": "web01",
861
- "fqdn": "web01.prod.example.com",
862
- "domain": "CORP",
863
- "ipAddress": "10.0.1.50",
864
- "osName": "Ubuntu",
865
- "osVersion": "22.04 LTS",
866
- "externalIds": {
867
- "cmdb": "ASSET-12345",
868
- "aws": "i-0abc123def456789"
869
- }
870
- },
871
- {
872
- "$comment": "Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
873
- "type": "host",
874
- "name": "kiosk-lab-07",
875
- "hostname": "kiosk-lab-07",
876
- "fqdn": "kiosk-lab-07.lab.example.com",
877
- "ipAddress": "192.168.4.7",
878
- "osName": "Windows",
879
- "osVersion": "11 23H2"
880
- }
881
- ],
882
- "description": "A physical or virtual server, workstation, or network device.",
883
- "title": "Host Component"
884
- },
885
- "Container_Image_Component": {
886
- "allOf": [
887
- {
888
- "$ref": "#/$defs/Base_Component"
918
+ },
919
+ "description": "A reference using the 'ref' field."
889
920
  },
890
921
  {
891
922
  "type": "object",
923
+ "required": [
924
+ "url"
925
+ ],
892
926
  "properties": {
893
- "type": {
894
- "const": "containerImage"
895
- },
896
- "imageId": {
897
- "type": "string",
898
- "description": "Container image ID."
899
- },
900
- "registry": {
901
- "type": "string",
902
- "description": "Container registry. Example: 'docker.io'."
903
- },
904
- "repository": {
905
- "type": "string",
906
- "description": "Repository name. Example: 'library/nginx'."
907
- },
908
- "tag": {
927
+ "url": {
909
928
  "type": "string",
910
- "description": "Image tag. Example: '1.25'."
911
- }
912
- }
913
- }
914
- ],
915
- "examples": [
916
- {
917
- "type": "containerImage",
918
- "name": "nginx",
919
- "registry": "docker.io",
920
- "repository": "library/nginx",
921
- "tag": "1.25-alpine",
922
- "integrity": [
923
- {
924
- "algorithm": "sha256",
925
- "value": "a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d"
929
+ "format": "uri"
926
930
  }
927
- ]
928
- }
929
- ],
930
- "description": "A static container image (not running). Image integrity — formerly the 'digest' field — is expressed via the shared Base_Component.integrity array.",
931
- "title": "Container Image Component"
932
- },
933
- "Container_Instance_Component": {
934
- "allOf": [
935
- {
936
- "$ref": "#/$defs/Base_Component"
931
+ },
932
+ "description": "A URL pointing at the reference."
937
933
  },
938
934
  {
939
935
  "type": "object",
936
+ "required": [
937
+ "uri"
938
+ ],
940
939
  "properties": {
941
- "type": {
942
- "const": "containerInstance"
943
- },
944
- "containerId": {
945
- "type": "string",
946
- "description": "Running container ID."
947
- },
948
- "image": {
949
- "type": "string",
950
- "description": "Image the container was started from."
951
- },
952
- "runtime": {
940
+ "uri": {
953
941
  "type": "string",
954
- "description": "Container runtime. Example: 'docker', 'containerd', 'cri-o'."
942
+ "format": "uri"
955
943
  }
956
- }
944
+ },
945
+ "description": "A URI pointing at the reference."
957
946
  }
958
947
  ],
959
- "description": "A running container instance.",
960
- "title": "Container Instance Component"
948
+ "description": "A reference to an external document.",
949
+ "title": "Reference"
961
950
  },
962
- "Container_Platform_Component": {
963
- "allOf": [
964
- {
965
- "$ref": "#/$defs/Base_Component"
951
+ "Source_Location": {
952
+ "type": "object",
953
+ "unevaluatedProperties": false,
954
+ "required": [],
955
+ "properties": {
956
+ "ref": {
957
+ "type": "string",
958
+ "description": "Path to the file that this requirement originates from."
966
959
  },
967
- {
968
- "type": "object",
969
- "properties": {
970
- "type": {
971
- "const": "containerPlatform"
972
- },
973
- "platformType": {
974
- "type": "string",
975
- "description": "Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'."
976
- },
977
- "clusterName": {
978
- "type": "string",
979
- "description": "Cluster name."
980
- },
981
- "namespace": {
982
- "type": "string",
983
- "description": "Namespace within the cluster, if applicable."
984
- },
985
- "version": {
986
- "type": "string",
987
- "description": "Platform version."
988
- }
989
- }
960
+ "line": {
961
+ "type": "number",
962
+ "description": "The line on which this requirement is located."
990
963
  }
991
- ],
992
- "description": "A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).",
993
- "title": "Container Platform Component"
994
- },
995
- "Cloud_Account_Component": {
996
- "allOf": [
964
+ },
965
+ "examples": [
997
966
  {
998
- "$ref": "#/$defs/Base_Component"
967
+ "ref": "controls/SV-260476.rb",
968
+ "line": 1
999
969
  },
1000
970
  {
1001
- "type": "object",
1002
- "properties": {
1003
- "type": {
1004
- "const": "cloudAccount"
1005
- },
1006
- "provider": {
1007
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Cloud_Provider",
1008
- "description": "Cloud provider."
1009
- },
1010
- "accountId": {
1011
- "type": "string",
1012
- "description": "Cloud account identifier."
1013
- },
1014
- "region": {
1015
- "type": "string",
1016
- "description": "Cloud region, if applicable."
1017
- }
1018
- }
1019
- }
1020
- ],
1021
- "examples": [
1022
- {
1023
- "type": "cloudAccount",
1024
- "name": "Production AWS Account",
1025
- "componentId": "f1e2d3c4-b5a6-4978-8069-1a2b3c4d5e6f",
1026
- "provider": "aws",
1027
- "accountId": "123456789012",
1028
- "region": "us-east-1"
971
+ "ref": "profiles/ubuntu/controls/configure_audit.rb",
972
+ "line": 42
1029
973
  }
1030
974
  ],
1031
- "description": "A cloud provider account (AWS account, Azure subscription, GCP project).",
1032
- "title": "Cloud Account Component"
975
+ "description": "The explicit location of a requirement within source code.",
976
+ "title": "Source Location"
1033
977
  },
1034
- "Cloud_Resource_Component": {
1035
- "allOf": [
1036
- {
1037
- "$ref": "#/$defs/Base_Component"
978
+ "Supported_Platform": {
979
+ "type": "object",
980
+ "unevaluatedProperties": false,
981
+ "required": [],
982
+ "properties": {
983
+ "platformFamily": {
984
+ "type": "string",
985
+ "description": "The platform family. Example: 'redhat'."
1038
986
  },
1039
- {
1040
- "type": "object",
1041
- "properties": {
1042
- "type": {
1043
- "const": "cloudResource"
1044
- },
1045
- "provider": {
1046
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Cloud_Provider",
1047
- "description": "Cloud provider."
1048
- },
1049
- "resourceType": {
1050
- "type": "string",
1051
- "description": "Type of cloud resource. Example: 'ec2:instance', 's3:bucket'."
1052
- },
1053
- "resourceId": {
1054
- "type": "string",
1055
- "description": "Provider-specific resource identifier."
1056
- },
1057
- "arn": {
1058
- "type": "string",
1059
- "description": "Amazon Resource Name (AWS only)."
1060
- },
1061
- "region": {
1062
- "type": "string",
1063
- "description": "Cloud region where the resource resides."
1064
- }
1065
- }
987
+ "platformName": {
988
+ "type": "string",
989
+ "description": "The platform name - can include wildcards. Example: 'debian'."
990
+ },
991
+ "platform": {
992
+ "type": "string",
993
+ "description": "The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'."
994
+ },
995
+ "release": {
996
+ "type": "string",
997
+ "description": "The release of the platform. Example: '20.04' for 'ubuntu'."
1066
998
  }
1067
- ],
1068
- "description": "A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).",
1069
- "title": "Cloud Resource Component"
999
+ },
1000
+ "description": "A supported platform target. Example: the platform name being 'ubuntu'.",
1001
+ "title": "Supported Platform"
1070
1002
  },
1071
- "Repository_Component": {
1072
- "allOf": [
1073
- {
1074
- "$ref": "#/$defs/Base_Component"
1003
+ "Checksum": {
1004
+ "type": "object",
1005
+ "unevaluatedProperties": false,
1006
+ "required": [
1007
+ "algorithm",
1008
+ "value"
1009
+ ],
1010
+ "properties": {
1011
+ "algorithm": {
1012
+ "$ref": "#/$defs/Hash_Algorithm",
1013
+ "description": "The hash algorithm used for the checksum."
1075
1014
  },
1076
- {
1077
- "type": "object",
1078
- "properties": {
1079
- "type": {
1080
- "const": "repository"
1081
- },
1082
- "url": {
1083
- "type": "string",
1084
- "format": "uri",
1085
- "description": "Repository URL."
1086
- },
1087
- "branch": {
1088
- "type": "string",
1089
- "description": "Branch that was scanned."
1090
- },
1091
- "commit": {
1092
- "type": "string",
1093
- "description": "Commit SHA that was scanned."
1094
- }
1095
- }
1015
+ "value": {
1016
+ "type": "string",
1017
+ "description": "The checksum value."
1096
1018
  }
1097
- ],
1098
- "description": "A code repository (for SAST tools).",
1099
- "title": "Repository Component"
1100
- },
1101
- "Application_Component": {
1102
- "allOf": [
1019
+ },
1020
+ "examples": [
1103
1021
  {
1104
- "$ref": "#/$defs/Base_Component"
1022
+ "algorithm": "sha256",
1023
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
1105
1024
  },
1106
1025
  {
1107
- "type": "object",
1108
- "properties": {
1109
- "type": {
1110
- "const": "application"
1111
- },
1112
- "url": {
1113
- "type": "string",
1114
- "format": "uri",
1115
- "description": "Application URL (for DAST tools)."
1116
- },
1117
- "version": {
1118
- "type": "string",
1119
- "description": "Application version."
1120
- },
1121
- "environment": {
1122
- "type": "string",
1123
- "description": "Environment. Example: 'production', 'staging', 'development'."
1124
- }
1125
- }
1026
+ "algorithm": "sha512",
1027
+ "value": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
1126
1028
  }
1127
1029
  ],
1128
- "description": "A running application or API (for DAST tools).",
1129
- "title": "Application Component"
1030
+ "description": "Cryptographic checksum for baseline integrity verification.",
1031
+ "title": "Checksum"
1130
1032
  },
1131
- "Artifact_Component": {
1132
- "allOf": [
1133
- {
1134
- "$ref": "#/$defs/Base_Component"
1033
+ "Identity": {
1034
+ "type": "object",
1035
+ "unevaluatedProperties": false,
1036
+ "required": [
1037
+ "identifier",
1038
+ "type"
1039
+ ],
1040
+ "properties": {
1041
+ "identifier": {
1042
+ "type": "string",
1043
+ "description": "The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'."
1135
1044
  },
1136
- {
1137
- "type": "object",
1138
- "properties": {
1139
- "type": {
1140
- "const": "artifact"
1141
- },
1142
- "packageManager": {
1143
- "type": "string",
1144
- "description": "Package manager. Example: 'npm', 'maven', 'pip', 'nuget'."
1145
- },
1146
- "packageName": {
1147
- "type": "string",
1148
- "description": "Package name."
1149
- },
1150
- "version": {
1151
- "type": "string",
1152
- "description": "Package version."
1153
- }
1154
- }
1045
+ "type": {
1046
+ "type": "string",
1047
+ "title": "Identity Type",
1048
+ "enum": [
1049
+ "email",
1050
+ "username",
1051
+ "system",
1052
+ "agent",
1053
+ "simple",
1054
+ "other"
1055
+ ],
1056
+ "description": "The type of identifier. Use 'email' for email addresses, 'username' for user accounts, 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent' for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF, 'simple' for basic string identifiers without additional classification, or 'other' for custom identity systems."
1057
+ },
1058
+ "description": {
1059
+ "type": "string",
1060
+ "description": "Optional description of the identity or identity system, particularly useful when type is 'other'."
1155
1061
  }
1156
- ],
1062
+ },
1157
1063
  "examples": [
1158
1064
  {
1159
- "type": "artifact",
1160
- "name": "express",
1161
- "packageManager": "npm",
1162
- "packageName": "express",
1163
- "version": "4.18.2",
1164
- "integrity": [
1165
- {
1166
- "algorithm": "sha512",
1167
- "value": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
1168
- }
1169
- ]
1170
- }
1171
- ],
1172
- "description": "A software artifact or dependency (for SCA tools). Package integrity — formerly the 'checksum' field — is expressed via the shared Base_Component.integrity array.",
1173
- "title": "Artifact Component"
1174
- },
1175
- "Network_Component": {
1176
- "allOf": [
1177
- {
1178
- "$ref": "#/$defs/Base_Component"
1065
+ "type": "email",
1066
+ "identifier": "admin@example.com"
1179
1067
  },
1180
1068
  {
1181
- "type": "object",
1182
- "properties": {
1183
- "type": {
1184
- "const": "network"
1185
- },
1186
- "cidr": {
1187
- "type": "string",
1188
- "description": "Network CIDR block."
1189
- },
1190
- "gateway": {
1191
- "type": "string",
1192
- "description": "Network gateway address."
1193
- }
1194
- }
1195
- }
1196
- ],
1197
- "description": "A network segment or network device.",
1198
- "title": "Network Component"
1199
- },
1200
- "Database_Component": {
1201
- "allOf": [
1069
+ "type": "username",
1070
+ "identifier": "jdoe",
1071
+ "description": "Security Operations Analyst"
1072
+ },
1202
1073
  {
1203
- "$ref": "#/$defs/Base_Component"
1074
+ "type": "system",
1075
+ "identifier": "automated-scanner-01",
1076
+ "description": "Nightly compliance scan pipeline"
1204
1077
  },
1205
1078
  {
1206
- "type": "object",
1207
- "properties": {
1208
- "type": {
1209
- "const": "database"
1210
- },
1211
- "engine": {
1212
- "type": "string",
1213
- "description": "Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'."
1214
- },
1215
- "version": {
1216
- "type": "string",
1217
- "description": "Database version."
1218
- },
1219
- "host": {
1220
- "type": "string",
1221
- "description": "Database host."
1222
- },
1223
- "port": {
1224
- "type": "integer",
1225
- "minimum": 1,
1226
- "maximum": 65535,
1227
- "description": "Database port."
1228
- }
1229
- }
1079
+ "type": "agent",
1080
+ "identifier": "cve-enrichment-bot/v0.4.2",
1081
+ "description": "OpenAI GPT-4 via internal CVE-enrichment tool; proposes environmental CVSS for human review"
1230
1082
  }
1231
1083
  ],
1232
- "description": "A database instance.",
1233
- "title": "Database Component"
1234
- },
1235
- "AI_Model_Component": {
1236
- "allOf": [
1237
- {
1238
- "$ref": "#/$defs/Base_Component"
1239
- },
1240
- {
1241
- "type": "object",
1242
- "properties": {
1243
- "type": {
1244
- "const": "aiModel"
1245
- },
1246
- "modelId": {
1247
- "type": "string",
1248
- "description": "Provider/registry identifier for the model. Examples: a Hugging Face repo id ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model BOM(s) and to lineage references from other models."
1249
- },
1250
- "version": {
1251
- "type": "string",
1252
- "description": "Model version, revision, or checkpoint tag."
1253
- }
1254
- }
1255
- }
1256
- ],
1257
- "examples": [
1258
- {
1259
- "type": "aiModel",
1260
- "name": "Llama-2-7b-chat (finetuned)",
1261
- "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
1262
- "modelId": "acme/llama-2-7b-chat-support",
1263
- "version": "1.2.0",
1264
- "integrity": [
1265
- {
1266
- "algorithm": "sha256",
1267
- "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
1268
- }
1269
- ],
1270
- "boms": [
1271
- {
1272
- "bomType": "ai-model",
1273
- "format": "cyclonedx-ml",
1274
- "model": {
1275
- "modelArchitecture": "transformer",
1276
- "parameterCount": 6738415616,
1277
- "serializationFormat": "safetensors",
1278
- "adaptationType": "finetune",
1279
- "baseModelRef": "meta-llama/Llama-2-7b-hf"
1280
- }
1281
- }
1282
- ]
1283
- }
1284
- ],
1285
- "description": "A thin AI-model component: identity and correlation only (parallel to Host_Component's fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage — lives in an attached ai-model BOM (boms[]), never on the component itself.",
1286
- "title": "AI Model Component"
1287
- },
1288
- "Dataset_Component": {
1289
- "allOf": [
1290
- {
1291
- "$ref": "#/$defs/Base_Component"
1292
- },
1293
- {
1294
- "type": "object",
1295
- "properties": {
1296
- "type": {
1297
- "const": "dataset"
1298
- },
1299
- "datasetId": {
1300
- "type": "string",
1301
- "description": "Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to its dataset BOM(s) and to datasetRefs from ai-model components."
1302
- },
1303
- "version": {
1304
- "type": "string",
1305
- "description": "Dataset version, release identifier, or — for highly dynamic datasets — a timestamped release marker."
1306
- }
1307
- }
1308
- }
1309
- ],
1310
- "examples": [
1311
- {
1312
- "type": "dataset",
1313
- "name": "UltraChat-200k (filtered)",
1314
- "componentId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
1315
- "datasetId": "acme/ultrachat-200k-filtered",
1316
- "version": "2026-06-01",
1317
- "integrity": [
1318
- {
1319
- "algorithm": "sha256",
1320
- "value": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
1321
- }
1322
- ],
1323
- "boms": [
1324
- {
1325
- "bomType": "dataset",
1326
- "format": "croissant",
1327
- "dataset": {
1328
- "recordCount": 180000,
1329
- "datasetFormat": "parquet",
1330
- "dataClassification": "public",
1331
- "baseDatasetRefs": [
1332
- "HuggingFaceH4/ultrachat_200k"
1333
- ],
1334
- "derivation": "filtered"
1335
- }
1336
- }
1337
- ]
1338
- }
1339
- ],
1340
- "description": "A thin dataset component: identity and correlation only, symmetric with AI_Model_Component. All dataset detail — record count, format, classification, lineage — lives in an attached dataset BOM (boms[]), never on the component itself.",
1341
- "title": "Dataset Component"
1342
- }
1343
- }
1344
- },
1345
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0": {
1346
- "$schema": "https://json-schema.org/draft/2020-12/schema",
1347
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0",
1348
- "title": "HDF Common Primitives",
1349
- "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
1350
- "$defs": {
1351
- "Hash_Algorithm": {
1352
- "type": "string",
1353
- "enum": [
1354
- "sha256",
1355
- "sha384",
1356
- "sha512",
1357
- "blake3"
1358
- ],
1359
- "description": "Supported cryptographic hash algorithms for checksums and integrity verification. blake3 covers container-image and other artifact digests that use it.",
1360
- "title": "Hash Algorithm"
1084
+ "description": "Represents an identity that performed an action, such as capturing evidence or applying an override.",
1085
+ "title": "Identity"
1361
1086
  },
1362
- "Requirement_Group": {
1087
+ "Evidence": {
1363
1088
  "type": "object",
1364
1089
  "unevaluatedProperties": false,
1365
1090
  "required": [
1366
- "id",
1367
- "requirements"
1091
+ "type",
1092
+ "data"
1368
1093
  ],
1369
1094
  "properties": {
1370
- "id": {
1371
- "type": "string",
1372
- "description": "The unique identifier for the group. Example: the relative path to the file specifying the requirements."
1373
- },
1374
- "title": {
1375
- "type": "string",
1376
- "description": "The title of the group - should be human readable."
1377
- },
1378
- "requirements": {
1379
- "type": "array",
1380
- "items": {
1381
- "type": "string"
1382
- },
1383
- "description": "The set of requirements as specified by their ids in this group. Example: 'SV-238196'."
1384
- }
1385
- },
1386
- "description": "Describes a group of requirements, such as those defined in a single file.",
1387
- "title": "Requirement Group"
1388
- },
1389
- "Dependency": {
1390
- "type": "object",
1391
- "unevaluatedProperties": false,
1392
- "required": [],
1393
- "properties": {
1394
- "name": {
1395
- "type": "string",
1396
- "description": "The name or assigned alias."
1397
- },
1398
- "url": {
1095
+ "type": {
1399
1096
  "type": "string",
1400
- "format": "uri-reference",
1401
- "description": "The address of the dependency."
1097
+ "title": "Evidence Type",
1098
+ "enum": [
1099
+ "screenshot",
1100
+ "code",
1101
+ "log",
1102
+ "url",
1103
+ "file",
1104
+ "other"
1105
+ ],
1106
+ "description": "The type of evidence being provided."
1402
1107
  },
1403
- "branch": {
1108
+ "data": {
1404
1109
  "type": "string",
1405
- "description": "The branch name for a git repo."
1110
+ "description": "The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs: the raw text. For URLs: the URL string."
1406
1111
  },
1407
- "path": {
1112
+ "description": {
1408
1113
  "type": "string",
1409
- "description": "The relative path if the dependency is locally available."
1114
+ "description": "Human-readable description of what this evidence shows."
1410
1115
  },
1411
- "statusMessage": {
1116
+ "mimeType": {
1412
1117
  "type": "string",
1413
- "description": "The reason for the status if it is 'failed' or 'skipped'."
1118
+ "description": "MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'."
1414
1119
  },
1415
- "status": {
1120
+ "encoding": {
1416
1121
  "type": "string",
1417
- "description": "The status. Should be: 'loaded', 'failed', or 'skipped'."
1122
+ "description": "Encoding used for the data. Example: 'base64', 'utf-8'."
1418
1123
  },
1419
- "git": {
1420
- "type": "string",
1421
- "format": "uri",
1422
- "description": "The location of the git repo. Example: 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'."
1124
+ "size": {
1125
+ "type": "number",
1126
+ "description": "Size of the evidence data in bytes."
1423
1127
  },
1424
- "supermarket": {
1128
+ "capturedAt": {
1425
1129
  "type": "string",
1426
- "description": "The 'user/profilename' attribute for a Supermarket server."
1130
+ "format": "date-time",
1131
+ "description": "Timestamp when this evidence was captured. ISO 8601 format."
1427
1132
  },
1428
- "compliance": {
1429
- "type": "string",
1430
- "description": "The 'user/profilename' attribute for an Automate server."
1133
+ "capturedBy": {
1134
+ "$ref": "#/$defs/Identity",
1135
+ "description": "Identity of who or what captured this evidence."
1431
1136
  }
1432
1137
  },
1433
1138
  "examples": [
1434
1139
  {
1435
- "name": "ubuntu-22.04-baseline",
1436
- "url": "https://github.com/my-org/ubuntu-22.04-stig-baseline",
1437
- "git": "https://github.com/my-org/ubuntu-22.04-stig-baseline.git",
1438
- "branch": "main",
1439
- "status": "loaded"
1140
+ "type": "screenshot",
1141
+ "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
1142
+ "description": "Screenshot showing firewall configuration with required ports blocked",
1143
+ "mimeType": "image/png",
1144
+ "encoding": "base64",
1145
+ "size": 95,
1146
+ "capturedAt": "2025-12-14T10:30:00Z",
1147
+ "capturedBy": {
1148
+ "identifier": "security-auditor@example.com",
1149
+ "type": "email"
1150
+ }
1440
1151
  },
1441
1152
  {
1442
- "name": "ssl-tls-baseline",
1443
- "path": "../shared-baselines/ssl-tls",
1444
- "status": "loaded"
1153
+ "type": "code",
1154
+ "data": "# Nginx configuration\nserver {\n listen 443 ssl;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers HIGH:!aNULL:!MD5;\n}",
1155
+ "description": "Server configuration showing TLS 1.2+ enforcement",
1156
+ "mimeType": "text/plain",
1157
+ "capturedAt": "2025-12-14T10:45:00Z"
1445
1158
  },
1446
1159
  {
1447
- "name": "windows-2022-baseline",
1448
- "git": "https://github.com/security-org/windows-2022-stig.git",
1449
- "branch": "v1.2.0",
1450
- "status": "failed",
1451
- "statusMessage": "Unable to clone repository: authentication failed"
1160
+ "type": "log",
1161
+ "data": "[2025-12-14 10:00:15] INFO: Security scan completed - 0 critical vulnerabilities found\n[2025-12-14 10:00:16] INFO: All required security patches applied\n[2025-12-14 10:00:17] INFO: System compliant with security baseline",
1162
+ "description": "Security scan log output",
1163
+ "mimeType": "text/plain",
1164
+ "size": 256
1452
1165
  },
1453
1166
  {
1454
- "name": "chef-supermarket-baseline",
1455
- "supermarket": "dev-sec/linux-baseline",
1456
- "status": "loaded"
1457
- }
1458
- ],
1459
- "description": "A dependency for a baseline. Can include relative paths or URLs for where to find the dependency.",
1460
- "title": "Dependency"
1461
- },
1462
- "Reference": {
1463
- "anyOf": [
1464
- {
1465
- "type": "object",
1466
- "required": [
1467
- "ref"
1468
- ],
1469
- "properties": {
1470
- "ref": {
1471
- "anyOf": [
1472
- {
1473
- "type": "string",
1474
- "description": "A human readable/meaningful reference. Example: a book title."
1475
- },
1476
- {
1477
- "type": "array",
1478
- "items": {
1479
- "type": "object",
1480
- "additionalProperties": true
1481
- },
1482
- "description": "An array of reference objects."
1483
- }
1484
- ]
1485
- }
1486
- },
1487
- "description": "A reference using the 'ref' field."
1488
- },
1489
- {
1490
- "type": "object",
1491
- "required": [
1492
- "url"
1493
- ],
1494
- "properties": {
1495
- "url": {
1496
- "type": "string",
1497
- "format": "uri"
1498
- }
1499
- },
1500
- "description": "A URL pointing at the reference."
1167
+ "type": "url",
1168
+ "data": "https://jira.example.com/browse/SEC-12345",
1169
+ "description": "Link to security ticket documenting remediation work",
1170
+ "capturedAt": "2025-12-14T11:00:00Z"
1501
1171
  },
1502
1172
  {
1503
- "type": "object",
1504
- "required": [
1505
- "uri"
1506
- ],
1507
- "properties": {
1508
- "uri": {
1509
- "type": "string",
1510
- "format": "uri"
1511
- }
1512
- },
1513
- "description": "A URI pointing at the reference."
1173
+ "type": "file",
1174
+ "data": "UEsDBBQAAAAIAI1ZX1YhQp8FHgAAABIAAAAIAAAAdGVzdC50eHRLy8nPS8lQSgIAUmNEBhQAAAA=",
1175
+ "description": "Compliance audit report PDF",
1176
+ "mimeType": "application/pdf",
1177
+ "encoding": "base64",
1178
+ "size": 2048,
1179
+ "capturedAt": "2025-12-14T12:00:00Z",
1180
+ "capturedBy": {
1181
+ "identifier": "compliance-system",
1182
+ "type": "system"
1183
+ }
1514
1184
  }
1515
1185
  ],
1516
- "description": "A reference to an external document.",
1517
- "title": "Reference"
1186
+ "description": "Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts, or URLs.",
1187
+ "title": "Evidence"
1518
1188
  },
1519
- "Source_Location": {
1189
+ "Remediation": {
1520
1190
  "type": "object",
1521
1191
  "unevaluatedProperties": false,
1522
- "required": [],
1192
+ "required": [
1193
+ "uri"
1194
+ ],
1523
1195
  "properties": {
1524
- "ref": {
1196
+ "uri": {
1525
1197
  "type": "string",
1526
- "description": "Path to the file that this requirement originates from."
1198
+ "format": "uri",
1199
+ "description": "URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts, etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content, vendor-provided scripts."
1527
1200
  },
1528
- "line": {
1529
- "type": "number",
1530
- "description": "The line on which this requirement is located."
1201
+ "checksum": {
1202
+ "$ref": "#/$defs/Checksum",
1203
+ "description": "Optional cryptographic checksum for verifying the integrity of remediation resources fetched from the URI. Recommended for security when referencing external automation scripts."
1531
1204
  }
1532
1205
  },
1533
1206
  "examples": [
1534
1207
  {
1535
- "ref": "controls/SV-260476.rb",
1536
- "line": 1
1208
+ "uri": "https://github.com/ansible-lockdown/RHEL9-STIG/tree/main/tasks"
1537
1209
  },
1538
1210
  {
1539
- "ref": "profiles/ubuntu/controls/configure_audit.rb",
1540
- "line": 42
1211
+ "uri": "https://artifacts.example.com/remediation/ubuntu-22.04-hardening-v1.2.tar.gz",
1212
+ "checksum": {
1213
+ "algorithm": "sha256",
1214
+ "value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
1215
+ }
1541
1216
  }
1542
1217
  ],
1543
- "description": "The explicit location of a requirement within source code.",
1544
- "title": "Source Location"
1218
+ "description": "Reference to automated remediation resources for implementing security controls. Points to external automation content like Ansible playbooks, Terraform scripts, or vendor-provided remediation tools.",
1219
+ "title": "Remediation"
1545
1220
  },
1546
- "Supported_Platform": {
1221
+ "Verification_Method": {
1547
1222
  "type": "object",
1548
1223
  "unevaluatedProperties": false,
1549
- "required": [],
1224
+ "required": [
1225
+ "type",
1226
+ "controller"
1227
+ ],
1550
1228
  "properties": {
1551
- "platformFamily": {
1229
+ "type": {
1552
1230
  "type": "string",
1553
- "description": "The platform family. Example: 'redhat'."
1231
+ "description": "The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018', 'Ed25519VerificationKey2020'."
1554
1232
  },
1555
- "platformName": {
1233
+ "controller": {
1556
1234
  "type": "string",
1557
- "description": "The platform name - can include wildcards. Example: 'debian'."
1235
+ "description": "The entity that controls this verification method. Can be a DID, URI, or other identifier."
1558
1236
  },
1559
- "platform": {
1237
+ "publicKeyJwk": {
1238
+ "type": "object",
1239
+ "additionalProperties": true,
1240
+ "description": "Public key in JSON Web Key format."
1241
+ },
1242
+ "publicKeyPem": {
1560
1243
  "type": "string",
1561
- "description": "The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'."
1244
+ "description": "Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----'."
1562
1245
  },
1563
- "release": {
1246
+ "publicKeyBase58": {
1564
1247
  "type": "string",
1565
- "description": "The release of the platform. Example: '20.04' for 'ubuntu'."
1248
+ "description": "Public key in Base58 format, commonly used with Ed25519 keys."
1566
1249
  }
1567
1250
  },
1568
- "description": "A supported platform target. Example: the platform name being 'ubuntu'.",
1569
- "title": "Supported Platform"
1251
+ "description": "Verification method containing the public key needed to verify a digital signature. Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.",
1252
+ "title": "Verification Method"
1570
1253
  },
1571
- "Checksum": {
1254
+ "Milestone": {
1572
1255
  "type": "object",
1573
1256
  "unevaluatedProperties": false,
1574
1257
  "required": [
1575
- "algorithm",
1576
- "value"
1258
+ "description",
1259
+ "estimatedCompletion",
1260
+ "status"
1577
1261
  ],
1578
1262
  "properties": {
1579
- "algorithm": {
1580
- "$ref": "#/$defs/Hash_Algorithm",
1581
- "description": "The hash algorithm used for the checksum."
1582
- },
1583
- "value": {
1263
+ "description": {
1584
1264
  "type": "string",
1585
- "description": "The checksum value."
1586
- }
1587
- },
1588
- "examples": [
1589
- {
1590
- "algorithm": "sha256",
1591
- "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
1265
+ "description": "Description of this milestone or task."
1592
1266
  },
1593
- {
1594
- "algorithm": "sha512",
1595
- "value": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
1596
- }
1597
- ],
1598
- "description": "Cryptographic checksum for baseline integrity verification.",
1599
- "title": "Checksum"
1600
- },
1601
- "Identity": {
1602
- "type": "object",
1603
- "unevaluatedProperties": false,
1604
- "required": [
1605
- "identifier",
1606
- "type"
1607
- ],
1608
- "properties": {
1609
- "identifier": {
1267
+ "estimatedCompletion": {
1610
1268
  "type": "string",
1611
- "description": "The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'."
1269
+ "format": "date-time",
1270
+ "description": "Estimated completion date. ISO 8601 format."
1612
1271
  },
1613
- "type": {
1272
+ "status": {
1614
1273
  "type": "string",
1615
- "title": "Identity Type",
1274
+ "title": "Milestone Status",
1616
1275
  "enum": [
1617
- "email",
1618
- "username",
1619
- "system",
1620
- "agent",
1621
- "simple",
1622
- "other"
1276
+ "pending",
1277
+ "inProgress",
1278
+ "completed"
1623
1279
  ],
1624
- "description": "The type of identifier. Use 'email' for email addresses, 'username' for user accounts, 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent' for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF, 'simple' for basic string identifiers without additional classification, or 'other' for custom identity systems."
1280
+ "description": "Current status of this milestone."
1625
1281
  },
1626
- "description": {
1282
+ "completedAt": {
1627
1283
  "type": "string",
1628
- "description": "Optional description of the identity or identity system, particularly useful when type is 'other'."
1629
- }
1630
- },
1631
- "examples": [
1632
- {
1633
- "type": "email",
1634
- "identifier": "admin@example.com"
1635
- },
1636
- {
1637
- "type": "username",
1638
- "identifier": "jdoe",
1639
- "description": "Security Operations Analyst"
1640
- },
1641
- {
1642
- "type": "system",
1643
- "identifier": "automated-scanner-01",
1644
- "description": "Nightly compliance scan pipeline"
1284
+ "format": "date-time",
1285
+ "description": "Actual completion timestamp. ISO 8601 format."
1645
1286
  },
1646
- {
1647
- "type": "agent",
1648
- "identifier": "cve-enrichment-bot/v0.4.2",
1649
- "description": "OpenAI GPT-4 via internal CVE-enrichment tool; proposes environmental CVSS for human review"
1287
+ "completedBy": {
1288
+ "$ref": "#/$defs/Identity",
1289
+ "description": "Identity of who completed this milestone."
1650
1290
  }
1651
- ],
1652
- "description": "Represents an identity that performed an action, such as capturing evidence or applying an override.",
1653
- "title": "Identity"
1291
+ },
1292
+ "description": "A milestone or task within a POA&M remediation plan.",
1293
+ "title": "Milestone"
1654
1294
  },
1655
- "Evidence": {
1295
+ "Signature": {
1656
1296
  "type": "object",
1657
1297
  "unevaluatedProperties": false,
1658
1298
  "required": [
1659
1299
  "type",
1660
- "data"
1300
+ "created",
1301
+ "creator",
1302
+ "signatureValue",
1303
+ "proofPurpose",
1304
+ "verificationMethod"
1661
1305
  ],
1662
1306
  "properties": {
1663
1307
  "type": {
1664
1308
  "type": "string",
1665
- "title": "Evidence Type",
1666
- "enum": [
1667
- "screenshot",
1668
- "code",
1669
- "log",
1670
- "url",
1671
- "file",
1672
- "other"
1673
- ],
1674
- "description": "The type of evidence being provided."
1309
+ "description": "The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018', 'Ed25519Signature2020'."
1675
1310
  },
1676
- "data": {
1311
+ "created": {
1677
1312
  "type": "string",
1678
- "description": "The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs: the raw text. For URLs: the URL string."
1313
+ "format": "date-time",
1314
+ "description": "When the signature was created. ISO 8601 format."
1679
1315
  },
1680
- "description": {
1681
- "type": "string",
1682
- "description": "Human-readable description of what this evidence shows."
1316
+ "creator": {
1317
+ "$ref": "#/$defs/Identity",
1318
+ "description": "The identity that created this signature."
1683
1319
  },
1684
- "mimeType": {
1320
+ "signatureValue": {
1685
1321
  "type": "string",
1686
- "description": "MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'."
1322
+ "description": "The base64-encoded or base58-encoded signature value."
1687
1323
  },
1688
- "encoding": {
1689
- "type": "string",
1690
- "description": "Encoding used for the data. Example: 'base64', 'utf-8'."
1691
- },
1692
- "size": {
1693
- "type": "number",
1694
- "description": "Size of the evidence data in bytes."
1695
- },
1696
- "capturedAt": {
1697
- "type": "string",
1698
- "format": "date-time",
1699
- "description": "Timestamp when this evidence was captured. ISO 8601 format."
1700
- },
1701
- "capturedBy": {
1702
- "$ref": "#/$defs/Identity",
1703
- "description": "Identity of who or what captured this evidence."
1704
- }
1705
- },
1706
- "examples": [
1707
- {
1708
- "type": "screenshot",
1709
- "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
1710
- "description": "Screenshot showing firewall configuration with required ports blocked",
1711
- "mimeType": "image/png",
1712
- "encoding": "base64",
1713
- "size": 95,
1714
- "capturedAt": "2025-12-14T10:30:00Z",
1715
- "capturedBy": {
1716
- "identifier": "security-auditor@example.com",
1717
- "type": "email"
1718
- }
1719
- },
1720
- {
1721
- "type": "code",
1722
- "data": "# Nginx configuration\nserver {\n listen 443 ssl;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers HIGH:!aNULL:!MD5;\n}",
1723
- "description": "Server configuration showing TLS 1.2+ enforcement",
1724
- "mimeType": "text/plain",
1725
- "capturedAt": "2025-12-14T10:45:00Z"
1726
- },
1727
- {
1728
- "type": "log",
1729
- "data": "[2025-12-14 10:00:15] INFO: Security scan completed - 0 critical vulnerabilities found\n[2025-12-14 10:00:16] INFO: All required security patches applied\n[2025-12-14 10:00:17] INFO: System compliant with security baseline",
1730
- "description": "Security scan log output",
1731
- "mimeType": "text/plain",
1732
- "size": 256
1733
- },
1734
- {
1735
- "type": "url",
1736
- "data": "https://jira.example.com/browse/SEC-12345",
1737
- "description": "Link to security ticket documenting remediation work",
1738
- "capturedAt": "2025-12-14T11:00:00Z"
1739
- },
1740
- {
1741
- "type": "file",
1742
- "data": "UEsDBBQAAAAIAI1ZX1YhQp8FHgAAABIAAAAIAAAAdGVzdC50eHRLy8nPS8lQSgIAUmNEBhQAAAA=",
1743
- "description": "Compliance audit report PDF",
1744
- "mimeType": "application/pdf",
1745
- "encoding": "base64",
1746
- "size": 2048,
1747
- "capturedAt": "2025-12-14T12:00:00Z",
1748
- "capturedBy": {
1749
- "identifier": "compliance-system",
1750
- "type": "system"
1751
- }
1752
- }
1753
- ],
1754
- "description": "Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts, or URLs.",
1755
- "title": "Evidence"
1756
- },
1757
- "Remediation": {
1758
- "type": "object",
1759
- "unevaluatedProperties": false,
1760
- "required": [
1761
- "uri"
1762
- ],
1763
- "properties": {
1764
- "uri": {
1765
- "type": "string",
1766
- "format": "uri",
1767
- "description": "URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts, etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content, vendor-provided scripts."
1768
- },
1769
- "checksum": {
1770
- "$ref": "#/$defs/Checksum",
1771
- "description": "Optional cryptographic checksum for verifying the integrity of remediation resources fetched from the URI. Recommended for security when referencing external automation scripts."
1772
- }
1773
- },
1774
- "examples": [
1775
- {
1776
- "uri": "https://github.com/ansible-lockdown/RHEL9-STIG/tree/main/tasks"
1777
- },
1778
- {
1779
- "uri": "https://artifacts.example.com/remediation/ubuntu-22.04-hardening-v1.2.tar.gz",
1780
- "checksum": {
1781
- "algorithm": "sha256",
1782
- "value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
1783
- }
1784
- }
1785
- ],
1786
- "description": "Reference to automated remediation resources for implementing security controls. Points to external automation content like Ansible playbooks, Terraform scripts, or vendor-provided remediation tools.",
1787
- "title": "Remediation"
1788
- },
1789
- "Verification_Method": {
1790
- "type": "object",
1791
- "unevaluatedProperties": false,
1792
- "required": [
1793
- "type",
1794
- "controller"
1795
- ],
1796
- "properties": {
1797
- "type": {
1798
- "type": "string",
1799
- "description": "The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018', 'Ed25519VerificationKey2020'."
1800
- },
1801
- "controller": {
1802
- "type": "string",
1803
- "description": "The entity that controls this verification method. Can be a DID, URI, or other identifier."
1804
- },
1805
- "publicKeyJwk": {
1806
- "type": "object",
1807
- "additionalProperties": true,
1808
- "description": "Public key in JSON Web Key format."
1809
- },
1810
- "publicKeyPem": {
1811
- "type": "string",
1812
- "description": "Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----'."
1813
- },
1814
- "publicKeyBase58": {
1815
- "type": "string",
1816
- "description": "Public key in Base58 format, commonly used with Ed25519 keys."
1817
- }
1818
- },
1819
- "description": "Verification method containing the public key needed to verify a digital signature. Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.",
1820
- "title": "Verification Method"
1821
- },
1822
- "Milestone": {
1823
- "type": "object",
1824
- "unevaluatedProperties": false,
1825
- "required": [
1826
- "description",
1827
- "estimatedCompletion",
1828
- "status"
1829
- ],
1830
- "properties": {
1831
- "description": {
1832
- "type": "string",
1833
- "description": "Description of this milestone or task."
1834
- },
1835
- "estimatedCompletion": {
1836
- "type": "string",
1837
- "format": "date-time",
1838
- "description": "Estimated completion date. ISO 8601 format."
1839
- },
1840
- "status": {
1841
- "type": "string",
1842
- "title": "Milestone Status",
1843
- "enum": [
1844
- "pending",
1845
- "inProgress",
1846
- "completed"
1847
- ],
1848
- "description": "Current status of this milestone."
1849
- },
1850
- "completedAt": {
1851
- "type": "string",
1852
- "format": "date-time",
1853
- "description": "Actual completion timestamp. ISO 8601 format."
1854
- },
1855
- "completedBy": {
1856
- "$ref": "#/$defs/Identity",
1857
- "description": "Identity of who completed this milestone."
1858
- }
1859
- },
1860
- "description": "A milestone or task within a POA&M remediation plan.",
1861
- "title": "Milestone"
1862
- },
1863
- "Signature": {
1864
- "type": "object",
1865
- "unevaluatedProperties": false,
1866
- "required": [
1867
- "type",
1868
- "created",
1869
- "creator",
1870
- "signatureValue",
1871
- "proofPurpose",
1872
- "verificationMethod"
1873
- ],
1874
- "properties": {
1875
- "type": {
1876
- "type": "string",
1877
- "description": "The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018', 'Ed25519Signature2020'."
1878
- },
1879
- "created": {
1880
- "type": "string",
1881
- "format": "date-time",
1882
- "description": "When the signature was created. ISO 8601 format."
1883
- },
1884
- "creator": {
1885
- "$ref": "#/$defs/Identity",
1886
- "description": "The identity that created this signature."
1887
- },
1888
- "signatureValue": {
1889
- "type": "string",
1890
- "description": "The base64-encoded or base58-encoded signature value."
1891
- },
1892
- "proofPurpose": {
1324
+ "proofPurpose": {
1893
1325
  "type": "string",
1894
1326
  "description": "The purpose of this signature. Example: 'attestation', 'authentication', 'assertionMethod'."
1895
1327
  },
@@ -1971,6 +1403,13 @@
1971
1403
  "Baseline_Metadata": {
1972
1404
  "type": "object",
1973
1405
  "properties": {
1406
+ "externalReferences": {
1407
+ "type": "array",
1408
+ "items": {
1409
+ "$ref": "#/$defs/External_Reference"
1410
+ },
1411
+ "description": "Optional references to external artifacts relevant to this baseline (CTI/STIX, advisories, source catalogs, or any URI-addressable artifact). Travels with the baseline definition. Inert context; see External_Reference."
1412
+ },
1974
1413
  "name": {
1975
1414
  "type": "string",
1976
1415
  "description": "The name - must be unique."
@@ -2048,6 +1487,13 @@
2048
1487
  "Requirement_Core": {
2049
1488
  "type": "object",
2050
1489
  "properties": {
1490
+ "externalReferences": {
1491
+ "type": "array",
1492
+ "items": {
1493
+ "$ref": "#/$defs/External_Reference"
1494
+ },
1495
+ "description": "Optional references to external artifacts relevant to this requirement (CTI/STIX correlation, advisories, control/definition sources, or any URI-addressable artifact). Applies to both baseline requirement definitions and evaluated requirements. Inert context; see External_Reference."
1496
+ },
2051
1497
  "id": {
2052
1498
  "type": "string",
2053
1499
  "description": "The requirement identifier. Example: 'SV-238196'."
@@ -2134,7 +1580,7 @@
2134
1580
  },
2135
1581
  "examples": [
2136
1582
  {
2137
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.4.0 (backward compatibility).",
1583
+ "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
2138
1584
  "id": "SV-238196",
2139
1585
  "title": "The Ubuntu operating system must enforce password complexity",
2140
1586
  "impact": 0.5,
@@ -2200,80 +1646,796 @@
2200
1646
  "label": "default",
2201
1647
  "data": "The Cyber Security Plan documents the system, its boundary, and its components."
2202
1648
  }
2203
- ],
2204
- "controlType": "policy",
2205
- "verificationMethod": "manual-by-design",
2206
- "applicability": "required"
1649
+ ],
1650
+ "controlType": "policy",
1651
+ "verificationMethod": "manual-by-design",
1652
+ "applicability": "required"
1653
+ },
1654
+ {
1655
+ "$comment": "v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
1656
+ "id": "SV-999999",
1657
+ "title": "Example STIG rule pending automation",
1658
+ "impact": 0.3,
1659
+ "tags": {
1660
+ "stig_id": "SV-999999"
1661
+ },
1662
+ "descriptions": [
1663
+ {
1664
+ "label": "default",
1665
+ "data": "Example requirement that is intended to be automated but currently lacks a fix block."
1666
+ },
1667
+ {
1668
+ "label": "check",
1669
+ "data": "Manual review of system configuration is required."
1670
+ }
1671
+ ],
1672
+ "verificationMethod": "manual-pending-automation",
1673
+ "applicability": "advisory"
1674
+ }
1675
+ ],
1676
+ "description": "Core requirement fields shared between baseline requirements and evaluated requirements. Contains the fundamental requirement definition without assessment results.",
1677
+ "title": "Requirement Core"
1678
+ },
1679
+ "Verification_Method_Enum": {
1680
+ "type": "string",
1681
+ "enum": [
1682
+ "automated",
1683
+ "manual-by-design",
1684
+ "manual-pending-automation",
1685
+ "hybrid"
1686
+ ],
1687
+ "description": "How a requirement is intended to be verified. Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to disambiguate from the unrelated Verification_Method DID-context struct.",
1688
+ "title": "Verification Method Enum"
1689
+ },
1690
+ "Severity": {
1691
+ "type": "string",
1692
+ "enum": [
1693
+ "critical",
1694
+ "high",
1695
+ "medium",
1696
+ "low",
1697
+ "informational"
1698
+ ],
1699
+ "description": "Severity rating for a requirement. Typically derived from the numeric impact score.",
1700
+ "title": "Severity"
1701
+ },
1702
+ "Cloud_Provider": {
1703
+ "type": [
1704
+ "string",
1705
+ "null"
1706
+ ],
1707
+ "enum": [
1708
+ "aws",
1709
+ "azure",
1710
+ "gcp",
1711
+ "oci",
1712
+ "other",
1713
+ null
1714
+ ],
1715
+ "description": "Cloud service provider identifier.",
1716
+ "title": "Cloud Provider"
1717
+ }
1718
+ }
1719
+ },
1720
+ "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0": {
1721
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1722
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.5.0",
1723
+ "title": "HDF Component Primitives",
1724
+ "description": "First-class system component with identity, polymorphic type, generalized BOM attachment (boms[]), and system-binding properties. Components are the successor to Targets, adding stable identity (componentId), external system cross-references, and manifest inventory (SBOM, AI model/dataset, and reserved future BOM kinds).",
1725
+ "$defs": {
1726
+ "Base_Component": {
1727
+ "type": "object",
1728
+ "additionalProperties": true,
1729
+ "required": [
1730
+ "type",
1731
+ "name"
1732
+ ],
1733
+ "properties": {
1734
+ "type": {
1735
+ "type": "string",
1736
+ "title": "Target Type",
1737
+ "enum": [
1738
+ "host",
1739
+ "containerImage",
1740
+ "containerInstance",
1741
+ "containerPlatform",
1742
+ "cloudAccount",
1743
+ "cloudResource",
1744
+ "repository",
1745
+ "application",
1746
+ "artifact",
1747
+ "network",
1748
+ "database",
1749
+ "aiModel",
1750
+ "dataset"
1751
+ ],
1752
+ "description": "Component type discriminator. Same values as Target types, plus aiModel and dataset (thin AI subject components whose detail lives in an attached ai-model / dataset BOM)."
1753
+ },
1754
+ "name": {
1755
+ "type": "string",
1756
+ "description": "Human-readable name for this component."
1757
+ },
1758
+ "componentId": {
1759
+ "type": "string",
1760
+ "format": "uuid",
1761
+ "description": "Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in hdf-results. Enables cross-document correlation, diffing, and data flow references."
1762
+ },
1763
+ "description": {
1764
+ "type": "string",
1765
+ "description": "Description of this component's role or purpose."
1766
+ },
1767
+ "owner": {
1768
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1769
+ "description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
1770
+ },
1771
+ "externalIds": {
1772
+ "type": "object",
1773
+ "additionalProperties": {
1774
+ "type": "string"
1775
+ },
1776
+ "description": "Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are allowed."
1777
+ },
1778
+ "labels": {
1779
+ "type": "object",
1780
+ "additionalProperties": {
1781
+ "type": "string"
1782
+ },
1783
+ "description": "Optional key-value labels for flexible grouping. Well-known keys: system, component, environment, region, team. Values must be strings."
1784
+ },
1785
+ "boms": {
1786
+ "type": "array",
1787
+ "items": {
1788
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0#/$defs/Bom"
1789
+ },
1790
+ "description": "Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType), each carried by passthrough (ref/document) or normalized. Replaces the former sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an ai-model BOM). See primitives/bom.schema.json."
1791
+ },
1792
+ "integrity": {
1793
+ "type": "array",
1794
+ "items": {
1795
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
1796
+ },
1797
+ "description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes. An array supports multi-file/sharded artifacts. This is the single, generic home for artifact/subject integrity across all component types (it replaced the former per-type Container_Image digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
1798
+ },
1799
+ "baselineRefs": {
1800
+ "type": "array",
1801
+ "items": {
1802
+ "type": "string"
1803
+ },
1804
+ "description": "Names of baselines that apply to this component."
1805
+ },
1806
+ "inputOverrides": {
1807
+ "type": "array",
1808
+ "items": {
1809
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0#/$defs/Input_Override"
1810
+ },
1811
+ "description": "System-specific overrides for baseline input values."
1812
+ },
1813
+ "targetSelector": {
1814
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0#/$defs/Target_Selector",
1815
+ "description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
1816
+ }
1817
+ },
1818
+ "examples": [
1819
+ {
1820
+ "type": "aiModel",
1821
+ "name": "Llama-2-7b-chat (finetuned)",
1822
+ "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
1823
+ "owner": {
1824
+ "type": "email",
1825
+ "identifier": "ml-platform@agency.gov"
1826
+ },
1827
+ "integrity": [
1828
+ {
1829
+ "algorithm": "sha256",
1830
+ "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
1831
+ }
1832
+ ],
1833
+ "boms": [
1834
+ {
1835
+ "bomType": "ai-model",
1836
+ "format": "cyclonedx-ml",
1837
+ "model": {
1838
+ "adaptationType": "finetune"
1839
+ }
1840
+ }
1841
+ ]
1842
+ }
1843
+ ],
1844
+ "description": "Base properties shared by all component types. Extends the Target concept with stable identity, external references, generalized BOM attachment (boms[]), and unified artifact integrity (integrity[]).",
1845
+ "title": "Base Component"
1846
+ },
1847
+ "Component": {
1848
+ "description": "A system component. Uses discriminated union pattern with 'type' field as discriminator. Superset of Target with identity, external IDs, and SBOM support.",
1849
+ "title": "Component",
1850
+ "oneOf": [
1851
+ {
1852
+ "$ref": "#/$defs/Host_Component"
1853
+ },
1854
+ {
1855
+ "$ref": "#/$defs/Container_Image_Component"
1856
+ },
1857
+ {
1858
+ "$ref": "#/$defs/Container_Instance_Component"
1859
+ },
1860
+ {
1861
+ "$ref": "#/$defs/Container_Platform_Component"
1862
+ },
1863
+ {
1864
+ "$ref": "#/$defs/Cloud_Account_Component"
1865
+ },
1866
+ {
1867
+ "$ref": "#/$defs/Cloud_Resource_Component"
1868
+ },
1869
+ {
1870
+ "$ref": "#/$defs/Repository_Component"
1871
+ },
1872
+ {
1873
+ "$ref": "#/$defs/Application_Component"
1874
+ },
1875
+ {
1876
+ "$ref": "#/$defs/Artifact_Component"
1877
+ },
1878
+ {
1879
+ "$ref": "#/$defs/Network_Component"
1880
+ },
1881
+ {
1882
+ "$ref": "#/$defs/Database_Component"
1883
+ },
1884
+ {
1885
+ "$ref": "#/$defs/AI_Model_Component"
1886
+ },
1887
+ {
1888
+ "$ref": "#/$defs/Dataset_Component"
1889
+ }
1890
+ ]
1891
+ },
1892
+ "Host_Component": {
1893
+ "allOf": [
1894
+ {
1895
+ "$ref": "#/$defs/Base_Component"
1896
+ },
1897
+ {
1898
+ "type": "object",
1899
+ "properties": {
1900
+ "type": {
1901
+ "const": "host"
1902
+ },
1903
+ "hostname": {
1904
+ "type": "string",
1905
+ "description": "Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name the source reports; do not derive it from the FQDN."
1906
+ },
1907
+ "fqdn": {
1908
+ "type": "string",
1909
+ "format": "hostname",
1910
+ "description": "Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname' (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the schema does not enforce case so source fidelity is preserved on round-trip."
1911
+ },
1912
+ "domain": {
1913
+ "type": "string",
1914
+ "description": "Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only from a source that carries directory membership."
1915
+ },
1916
+ "ipAddress": {
1917
+ "anyOf": [
1918
+ {
1919
+ "type": "string",
1920
+ "format": "ipv4"
1921
+ },
1922
+ {
1923
+ "type": "string",
1924
+ "format": "ipv6"
1925
+ }
1926
+ ],
1927
+ "description": "IP address of the host."
1928
+ },
1929
+ "macAddress": {
1930
+ "type": "string",
1931
+ "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$",
1932
+ "description": "MAC address in colon-separated hexadecimal format."
1933
+ },
1934
+ "osName": {
1935
+ "type": "string",
1936
+ "description": "Operating system name."
1937
+ },
1938
+ "osVersion": {
1939
+ "type": "string",
1940
+ "description": "Operating system version."
1941
+ }
1942
+ }
1943
+ }
1944
+ ],
1945
+ "examples": [
1946
+ {
1947
+ "$comment": "Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix.",
1948
+ "type": "host",
1949
+ "name": "web-server-prod-01",
1950
+ "componentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
1951
+ "hostname": "web01",
1952
+ "fqdn": "web01.prod.example.com",
1953
+ "domain": "CORP",
1954
+ "ipAddress": "10.0.1.50",
1955
+ "osName": "Ubuntu",
1956
+ "osVersion": "22.04 LTS",
1957
+ "externalIds": {
1958
+ "cmdb": "ASSET-12345",
1959
+ "aws": "i-0abc123def456789"
1960
+ }
1961
+ },
1962
+ {
1963
+ "$comment": "Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
1964
+ "type": "host",
1965
+ "name": "kiosk-lab-07",
1966
+ "hostname": "kiosk-lab-07",
1967
+ "fqdn": "kiosk-lab-07.lab.example.com",
1968
+ "ipAddress": "192.168.4.7",
1969
+ "osName": "Windows",
1970
+ "osVersion": "11 23H2"
1971
+ }
1972
+ ],
1973
+ "description": "A physical or virtual server, workstation, or network device.",
1974
+ "title": "Host Component"
1975
+ },
1976
+ "Container_Image_Component": {
1977
+ "allOf": [
1978
+ {
1979
+ "$ref": "#/$defs/Base_Component"
1980
+ },
1981
+ {
1982
+ "type": "object",
1983
+ "properties": {
1984
+ "type": {
1985
+ "const": "containerImage"
1986
+ },
1987
+ "imageId": {
1988
+ "type": "string",
1989
+ "description": "Container image ID."
1990
+ },
1991
+ "registry": {
1992
+ "type": "string",
1993
+ "description": "Container registry. Example: 'docker.io'."
1994
+ },
1995
+ "repository": {
1996
+ "type": "string",
1997
+ "description": "Repository name. Example: 'library/nginx'."
1998
+ },
1999
+ "tag": {
2000
+ "type": "string",
2001
+ "description": "Image tag. Example: '1.25'."
2002
+ }
2003
+ }
2004
+ }
2005
+ ],
2006
+ "examples": [
2007
+ {
2008
+ "type": "containerImage",
2009
+ "name": "nginx",
2010
+ "registry": "docker.io",
2011
+ "repository": "library/nginx",
2012
+ "tag": "1.25-alpine",
2013
+ "integrity": [
2014
+ {
2015
+ "algorithm": "sha256",
2016
+ "value": "a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d"
2017
+ }
2018
+ ]
2019
+ }
2020
+ ],
2021
+ "description": "A static container image (not running). Image integrity — formerly the 'digest' field — is expressed via the shared Base_Component.integrity array.",
2022
+ "title": "Container Image Component"
2023
+ },
2024
+ "Container_Instance_Component": {
2025
+ "allOf": [
2026
+ {
2027
+ "$ref": "#/$defs/Base_Component"
2028
+ },
2029
+ {
2030
+ "type": "object",
2031
+ "properties": {
2032
+ "type": {
2033
+ "const": "containerInstance"
2034
+ },
2035
+ "containerId": {
2036
+ "type": "string",
2037
+ "description": "Running container ID."
2038
+ },
2039
+ "image": {
2040
+ "type": "string",
2041
+ "description": "Image the container was started from."
2042
+ },
2043
+ "runtime": {
2044
+ "type": "string",
2045
+ "description": "Container runtime. Example: 'docker', 'containerd', 'cri-o'."
2046
+ }
2047
+ }
2048
+ }
2049
+ ],
2050
+ "description": "A running container instance.",
2051
+ "title": "Container Instance Component"
2052
+ },
2053
+ "Container_Platform_Component": {
2054
+ "allOf": [
2055
+ {
2056
+ "$ref": "#/$defs/Base_Component"
2057
+ },
2058
+ {
2059
+ "type": "object",
2060
+ "properties": {
2061
+ "type": {
2062
+ "const": "containerPlatform"
2063
+ },
2064
+ "platformType": {
2065
+ "type": "string",
2066
+ "description": "Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'."
2067
+ },
2068
+ "clusterName": {
2069
+ "type": "string",
2070
+ "description": "Cluster name."
2071
+ },
2072
+ "namespace": {
2073
+ "type": "string",
2074
+ "description": "Namespace within the cluster, if applicable."
2075
+ },
2076
+ "version": {
2077
+ "type": "string",
2078
+ "description": "Platform version."
2079
+ }
2080
+ }
2081
+ }
2082
+ ],
2083
+ "description": "A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).",
2084
+ "title": "Container Platform Component"
2085
+ },
2086
+ "Cloud_Account_Component": {
2087
+ "allOf": [
2088
+ {
2089
+ "$ref": "#/$defs/Base_Component"
2090
+ },
2091
+ {
2092
+ "type": "object",
2093
+ "properties": {
2094
+ "type": {
2095
+ "const": "cloudAccount"
2096
+ },
2097
+ "provider": {
2098
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Cloud_Provider",
2099
+ "description": "Cloud provider."
2100
+ },
2101
+ "accountId": {
2102
+ "type": "string",
2103
+ "description": "Cloud account identifier."
2104
+ },
2105
+ "region": {
2106
+ "type": "string",
2107
+ "description": "Cloud region, if applicable."
2108
+ }
2109
+ }
2110
+ }
2111
+ ],
2112
+ "examples": [
2113
+ {
2114
+ "type": "cloudAccount",
2115
+ "name": "Production AWS Account",
2116
+ "componentId": "f1e2d3c4-b5a6-4978-8069-1a2b3c4d5e6f",
2117
+ "provider": "aws",
2118
+ "accountId": "123456789012",
2119
+ "region": "us-east-1"
2120
+ }
2121
+ ],
2122
+ "description": "A cloud provider account (AWS account, Azure subscription, GCP project).",
2123
+ "title": "Cloud Account Component"
2124
+ },
2125
+ "Cloud_Resource_Component": {
2126
+ "allOf": [
2127
+ {
2128
+ "$ref": "#/$defs/Base_Component"
2129
+ },
2130
+ {
2131
+ "type": "object",
2132
+ "properties": {
2133
+ "type": {
2134
+ "const": "cloudResource"
2135
+ },
2136
+ "provider": {
2137
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Cloud_Provider",
2138
+ "description": "Cloud provider."
2139
+ },
2140
+ "resourceType": {
2141
+ "type": "string",
2142
+ "description": "Type of cloud resource. Example: 'ec2:instance', 's3:bucket'."
2143
+ },
2144
+ "resourceId": {
2145
+ "type": "string",
2146
+ "description": "Provider-specific resource identifier."
2147
+ },
2148
+ "arn": {
2149
+ "type": "string",
2150
+ "description": "Amazon Resource Name (AWS only)."
2151
+ },
2152
+ "region": {
2153
+ "type": "string",
2154
+ "description": "Cloud region where the resource resides."
2155
+ }
2156
+ }
2157
+ }
2158
+ ],
2159
+ "description": "A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).",
2160
+ "title": "Cloud Resource Component"
2161
+ },
2162
+ "Repository_Component": {
2163
+ "allOf": [
2164
+ {
2165
+ "$ref": "#/$defs/Base_Component"
2166
+ },
2167
+ {
2168
+ "type": "object",
2169
+ "properties": {
2170
+ "type": {
2171
+ "const": "repository"
2172
+ },
2173
+ "url": {
2174
+ "type": "string",
2175
+ "format": "uri",
2176
+ "description": "Repository URL."
2177
+ },
2178
+ "branch": {
2179
+ "type": "string",
2180
+ "description": "Branch that was scanned."
2181
+ },
2182
+ "commit": {
2183
+ "type": "string",
2184
+ "description": "Commit SHA that was scanned."
2185
+ }
2186
+ }
2187
+ }
2188
+ ],
2189
+ "description": "A code repository (for SAST tools).",
2190
+ "title": "Repository Component"
2191
+ },
2192
+ "Application_Component": {
2193
+ "allOf": [
2194
+ {
2195
+ "$ref": "#/$defs/Base_Component"
2196
+ },
2197
+ {
2198
+ "type": "object",
2199
+ "properties": {
2200
+ "type": {
2201
+ "const": "application"
2202
+ },
2203
+ "url": {
2204
+ "type": "string",
2205
+ "format": "uri",
2206
+ "description": "Application URL (for DAST tools)."
2207
+ },
2208
+ "version": {
2209
+ "type": "string",
2210
+ "description": "Application version."
2211
+ },
2212
+ "environment": {
2213
+ "type": "string",
2214
+ "description": "Environment. Example: 'production', 'staging', 'development'."
2215
+ }
2216
+ }
2217
+ }
2218
+ ],
2219
+ "description": "A running application or API (for DAST tools).",
2220
+ "title": "Application Component"
2221
+ },
2222
+ "Artifact_Component": {
2223
+ "allOf": [
2224
+ {
2225
+ "$ref": "#/$defs/Base_Component"
2226
+ },
2227
+ {
2228
+ "type": "object",
2229
+ "properties": {
2230
+ "type": {
2231
+ "const": "artifact"
2232
+ },
2233
+ "packageManager": {
2234
+ "type": "string",
2235
+ "description": "Package manager. Example: 'npm', 'maven', 'pip', 'nuget'."
2236
+ },
2237
+ "packageName": {
2238
+ "type": "string",
2239
+ "description": "Package name."
2240
+ },
2241
+ "version": {
2242
+ "type": "string",
2243
+ "description": "Package version."
2244
+ }
2245
+ }
2246
+ }
2247
+ ],
2248
+ "examples": [
2249
+ {
2250
+ "type": "artifact",
2251
+ "name": "express",
2252
+ "packageManager": "npm",
2253
+ "packageName": "express",
2254
+ "version": "4.18.2",
2255
+ "integrity": [
2256
+ {
2257
+ "algorithm": "sha512",
2258
+ "value": "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
2259
+ }
2260
+ ]
2261
+ }
2262
+ ],
2263
+ "description": "A software artifact or dependency (for SCA tools). Package integrity — formerly the 'checksum' field — is expressed via the shared Base_Component.integrity array.",
2264
+ "title": "Artifact Component"
2265
+ },
2266
+ "Network_Component": {
2267
+ "allOf": [
2268
+ {
2269
+ "$ref": "#/$defs/Base_Component"
2270
+ },
2271
+ {
2272
+ "type": "object",
2273
+ "properties": {
2274
+ "type": {
2275
+ "const": "network"
2276
+ },
2277
+ "cidr": {
2278
+ "type": "string",
2279
+ "description": "Network CIDR block."
2280
+ },
2281
+ "gateway": {
2282
+ "type": "string",
2283
+ "description": "Network gateway address."
2284
+ }
2285
+ }
2286
+ }
2287
+ ],
2288
+ "description": "A network segment or network device.",
2289
+ "title": "Network Component"
2290
+ },
2291
+ "Database_Component": {
2292
+ "allOf": [
2293
+ {
2294
+ "$ref": "#/$defs/Base_Component"
2295
+ },
2296
+ {
2297
+ "type": "object",
2298
+ "properties": {
2299
+ "type": {
2300
+ "const": "database"
2301
+ },
2302
+ "engine": {
2303
+ "type": "string",
2304
+ "description": "Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'."
2305
+ },
2306
+ "version": {
2307
+ "type": "string",
2308
+ "description": "Database version."
2309
+ },
2310
+ "host": {
2311
+ "type": "string",
2312
+ "description": "Database host."
2313
+ },
2314
+ "port": {
2315
+ "type": "integer",
2316
+ "minimum": 1,
2317
+ "maximum": 65535,
2318
+ "description": "Database port."
2319
+ }
2320
+ }
2321
+ }
2322
+ ],
2323
+ "description": "A database instance.",
2324
+ "title": "Database Component"
2325
+ },
2326
+ "AI_Model_Component": {
2327
+ "allOf": [
2328
+ {
2329
+ "$ref": "#/$defs/Base_Component"
2330
+ },
2331
+ {
2332
+ "type": "object",
2333
+ "properties": {
2334
+ "type": {
2335
+ "const": "aiModel"
2336
+ },
2337
+ "modelId": {
2338
+ "type": "string",
2339
+ "description": "Provider/registry identifier for the model. Examples: a Hugging Face repo id ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model BOM(s) and to lineage references from other models."
2340
+ },
2341
+ "version": {
2342
+ "type": "string",
2343
+ "description": "Model version, revision, or checkpoint tag."
2344
+ }
2345
+ }
2346
+ }
2347
+ ],
2348
+ "examples": [
2349
+ {
2350
+ "type": "aiModel",
2351
+ "name": "Llama-2-7b-chat (finetuned)",
2352
+ "componentId": "b7c8d9e0-1a2b-4c3d-8e4f-5a6b7c8d9e0f",
2353
+ "modelId": "acme/llama-2-7b-chat-support",
2354
+ "version": "1.2.0",
2355
+ "integrity": [
2356
+ {
2357
+ "algorithm": "sha256",
2358
+ "value": "d1f2e3a4b5c6978869504132a1b2c3d4e5f6071829304152637485960a1b2c3d"
2359
+ }
2360
+ ],
2361
+ "boms": [
2362
+ {
2363
+ "bomType": "ai-model",
2364
+ "format": "cyclonedx-ml",
2365
+ "model": {
2366
+ "modelArchitecture": "transformer",
2367
+ "parameterCount": 6738415616,
2368
+ "serializationFormat": "safetensors",
2369
+ "adaptationType": "finetune",
2370
+ "baseModelRef": "meta-llama/Llama-2-7b-hf"
2371
+ }
2372
+ }
2373
+ ]
2374
+ }
2375
+ ],
2376
+ "description": "A thin AI-model component: identity and correlation only (parallel to Host_Component's fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage — lives in an attached ai-model BOM (boms[]), never on the component itself.",
2377
+ "title": "AI Model Component"
2378
+ },
2379
+ "Dataset_Component": {
2380
+ "allOf": [
2381
+ {
2382
+ "$ref": "#/$defs/Base_Component"
2207
2383
  },
2208
2384
  {
2209
- "$comment": "v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
2210
- "id": "SV-999999",
2211
- "title": "Example STIG rule pending automation",
2212
- "impact": 0.3,
2213
- "tags": {
2214
- "stig_id": "SV-999999"
2215
- },
2216
- "descriptions": [
2217
- {
2218
- "label": "default",
2219
- "data": "Example requirement that is intended to be automated but currently lacks a fix block."
2385
+ "type": "object",
2386
+ "properties": {
2387
+ "type": {
2388
+ "const": "dataset"
2389
+ },
2390
+ "datasetId": {
2391
+ "type": "string",
2392
+ "description": "Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to its dataset BOM(s) and to datasetRefs from ai-model components."
2220
2393
  },
2394
+ "version": {
2395
+ "type": "string",
2396
+ "description": "Dataset version, release identifier, or — for highly dynamic datasets — a timestamped release marker."
2397
+ }
2398
+ }
2399
+ }
2400
+ ],
2401
+ "examples": [
2402
+ {
2403
+ "type": "dataset",
2404
+ "name": "UltraChat-200k (filtered)",
2405
+ "componentId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
2406
+ "datasetId": "acme/ultrachat-200k-filtered",
2407
+ "version": "2026-06-01",
2408
+ "integrity": [
2221
2409
  {
2222
- "label": "check",
2223
- "data": "Manual review of system configuration is required."
2410
+ "algorithm": "sha256",
2411
+ "value": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
2224
2412
  }
2225
2413
  ],
2226
- "verificationMethod": "manual-pending-automation",
2227
- "applicability": "advisory"
2414
+ "boms": [
2415
+ {
2416
+ "bomType": "dataset",
2417
+ "format": "croissant",
2418
+ "dataset": {
2419
+ "recordCount": 180000,
2420
+ "datasetFormat": "parquet",
2421
+ "dataClassification": "public",
2422
+ "baseDatasetRefs": [
2423
+ "HuggingFaceH4/ultrachat_200k"
2424
+ ],
2425
+ "derivation": "filtered"
2426
+ }
2427
+ }
2428
+ ]
2228
2429
  }
2229
2430
  ],
2230
- "description": "Core requirement fields shared between baseline requirements and evaluated requirements. Contains the fundamental requirement definition without assessment results.",
2231
- "title": "Requirement Core"
2232
- },
2233
- "Verification_Method_Enum": {
2234
- "type": "string",
2235
- "enum": [
2236
- "automated",
2237
- "manual-by-design",
2238
- "manual-pending-automation",
2239
- "hybrid"
2240
- ],
2241
- "description": "How a requirement is intended to be verified. Disambiguates the two cases that null 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to disambiguate from the unrelated Verification_Method DID-context struct.",
2242
- "title": "Verification Method Enum"
2243
- },
2244
- "Severity": {
2245
- "type": "string",
2246
- "enum": [
2247
- "critical",
2248
- "high",
2249
- "medium",
2250
- "low",
2251
- "informational"
2252
- ],
2253
- "description": "Severity rating for a requirement. Typically derived from the numeric impact score.",
2254
- "title": "Severity"
2255
- },
2256
- "Cloud_Provider": {
2257
- "type": [
2258
- "string",
2259
- "null"
2260
- ],
2261
- "enum": [
2262
- "aws",
2263
- "azure",
2264
- "gcp",
2265
- "oci",
2266
- "other",
2267
- null
2268
- ],
2269
- "description": "Cloud service provider identifier.",
2270
- "title": "Cloud Provider"
2431
+ "description": "A thin dataset component: identity and correlation only, symmetric with AI_Model_Component. All dataset detail — record count, format, classification, lineage — lives in an attached dataset BOM (boms[]), never on the component itself.",
2432
+ "title": "Dataset Component"
2271
2433
  }
2272
2434
  }
2273
2435
  },
2274
- "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0": {
2436
+ "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0": {
2275
2437
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2276
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.4.0",
2438
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.5.0",
2277
2439
  "title": "HDF BOM Primitives",
2278
2440
  "description": "Generalized Bill-of-Materials / manifest representation. One extensible Bom shape, discriminated by bomType, carries any manifest kind (SBOM, AI model/dataset, and reserved future kinds) either by passthrough (opaque ref/embed of the native document) or normalized (converted into HDF's queryable shape). Subject identity (name, version, componentId) is inherited from the host component or system — the BOM never re-owns it. See ADR-0001.",
2279
2441
  "$defs": {
@@ -2329,7 +2491,7 @@
2329
2491
  "hashes": {
2330
2492
  "type": "array",
2331
2493
  "items": {
2332
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum"
2494
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
2333
2495
  },
2334
2496
  "description": "Integrity of the carried BOM *document* itself (the referenced/embedded manifest file), NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model weights, dataset archive) is a component-level concern, not carried here. Subject identity is inherited from the host component/system; per-node identity lives in the type-extension."
2335
2497
  },
@@ -2744,9 +2906,9 @@
2744
2906
  }
2745
2907
  }
2746
2908
  },
2747
- "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0": {
2909
+ "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0": {
2748
2910
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2749
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.4.0",
2911
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.5.0",
2750
2912
  "title": "HDF System Primitives",
2751
2913
  "description": "Types for describing system architecture, authorization boundaries, and components.",
2752
2914
  "$defs": {
@@ -2797,7 +2959,7 @@
2797
2959
  "description": "Rationale for why this override is needed."
2798
2960
  },
2799
2961
  "approvedBy": {
2800
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
2962
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
2801
2963
  "description": "Identity of the person or system that approved this override."
2802
2964
  }
2803
2965
  },
@@ -2879,9 +3041,9 @@
2879
3041
  }
2880
3042
  }
2881
3043
  },
2882
- "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.4.0": {
3044
+ "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0": {
2883
3045
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2884
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.4.0",
3046
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.5.0",
2885
3047
  "title": "HDF Statistics Primitives",
2886
3048
  "description": "Statistics types for tracking assessment run metrics.",
2887
3049
  "$defs": {
@@ -2950,9 +3112,9 @@
2950
3112
  }
2951
3113
  }
2952
3114
  },
2953
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0": {
3115
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
2954
3116
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2955
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0",
3117
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
2956
3118
  "title": "HDF Extension Primitives",
2957
3119
  "description": "Extension types for waivers, attestations, generators, and integrity.",
2958
3120
  "$defs": {
@@ -2979,16 +3141,23 @@
2979
3141
  }
2980
3142
  ],
2981
3143
  "properties": {
3144
+ "externalReferences": {
3145
+ "type": "array",
3146
+ "items": {
3147
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
3148
+ },
3149
+ "description": "Optional references to the external artifacts behind this override (e.g. the STIX bundle/object or CTI feed motivating an E:A riskAdjustment). Inert context distinct from `evidence`; see External_Reference. Symmetric with Standalone_Override.externalReferences for the inline (results-embedded) override carrier."
3150
+ },
2982
3151
  "type": {
2983
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Override_Type",
3152
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
2984
3153
  "description": "The type of override applied to this requirement."
2985
3154
  },
2986
3155
  "status": {
2987
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
3156
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
2988
3157
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
2989
3158
  },
2990
3159
  "impact": {
2991
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Impact_Override",
3160
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
2992
3161
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
2993
3162
  },
2994
3163
  "reason": {
@@ -2996,7 +3165,7 @@
2996
3165
  "description": "Explanation for why this override was applied."
2997
3166
  },
2998
3167
  "appliedBy": {
2999
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
3168
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3000
3169
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
3001
3170
  },
3002
3171
  "appliedAt": {
@@ -3010,27 +3179,27 @@
3010
3179
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
3011
3180
  },
3012
3181
  "signature": {
3013
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
3182
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3014
3183
  "description": "Optional digital signature for enhanced trust and non-repudiation. Supports hardware security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing methods."
3015
3184
  },
3016
3185
  "evidence": {
3017
3186
  "type": "array",
3018
3187
  "items": {
3019
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
3188
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3020
3189
  },
3021
3190
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
3022
3191
  },
3023
3192
  "previousChecksum": {
3024
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
3193
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3025
3194
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
3026
3195
  },
3027
3196
  "cvss": {
3028
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
3197
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
3029
3198
  "$comment": "When present alongside impact.value on a riskAdjustment override, impact.value should be approximately cvss.computedScore / 10.0. Soft consistency rule — validators may warn but should not error. The cvss block makes Environmental/Threat enrichment auditable.",
3030
3199
  "description": "Structured CVSS scoring data backing this override. Captures the rubric (which Environmental/Threat metrics the consumer modified, the recomputed score) used to justify a riskAdjustment. For other override types this is optional context."
3031
3200
  },
3032
3201
  "justification": {
3033
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Justification",
3202
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
3034
3203
  "description": "Structured controlled-vocabulary classification for why this override applies. Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive and attestation overrides where the structured category enables filtering and lossless round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the precedent vocabulary and rationale."
3035
3204
  }
3036
3205
  },
@@ -3059,6 +3228,34 @@
3059
3228
  "appliedAt": "2026-04-14T10:00:00Z",
3060
3229
  "expiresAt": "2026-10-14T00:00:00Z"
3061
3230
  },
3231
+ {
3232
+ "$comment": "Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute.",
3233
+ "type": "riskAdjustment",
3234
+ "impact": {
3235
+ "value": 0.9
3236
+ },
3237
+ "reason": "CVE-2021-44228 actively exploited in the wild per STIX threat intelligence",
3238
+ "appliedBy": {
3239
+ "identifier": "secops@agency.gov",
3240
+ "type": "email"
3241
+ },
3242
+ "appliedAt": "2026-07-27T00:00:00Z",
3243
+ "expiresAt": "2026-10-25T00:00:00Z",
3244
+ "externalReferences": [
3245
+ {
3246
+ "sourceName": "stix",
3247
+ "externalId": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
3248
+ "kind": "threat-intel",
3249
+ "rel": "evidence",
3250
+ "document": {
3251
+ "type": "sighting",
3252
+ "spec_version": "2.1",
3253
+ "id": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
3254
+ "sighting_of_ref": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001"
3255
+ }
3256
+ }
3257
+ ]
3258
+ },
3062
3259
  {
3063
3260
  "type": "falsePositive",
3064
3261
  "status": "passed",
@@ -3118,7 +3315,8 @@
3118
3315
  "type",
3119
3316
  "explanation",
3120
3317
  "appliedBy",
3121
- "appliedAt"
3318
+ "appliedAt",
3319
+ "expiresAt"
3122
3320
  ],
3123
3321
  "properties": {
3124
3322
  "type": {
@@ -3137,7 +3335,7 @@
3137
3335
  "description": "Detailed explanation of the plan, including what actions will be taken."
3138
3336
  },
3139
3337
  "appliedBy": {
3140
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
3338
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3141
3339
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
3142
3340
  },
3143
3341
  "appliedAt": {
@@ -3148,28 +3346,28 @@
3148
3346
  "expiresAt": {
3149
3347
  "type": "string",
3150
3348
  "format": "date-time",
3151
- "description": "Optional expiration date for this POA&M requiring review/renewal. ISO 8601 format."
3349
+ "description": "Required deadline for this POA&M. A POA&M is a time-boxed acceptance of an open finding; without a deadline it lets a failing requirement duck remediation indefinitely. Source a real date (e.g. a remediation target or vendor-fix date) — never a wall-clock default. ISO 8601 format."
3152
3350
  },
3153
3351
  "milestones": {
3154
3352
  "type": "array",
3155
3353
  "items": {
3156
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
3354
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
3157
3355
  },
3158
3356
  "description": "Optional array of milestones tracking progress toward completion."
3159
3357
  },
3160
3358
  "signature": {
3161
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
3359
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3162
3360
  "description": "Optional digital signature for enhanced trust and non-repudiation."
3163
3361
  },
3164
3362
  "evidence": {
3165
3363
  "type": "array",
3166
3364
  "items": {
3167
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
3365
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3168
3366
  },
3169
3367
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
3170
3368
  },
3171
3369
  "previousChecksum": {
3172
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
3370
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3173
3371
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
3174
3372
  }
3175
3373
  },
@@ -3182,6 +3380,7 @@
3182
3380
  "type": "email"
3183
3381
  },
3184
3382
  "appliedAt": "2025-12-01T09:00:00Z",
3383
+ "expiresAt": "2099-12-31T00:00:00Z",
3185
3384
  "milestones": [
3186
3385
  {
3187
3386
  "description": "Update base Docker image to use OpenSSL 3.0.x",
@@ -3214,7 +3413,7 @@
3214
3413
  "description": "Automated POA&M creation from vulnerability scan"
3215
3414
  },
3216
3415
  "appliedAt": "2025-11-28T14:00:00Z",
3217
- "expiresAt": "2026-02-28T00:00:00Z",
3416
+ "expiresAt": "2099-12-31T00:00:00Z",
3218
3417
  "milestones": [
3219
3418
  {
3220
3419
  "description": "Configure firewall rules to restrict database access to management VLAN",
@@ -3249,7 +3448,7 @@
3249
3448
  "type": "email"
3250
3449
  },
3251
3450
  "appliedAt": "2025-12-05T10:00:00Z",
3252
- "expiresAt": "2026-04-01T00:00:00Z",
3451
+ "expiresAt": "2099-12-31T00:00:00Z",
3253
3452
  "milestones": [
3254
3453
  {
3255
3454
  "description": "Complete migration to replacement system",
@@ -3301,7 +3500,8 @@
3301
3500
  },
3302
3501
  "format": {
3303
3502
  "type": "string",
3304
- "description": "The file format, if it is a recognized named format shared by multiple tools. Examples: 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the format (Nessus XML, gosec JSON)."
3503
+ "description": "The named format of the source data, when it follows a recognized format specification with its own identity: an interchange format emitted by many tools ('SARIF', 'XCCDF', 'OSCAL') or one of several named output formats a single tool produces ('FVDL', 'exec-json', 'FPF'). Never a serialization structure — 'JSON', 'XML', and 'CSV' are encodings, not formats. Omit for a tool's native output: an absent format means the tool's own shape, and data arriving as a named format is converted by that format's converter, which sets this field alongside the producing tool's name.",
3504
+ "$comment": "Format-not-serialization rule decided 2026-08-01; bare JSON/XML/CSV labels were swept from the converters at the same time."
3305
3505
  }
3306
3506
  },
3307
3507
  "description": "The security tool that produced the assessment data represented in this HDF file. Aligns with SARIF, OSCAL, and CycloneDX terminology.",
@@ -3320,7 +3520,7 @@
3320
3520
  },
3321
3521
  "properties": {
3322
3522
  "algorithm": {
3323
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Hash_Algorithm",
3523
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
3324
3524
  "description": "The hash algorithm used for the checksum."
3325
3525
  },
3326
3526
  "checksum": {
@@ -3353,9 +3553,9 @@
3353
3553
  }
3354
3554
  }
3355
3555
  },
3356
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0": {
3556
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
3357
3557
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3358
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0",
3558
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
3359
3559
  "title": "HDF Amendment Primitives",
3360
3560
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
3361
3561
  "$defs": {
@@ -3463,6 +3663,13 @@
3463
3663
  ]
3464
3664
  },
3465
3665
  "properties": {
3666
+ "externalReferences": {
3667
+ "type": "array",
3668
+ "items": {
3669
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
3670
+ },
3671
+ "description": "Optional references to the external artifacts behind this override (e.g. the STIX bundle/object, advisory, or CTI feed that motivated it). Inert context distinct from `evidence`; see External_Reference."
3672
+ },
3466
3673
  "type": {
3467
3674
  "$ref": "#/$defs/Override_Type",
3468
3675
  "description": "The type of amendment."
@@ -3476,7 +3683,7 @@
3476
3683
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
3477
3684
  },
3478
3685
  "status": {
3479
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
3686
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
3480
3687
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
3481
3688
  },
3482
3689
  "impact": {
@@ -3488,7 +3695,7 @@
3488
3695
  "description": "Justification for this amendment."
3489
3696
  },
3490
3697
  "appliedBy": {
3491
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
3698
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
3492
3699
  "description": "Identity of who applied this amendment."
3493
3700
  },
3494
3701
  "appliedAt": {
@@ -3504,20 +3711,20 @@
3504
3711
  "evidence": {
3505
3712
  "type": "array",
3506
3713
  "items": {
3507
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
3714
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
3508
3715
  },
3509
3716
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
3510
3717
  },
3511
3718
  "signature": {
3512
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
3719
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
3513
3720
  "description": "Digital signature for non-repudiation."
3514
3721
  },
3515
3722
  "previousChecksum": {
3516
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
3723
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
3517
3724
  "description": "Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null for the first amendment."
3518
3725
  },
3519
3726
  "cvss": {
3520
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
3727
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
3521
3728
  "$comment": "When present alongside impact.value on a riskAdjustment override, impact.value should be approximately cvss.computedScore / 10.0. Soft consistency rule — validators may warn but should not error. The cvss block makes Environmental/Threat enrichment auditable.",
3522
3729
  "description": "Structured CVSS scoring data backing this override. Captures the rubric (which Environmental/Threat metrics the consumer modified, the recomputed score) used to justify a riskAdjustment. For other override types this is optional context."
3523
3730
  },
@@ -3528,7 +3735,7 @@
3528
3735
  "milestones": {
3529
3736
  "type": "array",
3530
3737
  "items": {
3531
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
3738
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
3532
3739
  },
3533
3740
  "description": "Remediation milestones (primarily for POA&M type amendments)."
3534
3741
  },
@@ -3545,7 +3752,7 @@
3545
3752
  "affectedPackages": {
3546
3753
  "type": "array",
3547
3754
  "items": {
3548
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0#/$defs/Affected_Package"
3755
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
3549
3756
  },
3550
3757
  "description": "Software packages this amendment is scoped to, distinct from componentRef (which scopes to an HDF-internal Component by UUID). Use when the source amendment format references packages by purl/cpe/name+version — e.g., VEX `affects[]` / `products[]`, OSCAL POA&M `subjects[]`, FedRAMP component-aware amendments. Symmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same package vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when that is set)."
3551
3758
  }
@@ -3678,9 +3885,9 @@
3678
3885
  }
3679
3886
  }
3680
3887
  },
3681
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0": {
3888
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
3682
3889
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3683
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0",
3890
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
3684
3891
  "title": "HDF Result Primitives",
3685
3892
  "description": "Types for representing assessment results and statuses.",
3686
3893
  "$defs": {
@@ -3811,9 +4018,9 @@
3811
4018
  }
3812
4019
  }
3813
4020
  },
3814
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0": {
4021
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
3815
4022
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3816
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0",
4023
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
3817
4024
  "title": "HDF CVSS Primitives",
3818
4025
  "description": "Types for representing CVSS (Common Vulnerability Scoring System) data attached to assessment findings. Supports CVSS v2.0, v3.0, v3.1, and v4.0 metric groups (Base, Threat, Environmental, Supplemental).",
3819
4026
  "$defs": {
@@ -4015,9 +4222,9 @@
4015
4222
  }
4016
4223
  }
4017
4224
  },
4018
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0": {
4225
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
4019
4226
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4020
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0",
4227
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
4021
4228
  "title": "HDF Affected Package Primitives",
4022
4229
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
4023
4230
  "$defs": {
@@ -4130,9 +4337,9 @@
4130
4337
  }
4131
4338
  }
4132
4339
  },
4133
- "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.4.0": {
4340
+ "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0": {
4134
4341
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4135
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.4.0",
4342
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.5.0",
4136
4343
  "title": "HDF Runner Primitive",
4137
4344
  "description": "Information about the test execution environment where the security tool/scanner was executed.",
4138
4345
  "$defs": {
@@ -4176,7 +4383,7 @@
4176
4383
  "description": "The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'. Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier."
4177
4384
  },
4178
4385
  "operator": {
4179
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
4386
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
4180
4387
  "description": "The identity of the person or system responsible for executing the test. This could be a human auditor manually completing a checklist, an automated CI/CD system, or a security tool. Optional field to support both automated and manual HDF generation."
4181
4388
  }
4182
4389
  },
@@ -4225,9 +4432,237 @@
4225
4432
  }
4226
4433
  }
4227
4434
  },
4228
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.4.0": {
4435
+ "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0": {
4436
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4437
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.5.0",
4438
+ "title": "HDF Change Event Primitives",
4439
+ "description": "Shared building blocks for HDF change-event wire documents. The envelope is entity-agnostic: hdf-requirement-change-event composes it today, and any future sibling event type (e.g. component change events — hdf-comparison already models componentDiffs alongside requirementDiffs) reuses it verbatim.",
4440
+ "$defs": {
4441
+ "Change_Event_Envelope": {
4442
+ "type": "object",
4443
+ "required": [
4444
+ "eventId",
4445
+ "source",
4446
+ "sequence",
4447
+ "systemRef",
4448
+ "componentId",
4449
+ "timestamp",
4450
+ "priorChecksum"
4451
+ ],
4452
+ "properties": {
4453
+ "eventId": {
4454
+ "type": "string",
4455
+ "format": "uuid",
4456
+ "description": "Identity of this event occurrence, unique per source. (source, eventId) is the deduplication key: consumers may treat events with identical source and eventId as duplicates. UUIDv7 (time-ordered) is recommended but not required."
4457
+ },
4458
+ "source": {
4459
+ "type": "string",
4460
+ "format": "uri-reference",
4461
+ "description": "URI identifying the producer context that emitted this event (for example, a scanner instance and profile). eventId uniqueness and sequence numbering are scoped per source."
4462
+ },
4463
+ "sequence": {
4464
+ "type": "integer",
4465
+ "minimum": 0,
4466
+ "description": "Monotonically increasing sequence number per entity key. The ONLY ordering authority for folding: consumers keep the greatest sequence per key regardless of arrival order or timestamp. Deliberately per-entity-key (event-sourcing aggregate-version practice) rather than per-source."
4467
+ },
4468
+ "systemRef": {
4469
+ "type": "string",
4470
+ "format": "uri-reference",
4471
+ "description": "URI to the hdf-system document (authorization boundary) this event applies to. Resolves to the latest version of the evolving system document."
4472
+ },
4473
+ "componentId": {
4474
+ "type": "string",
4475
+ "format": "uuid",
4476
+ "description": "componentId of the system component this event concerns."
4477
+ },
4478
+ "timestamp": {
4479
+ "type": "string",
4480
+ "format": "date-time",
4481
+ "description": "Occurrence time of the observed change (RFC 3339, trimmed UTC). Display and audit metadata only — NEVER an ordering key; ordering is sequence's job."
4482
+ },
4483
+ "schemaRef": {
4484
+ "type": "string",
4485
+ "format": "uri",
4486
+ "description": "The versioned schema $id this event validates against, so events self-describe on heterogeneous streams. Recommended on every wire event."
4487
+ },
4488
+ "priorChecksum": {
4489
+ "oneOf": [
4490
+ {
4491
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum"
4492
+ },
4493
+ {
4494
+ "type": "null"
4495
+ }
4496
+ ],
4497
+ "description": "The effectiveChecksum of the entity state this event supersedes, forming a per-key hash chain: a mismatch or gap against stored state is detectable, letting a consumer mark the key unverified instead of serving stale posture. Null at chain start (no prior state, e.g. a new entity or the first event after a seed). The chain provides tamper/gap evidence given a trusted head; completeness is anchored out-of-band by periodic re-centering rescans."
4498
+ }
4499
+ },
4500
+ "examples": [
4501
+ {
4502
+ "$comment": "Steady-state envelope: mid-chain event from an InSpec producer. priorChecksum links to the previous effectiveChecksum for this key.",
4503
+ "eventId": "0190f6f2-1c4e-7c3a-9f2a-3b1d5e7a9c01",
4504
+ "source": "inspec://web01/rhel9-stig",
4505
+ "sequence": 412,
4506
+ "systemRef": "apptier.hdf-system.json",
4507
+ "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
4508
+ "timestamp": "2026-07-22T14:03:11Z",
4509
+ "schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.5.0",
4510
+ "priorChecksum": {
4511
+ "algorithm": "sha256",
4512
+ "value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
4513
+ }
4514
+ },
4515
+ {
4516
+ "$comment": "Chain-start envelope: first event for a key after seeding — priorChecksum is null (the CloudTrail null-previous-digest convention), sequence starts low.",
4517
+ "eventId": "0190f6f2-2a5b-7e4d-b1c8-4f2e6a8b0d12",
4518
+ "source": "inspec://web01/rhel9-stig",
4519
+ "sequence": 1,
4520
+ "systemRef": "apptier.hdf-system.json",
4521
+ "componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
4522
+ "timestamp": "2026-07-22T09:00:00Z",
4523
+ "priorChecksum": null
4524
+ }
4525
+ ],
4526
+ "description": "Entity-agnostic transport identity for a change event: dedup ((source, eventId)), ordering (per-key sequence), system anchor (systemRef + componentId), occurrence time, schema self-description, and the prior-state hash-chain link. Composed into each concrete event type via allOf; entity-specific keys and payload live on the event type.",
4527
+ "title": "Change Event Envelope"
4528
+ },
4529
+ "Event_Requirement_State": {
4530
+ "type": "string",
4531
+ "enum": [
4532
+ "new",
4533
+ "absent",
4534
+ "updated",
4535
+ "fixed",
4536
+ "regressed"
4537
+ ],
4538
+ "description": "The producer-computable subset of the comparison vocabulary's Requirement_State. Kept value-identical with the parent enum (test-enforced): the batch-only states (moved, split, merged) are outputs of cross-document identity resolution a per-key producer cannot compute. Declared as a distinct named type (rather than a $ref intersection) so generated Go/TS types keep stable, distinct enum names.",
4539
+ "title": "Event Requirement State"
4540
+ },
4541
+ "Event_Change_Reason": {
4542
+ "type": "string",
4543
+ "enum": [
4544
+ "resultChanged",
4545
+ "overrideAdded",
4546
+ "overrideExpired",
4547
+ "overrideRemoved",
4548
+ "overrideModified",
4549
+ "impactChanged",
4550
+ "configChanged"
4551
+ ],
4552
+ "description": "The producer-computable subset of the comparison vocabulary's Change_Reason, value-identical with the parent enum (test-enforced). Batch-only reasons (baselineUpgraded, controlMapped, scannerChanged, targetChanged, metadataChanged) require cross-corpus context and are excluded.",
4553
+ "title": "Event Change Reason"
4554
+ },
4555
+ "Effective_Projection": {
4556
+ "type": "object",
4557
+ "unevaluatedProperties": false,
4558
+ "required": [
4559
+ "effectiveStatus",
4560
+ "effectiveImpact"
4561
+ ],
4562
+ "properties": {
4563
+ "effectiveStatus": {
4564
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
4565
+ "description": "The resolved effective compliance status at this point in the chain."
4566
+ },
4567
+ "effectiveImpact": {
4568
+ "type": "number",
4569
+ "minimum": 0,
4570
+ "maximum": 1,
4571
+ "description": "The resolved effective impact score (0.0–1.0) at this point in the chain."
4572
+ }
4573
+ },
4574
+ "examples": [
4575
+ {
4576
+ "$comment": "Prior posture of a failing SSH-cipher control before remediation.",
4577
+ "effectiveStatus": "failed",
4578
+ "effectiveImpact": 0.5
4579
+ },
4580
+ {
4581
+ "$comment": "Prior posture of a control passing under a waiver (the projection carries the resolved status; the governing override type travels in the requirement payload, not here).",
4582
+ "effectiveStatus": "passed",
4583
+ "effectiveImpact": 0.5
4584
+ }
4585
+ ],
4586
+ "description": "The minimal resolved-posture projection — the same field set the per-requirement effectiveChecksum hashes (status and impact; the governing disposition is carried by the full requirement payload).",
4587
+ "title": "Effective Projection"
4588
+ },
4589
+ "Derivation": {
4590
+ "type": "object",
4591
+ "unevaluatedProperties": false,
4592
+ "required": [
4593
+ "seed",
4594
+ "source",
4595
+ "throughSequence",
4596
+ "eventsApplied",
4597
+ "asOf"
4598
+ ],
4599
+ "properties": {
4600
+ "seed": {
4601
+ "type": "object",
4602
+ "unevaluatedProperties": false,
4603
+ "required": [
4604
+ "uri",
4605
+ "checksum"
4606
+ ],
4607
+ "properties": {
4608
+ "uri": {
4609
+ "type": "string",
4610
+ "format": "uri-reference",
4611
+ "description": "URI to the seed snapshot document (relative path or absolute URL)."
4612
+ },
4613
+ "checksum": {
4614
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
4615
+ "description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
4616
+ }
4617
+ },
4618
+ "$comment": "Location + expected-hash reference (the SRI/OCI/SPDX pattern). Shares its core shape with hdf-evidence-package's Content_Reference and ADR-0006's proposed External_Reference; consolidation onto one reference primitive is tracked by bead hdf-libs-avp2.",
4619
+ "description": "The authoritative snapshot this document was reassembled from, pinned by content."
4620
+ },
4621
+ "source": {
4622
+ "type": "string",
4623
+ "format": "uri-reference",
4624
+ "description": "URI of the event-stream producer context whose events were applied (matches the events' envelope source)."
4625
+ },
4626
+ "throughSequence": {
4627
+ "type": "integer",
4628
+ "minimum": 0,
4629
+ "description": "The event watermark: the highest per-key sequence number applied. Downstream precedence rule: a full-scan document supersedes the reconciled view as of its scan time; between scans, the reconciled document with the highest throughSequence is the current posture."
4630
+ },
4631
+ "eventsApplied": {
4632
+ "type": "integer",
4633
+ "minimum": 0,
4634
+ "description": "Number of change events applied to the seed to produce this document."
4635
+ },
4636
+ "asOf": {
4637
+ "type": "string",
4638
+ "format": "date-time",
4639
+ "description": "The posture-as-of time of this reconciled view (RFC 3339, trimmed UTC) — the analog of PROV's generatedAtTime."
4640
+ }
4641
+ },
4642
+ "examples": [
4643
+ {
4644
+ "$comment": "A reconciled result set: reassembled from the pinned seed scan plus 3 change events through watermark 414. The document's generator names the reconciler, never the scanner.",
4645
+ "seed": {
4646
+ "uri": "apptier-seed-scan.hdf.json",
4647
+ "checksum": {
4648
+ "algorithm": "sha256",
4649
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
4650
+ }
4651
+ },
4652
+ "source": "inspec://web01/rhel9-stig",
4653
+ "throughSequence": 414,
4654
+ "eventsApplied": 3,
4655
+ "asOf": "2026-07-24T10:15:00Z"
4656
+ }
4657
+ ],
4658
+ "description": "Derived-document lineage for a reconciled result set (an hdf-results produced by applyChangeEvents rather than a scanner). Records exactly which seed and event horizon the document represents so it can never masquerade as primary scan evidence. Conceptually PROV qualified derivation: derived entity, used entity (seed), activity (event application), generation time (asOf).",
4659
+ "title": "Derivation"
4660
+ }
4661
+ }
4662
+ },
4663
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0": {
4229
4664
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4230
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.4.0",
4665
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0",
4231
4666
  "title": "HDF Parameter Primitives",
4232
4667
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
4233
4668
  "$defs": {
@@ -4358,9 +4793,9 @@
4358
4793
  }
4359
4794
  }
4360
4795
  },
4361
- "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.4.0": {
4796
+ "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0": {
4362
4797
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4363
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.4.0",
4798
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.5.0",
4364
4799
  "title": "HDF EPSS Primitive",
4365
4800
  "description": "Type for representing FIRST.org's Exploit Prediction Scoring System (EPSS) data for a vulnerability. EPSS estimates the probability that a CVE will be exploited in the wild in the next 30 days. See https://www.first.org/epss/ for the underlying model and methodology.",
4366
4801
  "$defs": {
@@ -4417,9 +4852,9 @@
4417
4852
  }
4418
4853
  }
4419
4854
  },
4420
- "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.4.0": {
4855
+ "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0": {
4421
4856
  "$schema": "https://json-schema.org/draft/2020-12/schema",
4422
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.4.0",
4857
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.5.0",
4423
4858
  "title": "HDF Kev Primitives",
4424
4859
  "description": "Types for representing CISA Known Exploited Vulnerabilities (KEV) catalog membership. The KEV catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog) flags CVEs that are confirmed actively exploited in the wild and drives federal patching urgency under CISA Binding Operational Directive 22-01.",
4425
4860
  "$defs": {