@mitre/hdf-schema 3.7.2 → 3.8.0-next.42533588944.1
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.
- package/README.md +9 -0
- package/dist/go/hdf.go +1470 -1276
- package/dist/helpers.d.ts +7 -5
- package/dist/helpers.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +28 -28
- package/dist/schemas/hdf-amendments.schema.json +562 -112
- package/dist/schemas/hdf-baseline.schema.json +570 -118
- package/dist/schemas/hdf-comparison.schema.json +997 -242
- package/dist/schemas/hdf-evidence-package.schema.json +566 -115
- package/dist/schemas/hdf-plan.schema.json +568 -118
- package/dist/schemas/hdf-requirement-change-event.schema.json +658 -211
- package/dist/schemas/hdf-results.schema.json +644 -197
- package/dist/schemas/hdf-system.schema.json +604 -147
- package/dist/ts/hdf.d.ts +284 -56
- package/dist/ts/hdf.js +24 -9
- package/dist/ts/hdf.ts +285 -50
- package/package.json +3 -3
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
4
4
|
"title": "HDF Requirement Change Event",
|
|
5
5
|
"description": "A single continuous-monitoring wire event: one requirement's effective posture changed on one system component.\n\nThe streaming increment of a systemDrift hdf-comparison — events fold into comparisons and reassemble into hdf-results, they never mutate documents in place.\n\nOne event per wire document (NDJSON-friendly).\n\nThe envelope (identity, ordering, hash chain) is the shared Change_Event_Envelope primitive; the payload carries the producer-computable change state, a thin before projection, and the full after requirement (the evidence a responder opens the event for).\n\nDesign: ADR-0005.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"unevaluatedProperties": false,
|
|
8
8
|
"allOf": [
|
|
9
9
|
{
|
|
10
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
10
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Change_Event_Envelope"
|
|
11
11
|
},
|
|
12
12
|
{
|
|
13
13
|
"if": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"else": {
|
|
31
31
|
"properties": {
|
|
32
32
|
"after": {
|
|
33
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
33
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"else": {
|
|
57
57
|
"properties": {
|
|
58
58
|
"before": {
|
|
59
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
59
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Effective_Projection"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -74,20 +74,20 @@
|
|
|
74
74
|
"description": "Canonical requirement identifier — the same identity as Requirement_Diff.id and the requirement's id in hdf-results. Together with the envelope's (systemRef, componentId) this forms the durable entity key. A requirement renumbering is emitted as absent + new under the two keys, never an in-place key change; batch comparison reconciles renames via its oldId/newId matching."
|
|
75
75
|
},
|
|
76
76
|
"state": {
|
|
77
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
77
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Event_Requirement_State",
|
|
78
78
|
"description": "The producer-computable subset of Requirement_State: new | absent | updated | fixed | regressed. fixed and regressed carry the direction SARIF's baselineState lacks; project down to SARIF's closed 4 values for external interop."
|
|
79
79
|
},
|
|
80
80
|
"changeReasons": {
|
|
81
81
|
"type": "array",
|
|
82
82
|
"items": {
|
|
83
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
83
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Event_Change_Reason"
|
|
84
84
|
},
|
|
85
85
|
"description": "Why the state changed. An overrideExpired flip is a different triage than resultChanged: the control did not get worse, a waiver lapsed."
|
|
86
86
|
},
|
|
87
87
|
"before": {
|
|
88
88
|
"oneOf": [
|
|
89
89
|
{
|
|
90
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
90
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Effective_Projection"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"type": "null"
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"after": {
|
|
99
99
|
"oneOf": [
|
|
100
100
|
{
|
|
101
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
101
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"type": "null"
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"systemRef": "apptier.hdf-system.json",
|
|
117
117
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
118
118
|
"timestamp": "2026-07-22T14:03:11Z",
|
|
119
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
119
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
120
120
|
"priorChecksum": {
|
|
121
121
|
"algorithm": "sha256",
|
|
122
122
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"systemRef": "apptier.hdf-system.json",
|
|
167
167
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
168
168
|
"timestamp": "2026-07-21T00:00:05Z",
|
|
169
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
169
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
170
170
|
"priorChecksum": {
|
|
171
171
|
"algorithm": "sha256",
|
|
172
172
|
"value": "d11c074ab9131807816013a71d986f1ceb2e5871a8a01dee4043391b7a6bf37b"
|
|
@@ -230,7 +230,7 @@
|
|
|
230
230
|
"systemRef": "apptier.hdf-system.json",
|
|
231
231
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
232
232
|
"timestamp": "2026-07-22T14:03:12Z",
|
|
233
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
233
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
234
234
|
"priorChecksum": null,
|
|
235
235
|
"requirementId": "RHEL-09-671010",
|
|
236
236
|
"state": "new",
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
"systemRef": "apptier.hdf-system.json",
|
|
272
272
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
273
273
|
"timestamp": "2026-07-23T08:00:00Z",
|
|
274
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
274
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
275
275
|
"priorChecksum": {
|
|
276
276
|
"algorithm": "sha256",
|
|
277
277
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
"systemRef": "apptier.hdf-system.json",
|
|
292
292
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
293
293
|
"timestamp": "2026-07-24T10:15:00Z",
|
|
294
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
294
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
295
295
|
"priorChecksum": {
|
|
296
296
|
"algorithm": "sha256",
|
|
297
297
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -354,9 +354,9 @@
|
|
|
354
354
|
}
|
|
355
355
|
],
|
|
356
356
|
"$defs": {
|
|
357
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
357
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0": {
|
|
358
358
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
359
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
359
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0",
|
|
360
360
|
"title": "HDF Change Event Primitives",
|
|
361
361
|
"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.",
|
|
362
362
|
"$defs": {
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
"priorChecksum": {
|
|
411
411
|
"oneOf": [
|
|
412
412
|
{
|
|
413
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
413
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
414
414
|
},
|
|
415
415
|
{
|
|
416
416
|
"type": "null"
|
|
@@ -428,7 +428,7 @@
|
|
|
428
428
|
"systemRef": "apptier.hdf-system.json",
|
|
429
429
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
430
430
|
"timestamp": "2026-07-22T14:03:11Z",
|
|
431
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
431
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
432
432
|
"priorChecksum": {
|
|
433
433
|
"algorithm": "sha256",
|
|
434
434
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -482,7 +482,7 @@
|
|
|
482
482
|
],
|
|
483
483
|
"properties": {
|
|
484
484
|
"effectiveStatus": {
|
|
485
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
485
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
486
486
|
"description": "The resolved effective compliance status at this point in the chain."
|
|
487
487
|
},
|
|
488
488
|
"effectiveImpact": {
|
|
@@ -531,7 +531,7 @@
|
|
|
531
531
|
"description": "URI to the seed snapshot document (relative path or absolute URL)."
|
|
532
532
|
},
|
|
533
533
|
"checksum": {
|
|
534
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
534
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
535
535
|
"description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
|
|
536
536
|
}
|
|
537
537
|
},
|
|
@@ -580,16 +580,29 @@
|
|
|
580
580
|
}
|
|
581
581
|
}
|
|
582
582
|
},
|
|
583
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
583
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
|
|
584
584
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
585
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
585
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
|
|
586
586
|
"title": "HDF Common Primitives",
|
|
587
587
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
588
588
|
"$defs": {
|
|
589
|
+
"External_Reference_Encoding": {
|
|
590
|
+
"type": "string",
|
|
591
|
+
"enum": [
|
|
592
|
+
"utf-8",
|
|
593
|
+
"base64"
|
|
594
|
+
],
|
|
595
|
+
"description": "How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not valid UTF-8 text.",
|
|
596
|
+
"title": "External Reference Encoding",
|
|
597
|
+
"examples": [
|
|
598
|
+
"base64"
|
|
599
|
+
],
|
|
600
|
+
"$comment": "Examples, in order: 1) a binary artifact, embedded base64-encoded."
|
|
601
|
+
},
|
|
589
602
|
"External_Reference": {
|
|
590
603
|
"type": "object",
|
|
591
604
|
"title": "External Reference",
|
|
592
|
-
"description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-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.\n\n`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.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
|
|
605
|
+
"description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-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.\n\n`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.\n\nAn entry may also carry the artifact itself rather than point at it: `document` for a JSON object, `content` + `encoding` for anything else. Embedding satisfies the at-least-one rule on its own, so an artifact with no meaningful public location needs no synthetic `href`.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
|
|
593
606
|
"required": [
|
|
594
607
|
"sourceName"
|
|
595
608
|
],
|
|
@@ -608,6 +621,42 @@
|
|
|
608
621
|
"required": [
|
|
609
622
|
"description"
|
|
610
623
|
]
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"required": [
|
|
627
|
+
"content"
|
|
628
|
+
]
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"required": [
|
|
632
|
+
"document"
|
|
633
|
+
]
|
|
634
|
+
}
|
|
635
|
+
],
|
|
636
|
+
"allOf": [
|
|
637
|
+
{
|
|
638
|
+
"if": {
|
|
639
|
+
"required": [
|
|
640
|
+
"content"
|
|
641
|
+
]
|
|
642
|
+
},
|
|
643
|
+
"then": {
|
|
644
|
+
"required": [
|
|
645
|
+
"encoding"
|
|
646
|
+
]
|
|
647
|
+
}
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
"if": {
|
|
651
|
+
"required": [
|
|
652
|
+
"encoding"
|
|
653
|
+
]
|
|
654
|
+
},
|
|
655
|
+
"then": {
|
|
656
|
+
"required": [
|
|
657
|
+
"content"
|
|
658
|
+
]
|
|
659
|
+
}
|
|
611
660
|
}
|
|
612
661
|
],
|
|
613
662
|
"properties": {
|
|
@@ -623,7 +672,7 @@
|
|
|
623
672
|
"href": {
|
|
624
673
|
"type": "string",
|
|
625
674
|
"format": "uri-reference",
|
|
626
|
-
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs.
|
|
675
|
+
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. Set it only when the location is meaningful to a reader — never a producer's local filesystem path."
|
|
627
676
|
},
|
|
628
677
|
"description": {
|
|
629
678
|
"type": "string",
|
|
@@ -635,11 +684,11 @@
|
|
|
635
684
|
},
|
|
636
685
|
"mediaType": {
|
|
637
686
|
"type": "string",
|
|
638
|
-
"description": "IANA media type of the
|
|
687
|
+
"description": "IANA media type of the artifact (RFC 6838), e.g., 'application/json', 'application/xml', 'text/csv'. Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document`."
|
|
639
688
|
},
|
|
640
689
|
"checksum": {
|
|
641
690
|
"$ref": "#/$defs/Checksum",
|
|
642
|
-
"description": "Integrity hash of the
|
|
691
|
+
"description": "Integrity hash of the artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document` — beside embedded bytes it is what makes the copy verifiable rather than merely present."
|
|
643
692
|
},
|
|
644
693
|
"addedBy": {
|
|
645
694
|
"$ref": "#/$defs/Identity",
|
|
@@ -658,11 +707,19 @@
|
|
|
658
707
|
"document": {
|
|
659
708
|
"type": "object",
|
|
660
709
|
"additionalProperties": true,
|
|
661
|
-
"description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nComposes 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.\n\nHDF 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)."
|
|
710
|
+
"description": "Optional lossless embedded copy of the referenced artifact as a JSON object — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nJSON objects only. An artifact that is not a JSON object (XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not text at all) embeds through `content` + `encoding` instead.\n\nComposes 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.\n\nHDF 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)."
|
|
711
|
+
},
|
|
712
|
+
"content": {
|
|
713
|
+
"type": "string",
|
|
714
|
+
"description": "Optional lossless embedded copy of the artifact's bytes as a string, for artifacts `document` cannot hold: XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not valid UTF-8 text at all.\n\n`encoding` states how to read it back and is required alongside it. Set `mediaType` so a consumer knows what the bytes are, and `checksum` so the copy can be verified against the source.\n\nCarried verbatim — never reformatted, re-indented, or re-serialized."
|
|
715
|
+
},
|
|
716
|
+
"encoding": {
|
|
717
|
+
"$ref": "#/$defs/External_Reference_Encoding",
|
|
718
|
+
"description": "How to read `content` back into the artifact's bytes. 'utf-8' for text (XML, CSV, NDJSON, plain text, JavaScript-wrapped JSON); 'base64' for anything that is not valid UTF-8 text.\n\nRequired whenever `content` is present, and meaningless without it — an embedded copy whose encoding a consumer has to guess is not lossless."
|
|
662
719
|
}
|
|
663
720
|
},
|
|
664
721
|
"unevaluatedProperties": false,
|
|
665
|
-
"$comment": "Examples, in order: 1) By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228; 2) By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL; 3) By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution; 4) 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.",
|
|
722
|
+
"$comment": "Examples, in order: 1) By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228; 2) By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL; 3) By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution; 4) 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; 5) Embed-only, text: an XCCDF results file carried in `content` as utf-8 with its media type and checksum, and no `href` at all — the artifact was read from a local file whose path means nothing to a reader; 6) Embed-only, non-text: a Fortify FPR (a zip) carried in `content` as base64, the case `document` and utf-8 both fail.",
|
|
666
723
|
"examples": [
|
|
667
724
|
{
|
|
668
725
|
"sourceName": "cve",
|
|
@@ -708,6 +765,28 @@
|
|
|
708
765
|
}
|
|
709
766
|
]
|
|
710
767
|
}
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
"sourceName": "openscap",
|
|
771
|
+
"rel": "raw-source",
|
|
772
|
+
"mediaType": "application/xml",
|
|
773
|
+
"encoding": "utf-8",
|
|
774
|
+
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
|
|
775
|
+
"checksum": {
|
|
776
|
+
"algorithm": "sha256",
|
|
777
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
"sourceName": "fortify",
|
|
782
|
+
"rel": "raw-source",
|
|
783
|
+
"mediaType": "application/zip",
|
|
784
|
+
"encoding": "base64",
|
|
785
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
786
|
+
"checksum": {
|
|
787
|
+
"algorithm": "sha256",
|
|
788
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
789
|
+
}
|
|
711
790
|
}
|
|
712
791
|
]
|
|
713
792
|
},
|
|
@@ -719,7 +798,7 @@
|
|
|
719
798
|
"sha512",
|
|
720
799
|
"blake3"
|
|
721
800
|
],
|
|
722
|
-
"description": "
|
|
801
|
+
"description": "Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers container-image and other artifact digests that use it. HDF tooling verifies every algorithm in this enum, so any of them may be recorded where the checksum needs to be verifiable. md5 and sha1 are excluded deliberately: a checksum or integrity record exists to detect tampering, and both are collision-broken, so a digest in either would look verifiable while proving nothing. A source tool digest in an excluded algorithm is not recorded as a checksum. Admitting weak hashes as an application-level accept/reject decision was considered and rejected; widening this enum is a schema decision, not an oversight.",
|
|
723
802
|
"title": "Hash Algorithm"
|
|
724
803
|
},
|
|
725
804
|
"Requirement_Group": {
|
|
@@ -877,7 +956,33 @@
|
|
|
877
956
|
}
|
|
878
957
|
],
|
|
879
958
|
"description": "A reference to an external document.",
|
|
880
|
-
"title": "Reference"
|
|
959
|
+
"title": "Reference",
|
|
960
|
+
"unevaluatedProperties": false,
|
|
961
|
+
"$comment": "Examples, in order: 1) By-locator: a plain URL, the commonest form by far in practice; 2) By-name: a human-meaningful citation with no locator, as InSpec's `ref 'title'` emits; 3) Both together, since this is an anyOf rather than a oneOf; 4) The ref-as-array form, whose items are deliberately open so a source format's own reference record can be carried verbatim — XCCDF's DPMS target identifiers reach HDF this way; 5) uri, accepted as a synonym of url for documents that spell it that way. The object itself is CLOSED: a member none of the three branches declares is rejected. The openness that matters here is one level down, on the items of the ref array, and it is declared there explicitly. This primitive predates External_Reference, which is the STIX-aligned type a new converter should reach for; refs survives because it is InSpec-inherited and HDF consumes InSpec output.",
|
|
962
|
+
"examples": [
|
|
963
|
+
{
|
|
964
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"ref": "NIST SP 800-53 Rev 5, AC-6"
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"ref": "CIS Benchmark for RHEL 9, 1.1.1",
|
|
971
|
+
"url": "https://www.cisecurity.org/benchmark/red_hat_linux"
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
"ref": [
|
|
975
|
+
{
|
|
976
|
+
"identifier": "2921",
|
|
977
|
+
"publisher": "DISA",
|
|
978
|
+
"type": "DPMS Target"
|
|
979
|
+
}
|
|
980
|
+
]
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"uri": "https://attack.mitre.org/techniques/T1059/"
|
|
984
|
+
}
|
|
985
|
+
]
|
|
881
986
|
},
|
|
882
987
|
"Source_Location": {
|
|
883
988
|
"type": "object",
|
|
@@ -1395,6 +1500,10 @@
|
|
|
1395
1500
|
"type": "string",
|
|
1396
1501
|
"description": "The title - should be human readable."
|
|
1397
1502
|
},
|
|
1503
|
+
"description": {
|
|
1504
|
+
"type": "string",
|
|
1505
|
+
"description": "Prose description of the baseline, more detailed than summary. Carried verbatim, like every HDF prose field."
|
|
1506
|
+
},
|
|
1398
1507
|
"maintainer": {
|
|
1399
1508
|
"type": "string",
|
|
1400
1509
|
"description": "The maintainer(s)."
|
|
@@ -1473,7 +1582,7 @@
|
|
|
1473
1582
|
},
|
|
1474
1583
|
"id": {
|
|
1475
1584
|
"type": "string",
|
|
1476
|
-
"description": "The requirement identifier. Example: 'SV-238196'."
|
|
1585
|
+
"description": "The requirement identifier, naming the requirement itself rather than one finding of it. Example: 'SV-238196'. Several entries in one baseline may legitimately carry the same id (one scanner reporting one CVE against several packages, or an overlay restating what it inherits), so an id is not an instance key: index requirements as id to list, never id to one, and an amendment addressing an id applies to every entry carrying it."
|
|
1477
1586
|
},
|
|
1478
1587
|
"title": {
|
|
1479
1588
|
"type": "string",
|
|
@@ -1691,9 +1800,9 @@
|
|
|
1691
1800
|
}
|
|
1692
1801
|
}
|
|
1693
1802
|
},
|
|
1694
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1803
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
|
|
1695
1804
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1696
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1805
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
|
|
1697
1806
|
"title": "HDF Result Primitives",
|
|
1698
1807
|
"description": "Types for representing assessment results and statuses.",
|
|
1699
1808
|
"$defs": {
|
|
@@ -1758,6 +1867,10 @@
|
|
|
1758
1867
|
"type": "string"
|
|
1759
1868
|
},
|
|
1760
1869
|
"description": "The stacktrace/backtrace of the exception if one occurred."
|
|
1870
|
+
},
|
|
1871
|
+
"rawSourceRecord": {
|
|
1872
|
+
"$ref": "#/$defs/Raw_Source_Record",
|
|
1873
|
+
"description": "The source tool's own record for this result, carrying every field the record had. Complete, not necessarily byte-exact: see Raw_Source_Record.content for the producer and consumer obligations, and extensions.rawSourceArtifacts[] when byte-exact carriage is required."
|
|
1761
1874
|
}
|
|
1762
1875
|
},
|
|
1763
1876
|
"examples": [
|
|
@@ -1788,6 +1901,60 @@
|
|
|
1788
1901
|
"description": "A test within a requirement and its results and findings such as how long it took to run.",
|
|
1789
1902
|
"title": "Requirement Result"
|
|
1790
1903
|
},
|
|
1904
|
+
"Raw_Source_Record": {
|
|
1905
|
+
"type": "object",
|
|
1906
|
+
"additionalProperties": false,
|
|
1907
|
+
"required": [
|
|
1908
|
+
"content",
|
|
1909
|
+
"encoding",
|
|
1910
|
+
"mediaType"
|
|
1911
|
+
],
|
|
1912
|
+
"properties": {
|
|
1913
|
+
"content": {
|
|
1914
|
+
"type": "string",
|
|
1915
|
+
"description": "The source tool's own record for this result, carrying every field the record had.\n\nCOMPLETE, NOT NECESSARILY BYTE-EXACT. A producer SHOULD write the record's bytes unchanged where it can. A producer that cannot — notably one implemented in two languages whose JSON serializers disagree on key order, HTML escaping and number rendering, and which therefore MUST canonicalize to stay byte-identical with its twin — MAY write a canonically serialized form instead. Such a form preserves every field and value but not the original key order, insignificant whitespace, or duplicate keys. A consumer MUST therefore compare records by parsing them, not by comparing bytes, and MUST NOT checksum this field and expect the result to match a checksum of the input.\n\nFor carriage that IS byte-exact, use `extensions.rawSourceArtifacts[]`, which forbids a parsed `document` precisely so the bytes and their checksum survive; `pointer` ties this record to its position within that artifact."
|
|
1916
|
+
},
|
|
1917
|
+
"encoding": {
|
|
1918
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference_Encoding",
|
|
1919
|
+
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
1920
|
+
},
|
|
1921
|
+
"mediaType": {
|
|
1922
|
+
"type": "string",
|
|
1923
|
+
"description": "The record's IANA media type — the type of this record, which for a fragment of a larger artifact may be narrower than the artifact's own. Example: 'application/json' for one match object out of a JSON report."
|
|
1924
|
+
},
|
|
1925
|
+
"pointer": {
|
|
1926
|
+
"type": "string",
|
|
1927
|
+
"description": "Where this record sits inside the artifact it came from, as a JSON Pointer (RFC 6901) for JSON sources or an XPath for XML ones. Example: '/matches/3'.\n\nOptional, and the link that makes carriage verifiable rather than merely present: with it a consumer can confirm the record really is the subtree of `extensions.rawSourceArtifacts[]` it claims to be. Omit it when the source's shape gives a record no addressable location."
|
|
1928
|
+
}
|
|
1929
|
+
},
|
|
1930
|
+
"description": "The source tool's own record for this result — the one entry in the converter's input that produced it, complete though not necessarily byte-for-byte (see `content`).\n\nSCOPED TO THE RESULT DELIBERATELY. For a vulnerability scanner the native record is one (vulnerability, package) pair, which is exactly one result: a CVE reported against two packages yields two entries whose records differ only in the package they matched. Held on the requirement instead, those two records would collide, and merging entries that share an id would have to discard one — so the result is not merely an available home but the correct one.\n\nDistinct from `extensions.rawSourceArtifacts[]`, which carries whole input artifacts: this carries the one record inside one of them, and `pointer` ties the two together. A consumer that wants the whole input reads the artifact; one that wants provenance for a single finding reads this.\n\nDistinct from `code`, which means the code that ran to evaluate the requirement — an InSpec control's source, or a check reference. A serialized finding is not code, and putting one there overloaded a field whose meaning came from InSpec.\n\nCLOSED, and deliberately not a passthrough bag: three required members and an optional pointer are the whole of it. Producer data that HDF does not model belongs in `extensions.passthrough`, which is document-scoped and permissive by design; this field is neither.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.",
|
|
1931
|
+
"$comment": "Examples, in order: 1) one grype match — the shape that moves out of `code` — located in the carried artifact by pointer; 2) an XCCDF rule-result, where the record is XML although the document embedding it is JSON, so mediaType is per record and not per document; 3) a record whose bytes are not text, carried as base64; 4) the minimum: a record whose source shape gives it no addressable location, so pointer is omitted.",
|
|
1932
|
+
"examples": [
|
|
1933
|
+
{
|
|
1934
|
+
"content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
|
|
1935
|
+
"encoding": "utf-8",
|
|
1936
|
+
"mediaType": "application/json",
|
|
1937
|
+
"pointer": "/matches/3"
|
|
1938
|
+
},
|
|
1939
|
+
{
|
|
1940
|
+
"content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
|
|
1941
|
+
"encoding": "utf-8",
|
|
1942
|
+
"mediaType": "application/xml",
|
|
1943
|
+
"pointer": "/Benchmark/TestResult/rule-result[4]"
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
|
|
1947
|
+
"encoding": "base64",
|
|
1948
|
+
"mediaType": "application/octet-stream"
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
|
|
1952
|
+
"encoding": "utf-8",
|
|
1953
|
+
"mediaType": "text/csv"
|
|
1954
|
+
}
|
|
1955
|
+
],
|
|
1956
|
+
"title": "Raw Source Record"
|
|
1957
|
+
},
|
|
1791
1958
|
"Requirement_Description": {
|
|
1792
1959
|
"type": "object",
|
|
1793
1960
|
"unevaluatedProperties": false,
|
|
@@ -1824,9 +1991,9 @@
|
|
|
1824
1991
|
}
|
|
1825
1992
|
}
|
|
1826
1993
|
},
|
|
1827
|
-
"https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
1994
|
+
"https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0": {
|
|
1828
1995
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1829
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
1996
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0",
|
|
1830
1997
|
"type": "object",
|
|
1831
1998
|
"unevaluatedProperties": false,
|
|
1832
1999
|
"required": [
|
|
@@ -1836,7 +2003,7 @@
|
|
|
1836
2003
|
"externalReferences": {
|
|
1837
2004
|
"type": "array",
|
|
1838
2005
|
"items": {
|
|
1839
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2006
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
1840
2007
|
},
|
|
1841
2008
|
"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."
|
|
1842
2009
|
},
|
|
@@ -1853,7 +2020,7 @@
|
|
|
1853
2020
|
"components": {
|
|
1854
2021
|
"type": "array",
|
|
1855
2022
|
"items": {
|
|
1856
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
2023
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
1857
2024
|
},
|
|
1858
2025
|
"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."
|
|
1859
2026
|
},
|
|
@@ -1865,23 +2032,23 @@
|
|
|
1865
2032
|
"description": "Information on the baselines that were evaluated, including findings."
|
|
1866
2033
|
},
|
|
1867
2034
|
"statistics": {
|
|
1868
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
2035
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0#/$defs/Statistics",
|
|
1869
2036
|
"description": "Statistics for the assessment run, including duration and result counts."
|
|
1870
2037
|
},
|
|
1871
2038
|
"generator": {
|
|
1872
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2039
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
1873
2040
|
"description": "Information about the tool that generated this file."
|
|
1874
2041
|
},
|
|
1875
2042
|
"tool": {
|
|
1876
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2043
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
|
|
1877
2044
|
"description": "The security tool that produced the assessment data in this file."
|
|
1878
2045
|
},
|
|
1879
2046
|
"integrity": {
|
|
1880
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2047
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
1881
2048
|
"description": "Cryptographic integrity information for verifying this file."
|
|
1882
2049
|
},
|
|
1883
2050
|
"preAmendmentChecksum": {
|
|
1884
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2051
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
1885
2052
|
"description": "Hash of this results document as it stood immediately before the most recent amendment application. Written by `hdf amend apply` when it applies at least one override; an apply that matches nothing leaves the document untouched. The hash covers the results file's RAW BYTES as read, not a canonical form, so reproducing it requires the byte-identical original — reformatting or re-serializing the source changes the value. Only the most recent pre-application state is recorded: applying amendments to an already-amended document REPLACES this value, so it is a single link back one step, not a growing chain. Distinct from the `previousChecksum` inside an override, which chains amendments to each other and is computed over a canonical JSON form.",
|
|
1886
2053
|
"$comment": "Example 1: the real SHA-256 of hdf-converters/converters/nessus-to-hdf/fixtures/expected/sample.nessus.hdf.json, reproducible with `shasum -a 256` on that file — chosen over a synthetic digest so a reader can verify the hash basis is the raw file bytes.",
|
|
1887
2054
|
"examples": [
|
|
@@ -1892,11 +2059,11 @@
|
|
|
1892
2059
|
]
|
|
1893
2060
|
},
|
|
1894
2061
|
"runner": {
|
|
1895
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
2062
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0#/$defs/Runner",
|
|
1896
2063
|
"description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
|
|
1897
2064
|
},
|
|
1898
2065
|
"remediation": {
|
|
1899
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2066
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Remediation",
|
|
1900
2067
|
"description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
|
|
1901
2068
|
},
|
|
1902
2069
|
"systemRef": {
|
|
@@ -1910,13 +2077,12 @@
|
|
|
1910
2077
|
"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."
|
|
1911
2078
|
},
|
|
1912
2079
|
"derivation": {
|
|
1913
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
2080
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Derivation",
|
|
1914
2081
|
"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."
|
|
1915
2082
|
},
|
|
1916
2083
|
"extensions": {
|
|
1917
|
-
"
|
|
1918
|
-
"
|
|
1919
|
-
"description": "Reserved for tool-specific data not defined in the HDF standard. Use this to preserve original tool output, auxiliary data, or custom metadata."
|
|
2084
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
2085
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these results were converted from."
|
|
1920
2086
|
}
|
|
1921
2087
|
},
|
|
1922
2088
|
"examples": [
|
|
@@ -2008,14 +2174,14 @@
|
|
|
2008
2174
|
],
|
|
2009
2175
|
"allOf": [
|
|
2010
2176
|
{
|
|
2011
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2177
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Baseline_Metadata"
|
|
2012
2178
|
}
|
|
2013
2179
|
],
|
|
2014
2180
|
"properties": {
|
|
2015
2181
|
"depends": {
|
|
2016
2182
|
"type": "array",
|
|
2017
2183
|
"items": {
|
|
2018
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2184
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Dependency"
|
|
2019
2185
|
},
|
|
2020
2186
|
"description": "The set of dependencies this baseline depends on."
|
|
2021
2187
|
},
|
|
@@ -2023,21 +2189,17 @@
|
|
|
2023
2189
|
"type": "string",
|
|
2024
2190
|
"description": "The name of the parent baseline if this is a dependency of another."
|
|
2025
2191
|
},
|
|
2026
|
-
"description": {
|
|
2027
|
-
"type": "string",
|
|
2028
|
-
"description": "The description - should be more detailed than the summary."
|
|
2029
|
-
},
|
|
2030
2192
|
"integrity": {
|
|
2031
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2193
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
2032
2194
|
"description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
|
|
2033
2195
|
},
|
|
2034
2196
|
"originalChecksum": {
|
|
2035
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2197
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2036
2198
|
"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."
|
|
2037
2199
|
},
|
|
2038
2200
|
"resultsChecksum": {
|
|
2039
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2040
|
-
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results.
|
|
2201
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2202
|
+
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results. Amendment integrity is checked against the document-level preAmendmentChecksum at the root, not this per-baseline value: hdf amend apply writes it as the hash of the raw document bytes immediately before the most recent amendment application, one step back only."
|
|
2041
2203
|
},
|
|
2042
2204
|
"statusMessage": {
|
|
2043
2205
|
"type": "string",
|
|
@@ -2054,21 +2216,20 @@
|
|
|
2054
2216
|
"groups": {
|
|
2055
2217
|
"type": "array",
|
|
2056
2218
|
"items": {
|
|
2057
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2219
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Group"
|
|
2058
2220
|
},
|
|
2059
2221
|
"description": "A set of descriptions for the requirement groups."
|
|
2060
2222
|
},
|
|
2061
2223
|
"inputs": {
|
|
2062
2224
|
"type": "array",
|
|
2063
2225
|
"items": {
|
|
2064
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
2226
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0#/$defs/Input"
|
|
2065
2227
|
},
|
|
2066
2228
|
"description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
|
|
2067
2229
|
},
|
|
2068
2230
|
"extensions": {
|
|
2069
|
-
"
|
|
2070
|
-
"
|
|
2071
|
-
"description": "Reserved for tool-specific baseline metadata not defined in the HDF standard."
|
|
2231
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
2232
|
+
"description": "Producer data outside the HDF model that belongs to this baseline rather than to the document, and the pre-converted source artifact(s) this baseline was built from."
|
|
2072
2233
|
}
|
|
2073
2234
|
},
|
|
2074
2235
|
"description": "Information on a baseline that was evaluated, including any findings.",
|
|
@@ -2086,7 +2247,7 @@
|
|
|
2086
2247
|
],
|
|
2087
2248
|
"allOf": [
|
|
2088
2249
|
{
|
|
2089
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2250
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Core"
|
|
2090
2251
|
}
|
|
2091
2252
|
],
|
|
2092
2253
|
"properties": {
|
|
@@ -2094,7 +2255,7 @@
|
|
|
2094
2255
|
"type": "array",
|
|
2095
2256
|
"minItems": 1,
|
|
2096
2257
|
"items": {
|
|
2097
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2258
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Description"
|
|
2098
2259
|
},
|
|
2099
2260
|
"contains": {
|
|
2100
2261
|
"type": "object",
|
|
@@ -2110,37 +2271,37 @@
|
|
|
2110
2271
|
"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'."
|
|
2111
2272
|
},
|
|
2112
2273
|
"severity": {
|
|
2113
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2274
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Severity",
|
|
2114
2275
|
"description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
|
|
2115
2276
|
},
|
|
2116
2277
|
"sourceLocation": {
|
|
2117
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2278
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Source_Location",
|
|
2118
2279
|
"description": "The explicit location of the requirement within the source code."
|
|
2119
2280
|
},
|
|
2120
2281
|
"results": {
|
|
2121
2282
|
"type": "array",
|
|
2122
2283
|
"minItems": 1,
|
|
2123
2284
|
"items": {
|
|
2124
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2285
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Result"
|
|
2125
2286
|
},
|
|
2126
2287
|
"description": "The set of all tests within the requirement and their results."
|
|
2127
2288
|
},
|
|
2128
2289
|
"statusOverrides": {
|
|
2129
2290
|
"type": "array",
|
|
2130
2291
|
"items": {
|
|
2131
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2292
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Status_Override"
|
|
2132
2293
|
},
|
|
2133
2294
|
"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). Array order is NOT significant: consumers resolve the governing override by appliedAt (the most recently applied non-expired one), never by position. Earlier revisions of this description asked for most-recent-first, but nothing enforces it and producers commonly append, so position is frequently the opposite of recency. Preserves full audit trail."
|
|
2134
2295
|
},
|
|
2135
2296
|
"poams": {
|
|
2136
2297
|
"type": "array",
|
|
2137
2298
|
"items": {
|
|
2138
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2299
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/POAM"
|
|
2139
2300
|
},
|
|
2140
2301
|
"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."
|
|
2141
2302
|
},
|
|
2142
2303
|
"effectiveStatus": {
|
|
2143
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2304
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
2144
2305
|
"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."
|
|
2145
2306
|
},
|
|
2146
2307
|
"effectiveImpact": {
|
|
@@ -2150,33 +2311,33 @@
|
|
|
2150
2311
|
"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."
|
|
2151
2312
|
},
|
|
2152
2313
|
"disposition": {
|
|
2153
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2314
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
2154
2315
|
"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."
|
|
2155
2316
|
},
|
|
2156
2317
|
"effectiveChecksum": {
|
|
2157
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2318
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2158
2319
|
"description": "Checksum of this requirement's resolved effective posture, for per-control change detection in continuous monitoring.\n\nsha256 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.\n\nFlips exactly when the operative status, impact, or disposition changes; stable under all other churn (result details, timestamps, tags).\n\nOptional; stamped by tooling (hdf convert, hdf amend apply)."
|
|
2159
2320
|
},
|
|
2160
2321
|
"evidence": {
|
|
2161
2322
|
"type": "array",
|
|
2162
2323
|
"items": {
|
|
2163
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2324
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2164
2325
|
},
|
|
2165
2326
|
"description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
|
|
2166
2327
|
},
|
|
2167
2328
|
"cvss": {
|
|
2168
2329
|
"type": "array",
|
|
2169
2330
|
"items": {
|
|
2170
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
2331
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss"
|
|
2171
2332
|
},
|
|
2172
2333
|
"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."
|
|
2173
2334
|
},
|
|
2174
2335
|
"epss": {
|
|
2175
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
2336
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0#/$defs/Epss",
|
|
2176
2337
|
"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."
|
|
2177
2338
|
},
|
|
2178
2339
|
"kev": {
|
|
2179
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
2340
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0#/$defs/Kev",
|
|
2180
2341
|
"description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
|
|
2181
2342
|
},
|
|
2182
2343
|
"cwe": {
|
|
@@ -2190,7 +2351,7 @@
|
|
|
2190
2351
|
"affectedPackages": {
|
|
2191
2352
|
"type": "array",
|
|
2192
2353
|
"items": {
|
|
2193
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
2354
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
2194
2355
|
},
|
|
2195
2356
|
"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)."
|
|
2196
2357
|
}
|
|
@@ -2410,7 +2571,6 @@
|
|
|
2410
2571
|
"statusOverrides": [
|
|
2411
2572
|
{
|
|
2412
2573
|
"type": "operationalRequirement",
|
|
2413
|
-
"status": "failed",
|
|
2414
2574
|
"reason": "Air-gapped system requires USB transfer for classified data ingestion per operational procedure OP-2026-003. Compensating controls: USB ports are physically secured, all transfers are logged and require two-person integrity.",
|
|
2415
2575
|
"appliedBy": {
|
|
2416
2576
|
"type": "email",
|
|
@@ -2479,9 +2639,9 @@
|
|
|
2479
2639
|
}
|
|
2480
2640
|
}
|
|
2481
2641
|
},
|
|
2482
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
2642
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
|
|
2483
2643
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2484
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
2644
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
|
|
2485
2645
|
"title": "HDF Component Primitives",
|
|
2486
2646
|
"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).",
|
|
2487
2647
|
"$defs": {
|
|
@@ -2527,7 +2687,7 @@
|
|
|
2527
2687
|
"description": "Description of this component's role or purpose."
|
|
2528
2688
|
},
|
|
2529
2689
|
"owner": {
|
|
2530
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2690
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2531
2691
|
"description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
|
|
2532
2692
|
},
|
|
2533
2693
|
"externalIds": {
|
|
@@ -2547,14 +2707,14 @@
|
|
|
2547
2707
|
"boms": {
|
|
2548
2708
|
"type": "array",
|
|
2549
2709
|
"items": {
|
|
2550
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2710
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
|
|
2551
2711
|
},
|
|
2552
2712
|
"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."
|
|
2553
2713
|
},
|
|
2554
2714
|
"integrity": {
|
|
2555
2715
|
"type": "array",
|
|
2556
2716
|
"items": {
|
|
2557
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2717
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
2558
2718
|
},
|
|
2559
2719
|
"description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes.\n\nAn array supports multi-file/sharded artifacts.\n\nThis 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).\n\nDistinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
|
|
2560
2720
|
},
|
|
@@ -2568,12 +2728,12 @@
|
|
|
2568
2728
|
"inputOverrides": {
|
|
2569
2729
|
"type": "array",
|
|
2570
2730
|
"items": {
|
|
2571
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
2731
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
|
|
2572
2732
|
},
|
|
2573
2733
|
"description": "System-specific overrides for baseline input values."
|
|
2574
2734
|
},
|
|
2575
2735
|
"targetSelector": {
|
|
2576
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
2736
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
|
|
2577
2737
|
"description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
|
|
2578
2738
|
}
|
|
2579
2739
|
},
|
|
@@ -2856,7 +3016,7 @@
|
|
|
2856
3016
|
"const": "cloudAccount"
|
|
2857
3017
|
},
|
|
2858
3018
|
"provider": {
|
|
2859
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3019
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
2860
3020
|
"description": "Cloud provider."
|
|
2861
3021
|
},
|
|
2862
3022
|
"accountId": {
|
|
@@ -2895,7 +3055,7 @@
|
|
|
2895
3055
|
"const": "cloudResource"
|
|
2896
3056
|
},
|
|
2897
3057
|
"provider": {
|
|
2898
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3058
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
2899
3059
|
"description": "Cloud provider."
|
|
2900
3060
|
},
|
|
2901
3061
|
"resourceType": {
|
|
@@ -3194,9 +3354,9 @@
|
|
|
3194
3354
|
}
|
|
3195
3355
|
}
|
|
3196
3356
|
},
|
|
3197
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
3357
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
|
|
3198
3358
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3199
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
3359
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
|
|
3200
3360
|
"title": "HDF BOM Primitives",
|
|
3201
3361
|
"description": "Generalized Bill-of-Materials / manifest representation.\n\nOne 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).\n\nSubject identity (name, version, componentId) is inherited from the host component or system — the BOM never re-owns it.\n\nSee ADR-0001.",
|
|
3202
3362
|
"$defs": {
|
|
@@ -3252,7 +3412,7 @@
|
|
|
3252
3412
|
"hashes": {
|
|
3253
3413
|
"type": "array",
|
|
3254
3414
|
"items": {
|
|
3255
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3415
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
3256
3416
|
},
|
|
3257
3417
|
"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."
|
|
3258
3418
|
},
|
|
@@ -3448,6 +3608,25 @@
|
|
|
3448
3608
|
}
|
|
3449
3609
|
]
|
|
3450
3610
|
},
|
|
3611
|
+
"Modality": {
|
|
3612
|
+
"type": [
|
|
3613
|
+
"string",
|
|
3614
|
+
"array"
|
|
3615
|
+
],
|
|
3616
|
+
"items": {
|
|
3617
|
+
"type": "string"
|
|
3618
|
+
},
|
|
3619
|
+
"description": "A content modality such as text, image, audio, tabular or timeseries: one string, or a list when the content spans several.",
|
|
3620
|
+
"title": "Modality",
|
|
3621
|
+
"examples": [
|
|
3622
|
+
"text",
|
|
3623
|
+
[
|
|
3624
|
+
"text",
|
|
3625
|
+
"image"
|
|
3626
|
+
]
|
|
3627
|
+
],
|
|
3628
|
+
"$comment": "Examples, in order: 1) a single modality; 2) multimodal content listed in full."
|
|
3629
|
+
},
|
|
3451
3630
|
"AI_Model_Extension": {
|
|
3452
3631
|
"type": "object",
|
|
3453
3632
|
"additionalProperties": true,
|
|
@@ -3549,13 +3728,7 @@
|
|
|
3549
3728
|
"description": "Input/output data types. Examples: string, byte[], float32, image."
|
|
3550
3729
|
},
|
|
3551
3730
|
"modality": {
|
|
3552
|
-
"
|
|
3553
|
-
"string",
|
|
3554
|
-
"array"
|
|
3555
|
-
],
|
|
3556
|
-
"items": {
|
|
3557
|
-
"type": "string"
|
|
3558
|
-
},
|
|
3731
|
+
"$ref": "#/$defs/Modality",
|
|
3559
3732
|
"description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
|
|
3560
3733
|
},
|
|
3561
3734
|
"contextLength": {
|
|
@@ -3595,13 +3768,7 @@
|
|
|
3595
3768
|
"description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
|
|
3596
3769
|
},
|
|
3597
3770
|
"modality": {
|
|
3598
|
-
"
|
|
3599
|
-
"string",
|
|
3600
|
-
"array"
|
|
3601
|
-
],
|
|
3602
|
-
"items": {
|
|
3603
|
-
"type": "string"
|
|
3604
|
-
},
|
|
3771
|
+
"$ref": "#/$defs/Modality",
|
|
3605
3772
|
"description": "Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text, image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not physical format. String or array of strings."
|
|
3606
3773
|
},
|
|
3607
3774
|
"provenance": {
|
|
@@ -3664,9 +3831,9 @@
|
|
|
3664
3831
|
}
|
|
3665
3832
|
}
|
|
3666
3833
|
},
|
|
3667
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
3834
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
|
|
3668
3835
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3669
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
3836
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
|
|
3670
3837
|
"title": "HDF System Primitives",
|
|
3671
3838
|
"description": "Types for describing system architecture, authorization boundaries, and components.",
|
|
3672
3839
|
"$defs": {
|
|
@@ -3717,7 +3884,7 @@
|
|
|
3717
3884
|
"description": "Rationale for why this override is needed."
|
|
3718
3885
|
},
|
|
3719
3886
|
"approvedBy": {
|
|
3720
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3887
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3721
3888
|
"description": "Identity of the person or system that approved this override."
|
|
3722
3889
|
}
|
|
3723
3890
|
},
|
|
@@ -3799,9 +3966,9 @@
|
|
|
3799
3966
|
}
|
|
3800
3967
|
}
|
|
3801
3968
|
},
|
|
3802
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
3969
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0": {
|
|
3803
3970
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3804
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
3971
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0",
|
|
3805
3972
|
"title": "HDF Statistics Primitives",
|
|
3806
3973
|
"description": "Statistics types for tracking assessment run metrics.",
|
|
3807
3974
|
"$defs": {
|
|
@@ -3870,12 +4037,183 @@
|
|
|
3870
4037
|
}
|
|
3871
4038
|
}
|
|
3872
4039
|
},
|
|
3873
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
4040
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
|
|
3874
4041
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3875
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
4042
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
|
|
3876
4043
|
"title": "HDF Extension Primitives",
|
|
3877
|
-
"description": "Extension types for waivers, attestations, generators, and
|
|
4044
|
+
"description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
|
|
3878
4045
|
"$defs": {
|
|
4046
|
+
"Raw_Source_Artifact": {
|
|
4047
|
+
"allOf": [
|
|
4048
|
+
{
|
|
4049
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
4050
|
+
},
|
|
4051
|
+
{
|
|
4052
|
+
"not": {
|
|
4053
|
+
"required": [
|
|
4054
|
+
"document"
|
|
4055
|
+
]
|
|
4056
|
+
}
|
|
4057
|
+
},
|
|
4058
|
+
{
|
|
4059
|
+
"if": {
|
|
4060
|
+
"required": [
|
|
4061
|
+
"content"
|
|
4062
|
+
]
|
|
4063
|
+
},
|
|
4064
|
+
"then": {
|
|
4065
|
+
"required": [
|
|
4066
|
+
"encoding",
|
|
4067
|
+
"mediaType"
|
|
4068
|
+
]
|
|
4069
|
+
}
|
|
4070
|
+
}
|
|
4071
|
+
],
|
|
4072
|
+
"description": "One artifact exactly as a converter received it, before conversion.\n\nAn External_Reference used for a single purpose, so the same primitive both points and embeds: `sourceName` names the producing tool; `content` + `encoding` carry the bytes; `checksum` is of the exact bytes the converter read; `rel` is 'raw-source'; `href` appears only when the caller supplied a location that means something to a reader, never a producer's local filesystem path.\n\nBYTES, NOT A PARSED COPY. `document` is forbidden here, enforced by the schema rather than described: it holds a parsed JSON object, so embedding through it discards the original whitespace, key order, duplicate keys and trailing bytes — which makes the artifact unreconstructable and the checksum unverifiable against what is stored. A JSON input carries as a `content` string like every other input. This is deliberately stricter than HDF v2, whose `passthrough.raw` held a parsed structure in every converter but one, and which for XML inputs stored a reshaped object whose keys could collide.\n\n`mediaType` is REQUIRED on an entry that embeds — bytes whose type a consumer has to infer are not carriage. It is derived from the converter's declared input family (json → application/json, xml → application/xml, text → text/plain) and overridden by converters that know their bytes more precisely (CSV, NDJSON, JavaScript-wrapped JSON).\n\nAn entry that only points at a location may omit `mediaType`, `content` and `encoding`.",
|
|
4073
|
+
"$comment": "Examples, in order: 1) JSON input embedded as a utf-8 `content` string — the common case, and note it is NOT a parsed object; 2) XML input, which `document` never could have held; 3) CSV input, where `mediaType` overrides the 'text' input family's derived text/plain; 4) non-text input (a Fortify FPR zip) embedded as base64; 5) by-reference only: a scan retrievable at a meaningful URL, with no embedded copy and therefore no required mediaType, encoding or content.",
|
|
4074
|
+
"examples": [
|
|
4075
|
+
{
|
|
4076
|
+
"sourceName": "grype",
|
|
4077
|
+
"rel": "raw-source",
|
|
4078
|
+
"mediaType": "application/json",
|
|
4079
|
+
"encoding": "utf-8",
|
|
4080
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
4081
|
+
"checksum": {
|
|
4082
|
+
"algorithm": "sha256",
|
|
4083
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
4084
|
+
}
|
|
4085
|
+
},
|
|
4086
|
+
{
|
|
4087
|
+
"sourceName": "openscap",
|
|
4088
|
+
"rel": "raw-source",
|
|
4089
|
+
"mediaType": "application/xml",
|
|
4090
|
+
"encoding": "utf-8",
|
|
4091
|
+
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
|
|
4092
|
+
"checksum": {
|
|
4093
|
+
"algorithm": "sha256",
|
|
4094
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
4095
|
+
}
|
|
4096
|
+
},
|
|
4097
|
+
{
|
|
4098
|
+
"sourceName": "prisma",
|
|
4099
|
+
"rel": "raw-source",
|
|
4100
|
+
"mediaType": "text/csv",
|
|
4101
|
+
"encoding": "utf-8",
|
|
4102
|
+
"content": "Hostname,Distro,CVE ID,Compliance ID,Type,Severity,Packages,Source Package,Package Version\nhost-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1\n",
|
|
4103
|
+
"checksum": {
|
|
4104
|
+
"algorithm": "sha256",
|
|
4105
|
+
"value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
|
|
4106
|
+
}
|
|
4107
|
+
},
|
|
4108
|
+
{
|
|
4109
|
+
"sourceName": "fortify",
|
|
4110
|
+
"rel": "raw-source",
|
|
4111
|
+
"mediaType": "application/zip",
|
|
4112
|
+
"encoding": "base64",
|
|
4113
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
4114
|
+
"checksum": {
|
|
4115
|
+
"algorithm": "sha256",
|
|
4116
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
4117
|
+
}
|
|
4118
|
+
},
|
|
4119
|
+
{
|
|
4120
|
+
"sourceName": "nessus",
|
|
4121
|
+
"rel": "raw-source",
|
|
4122
|
+
"href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
|
|
4123
|
+
"mediaType": "application/xml",
|
|
4124
|
+
"checksum": {
|
|
4125
|
+
"algorithm": "sha256",
|
|
4126
|
+
"value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
|
|
4127
|
+
}
|
|
4128
|
+
}
|
|
4129
|
+
]
|
|
4130
|
+
},
|
|
4131
|
+
"Extensions": {
|
|
4132
|
+
"type": "object",
|
|
4133
|
+
"additionalProperties": false,
|
|
4134
|
+
"properties": {
|
|
4135
|
+
"passthrough": {
|
|
4136
|
+
"type": "object",
|
|
4137
|
+
"additionalProperties": true,
|
|
4138
|
+
"description": "Catch-all for producer data that HDF does not model — the role heimdall2's `passthrough.auxiliary_data` played: fields a converter deliberately carried but had no home for.\n\nDeliberately permissive: unenumerated properties are accepted by design, with no shape imposed on them. HDF neither reads nor interprets what is here. It is the ONLY permissive surface in `extensions` — everything HDF does not define belongs here rather than beside it.\n\nThis is NOT where the pre-converted source artifact goes. v2 put it here only because nothing else had room; `rawSourceArtifacts` is its home now, and it gives the bytes a checksum, a media type and a reference contract that an untyped object cannot.\n\nFor data that belongs to one requirement rather than to the document, use that object's own fields — a document-level bag cannot say which requirement it describes.",
|
|
4139
|
+
"examples": [
|
|
4140
|
+
{
|
|
4141
|
+
"auxiliary_data": [
|
|
4142
|
+
{
|
|
4143
|
+
"name": "Scoutsuite",
|
|
4144
|
+
"data": {
|
|
4145
|
+
"last_run": {
|
|
4146
|
+
"ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
|
|
4147
|
+
}
|
|
4148
|
+
}
|
|
4149
|
+
}
|
|
4150
|
+
]
|
|
4151
|
+
},
|
|
4152
|
+
{
|
|
4153
|
+
"audit": {
|
|
4154
|
+
"runId": "r-123"
|
|
4155
|
+
}
|
|
4156
|
+
}
|
|
4157
|
+
],
|
|
4158
|
+
"$comment": "Examples, in order: 1) heimdall2's auxiliary_data shape, the data a v2 mapper carried with nowhere else to put it; 2) the legacy top-level `passthrough` an HDF document arrived with, relocated here verbatim by the SAF-supplement normalizer."
|
|
4159
|
+
},
|
|
4160
|
+
"rawSourceArtifacts": {
|
|
4161
|
+
"type": "array",
|
|
4162
|
+
"items": {
|
|
4163
|
+
"$ref": "#/$defs/Raw_Source_Artifact"
|
|
4164
|
+
},
|
|
4165
|
+
"description": "The input(s) this document was converted from, verbatim.\n\nAn array because a conversion can consume more than one artifact — the OSCAL profile path takes a profile and a catalog. Every other converter takes one input, and an array of one costs nothing.\n\nPopulating this is required of ingest converters by policy, enforced by the converter contract and test harness rather than by a schema `required`: a tool that emits HDF natively has no source artifact, and requiring the field would make valid native HDF invalid."
|
|
4166
|
+
}
|
|
4167
|
+
},
|
|
4168
|
+
"title": "Extensions",
|
|
4169
|
+
"description": "Carrier for data outside the HDF model: `passthrough` for producer data HDF does not model, `rawSourceArtifacts` for the pre-converted input(s).\n\nCLOSED: these two members are the whole of it. A key HDF does not define goes inside `passthrough` — that is what `passthrough` is for — so `extensions` never becomes a second, unnamed schema that consumers must reverse-engineer from the producers that happen to write it.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.\n\nDeclared on every HDF document type that carries a producer envelope (`generator` / `integrity`), and on `Evaluated_Baseline`, so one rule governs both sites.",
|
|
4170
|
+
"$comment": "Examples, in order: 1) the whole contract in one object — a converter's input embedded beside the producer data it could not map; 2) carriage alone, the shape a converter emits when it has nothing homeless to record.",
|
|
4171
|
+
"examples": [
|
|
4172
|
+
{
|
|
4173
|
+
"passthrough": {
|
|
4174
|
+
"auxiliary_data": [
|
|
4175
|
+
{
|
|
4176
|
+
"name": "Grype",
|
|
4177
|
+
"data": {
|
|
4178
|
+
"descriptor": {
|
|
4179
|
+
"name": "grype",
|
|
4180
|
+
"version": "0.74.0"
|
|
4181
|
+
}
|
|
4182
|
+
}
|
|
4183
|
+
}
|
|
4184
|
+
]
|
|
4185
|
+
},
|
|
4186
|
+
"rawSourceArtifacts": [
|
|
4187
|
+
{
|
|
4188
|
+
"sourceName": "grype",
|
|
4189
|
+
"rel": "raw-source",
|
|
4190
|
+
"mediaType": "application/json",
|
|
4191
|
+
"encoding": "utf-8",
|
|
4192
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
4193
|
+
"checksum": {
|
|
4194
|
+
"algorithm": "sha256",
|
|
4195
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
4196
|
+
}
|
|
4197
|
+
}
|
|
4198
|
+
]
|
|
4199
|
+
},
|
|
4200
|
+
{
|
|
4201
|
+
"rawSourceArtifacts": [
|
|
4202
|
+
{
|
|
4203
|
+
"sourceName": "fortify",
|
|
4204
|
+
"rel": "raw-source",
|
|
4205
|
+
"mediaType": "application/zip",
|
|
4206
|
+
"encoding": "base64",
|
|
4207
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
4208
|
+
"checksum": {
|
|
4209
|
+
"algorithm": "sha256",
|
|
4210
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
4211
|
+
}
|
|
4212
|
+
}
|
|
4213
|
+
]
|
|
4214
|
+
}
|
|
4215
|
+
]
|
|
4216
|
+
},
|
|
3879
4217
|
"Status_Override": {
|
|
3880
4218
|
"type": "object",
|
|
3881
4219
|
"unevaluatedProperties": false,
|
|
@@ -3886,44 +4224,99 @@
|
|
|
3886
4224
|
"appliedAt",
|
|
3887
4225
|
"expiresAt"
|
|
3888
4226
|
],
|
|
3889
|
-
"
|
|
4227
|
+
"allOf": [
|
|
3890
4228
|
{
|
|
3891
|
-
"
|
|
3892
|
-
"
|
|
3893
|
-
|
|
4229
|
+
"if": {
|
|
4230
|
+
"properties": {
|
|
4231
|
+
"type": {
|
|
4232
|
+
"enum": [
|
|
4233
|
+
"operationalRequirement"
|
|
4234
|
+
]
|
|
4235
|
+
}
|
|
4236
|
+
},
|
|
4237
|
+
"required": [
|
|
4238
|
+
"type"
|
|
4239
|
+
]
|
|
4240
|
+
},
|
|
4241
|
+
"then": {
|
|
4242
|
+
"not": {
|
|
4243
|
+
"anyOf": [
|
|
4244
|
+
{
|
|
4245
|
+
"required": [
|
|
4246
|
+
"status"
|
|
4247
|
+
]
|
|
4248
|
+
},
|
|
4249
|
+
{
|
|
4250
|
+
"required": [
|
|
4251
|
+
"impact"
|
|
4252
|
+
]
|
|
4253
|
+
}
|
|
4254
|
+
]
|
|
4255
|
+
}
|
|
4256
|
+
},
|
|
4257
|
+
"else": {
|
|
4258
|
+
"anyOf": [
|
|
4259
|
+
{
|
|
4260
|
+
"required": [
|
|
4261
|
+
"status"
|
|
4262
|
+
]
|
|
4263
|
+
},
|
|
4264
|
+
{
|
|
4265
|
+
"required": [
|
|
4266
|
+
"impact"
|
|
4267
|
+
]
|
|
4268
|
+
}
|
|
4269
|
+
]
|
|
4270
|
+
}
|
|
3894
4271
|
},
|
|
3895
4272
|
{
|
|
3896
|
-
"
|
|
3897
|
-
"
|
|
3898
|
-
|
|
4273
|
+
"if": {
|
|
4274
|
+
"properties": {
|
|
4275
|
+
"type": {
|
|
4276
|
+
"enum": [
|
|
4277
|
+
"riskAdjustment"
|
|
4278
|
+
]
|
|
4279
|
+
}
|
|
4280
|
+
},
|
|
4281
|
+
"required": [
|
|
4282
|
+
"type"
|
|
4283
|
+
]
|
|
4284
|
+
},
|
|
4285
|
+
"then": {
|
|
4286
|
+
"not": {
|
|
4287
|
+
"required": [
|
|
4288
|
+
"status"
|
|
4289
|
+
]
|
|
4290
|
+
}
|
|
4291
|
+
}
|
|
3899
4292
|
}
|
|
3900
4293
|
],
|
|
3901
4294
|
"properties": {
|
|
3902
4295
|
"externalReferences": {
|
|
3903
4296
|
"type": "array",
|
|
3904
4297
|
"items": {
|
|
3905
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4298
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
3906
4299
|
},
|
|
3907
4300
|
"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."
|
|
3908
4301
|
},
|
|
3909
4302
|
"type": {
|
|
3910
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
4303
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
3911
4304
|
"description": "The type of override applied to this requirement."
|
|
3912
4305
|
},
|
|
3913
4306
|
"status": {
|
|
3914
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3915
|
-
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
4307
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
4308
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
3916
4309
|
},
|
|
3917
4310
|
"impact": {
|
|
3918
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3919
|
-
"description": "Override to the requirement's impact score.
|
|
4311
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
|
|
4312
|
+
"description": "Override to the requirement's impact score. For every type except operationalRequirement, at least one of status or impact must be set; an operationalRequirement carries neither."
|
|
3920
4313
|
},
|
|
3921
4314
|
"reason": {
|
|
3922
4315
|
"type": "string",
|
|
3923
4316
|
"description": "Explanation for why this override was applied."
|
|
3924
4317
|
},
|
|
3925
4318
|
"appliedBy": {
|
|
3926
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4319
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3927
4320
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
3928
4321
|
},
|
|
3929
4322
|
"appliedAt": {
|
|
@@ -3937,31 +4330,31 @@
|
|
|
3937
4330
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
3938
4331
|
},
|
|
3939
4332
|
"signature": {
|
|
3940
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4333
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
3941
4334
|
"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."
|
|
3942
4335
|
},
|
|
3943
4336
|
"evidence": {
|
|
3944
4337
|
"type": "array",
|
|
3945
4338
|
"items": {
|
|
3946
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4339
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3947
4340
|
},
|
|
3948
4341
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
3949
4342
|
},
|
|
3950
4343
|
"previousChecksum": {
|
|
3951
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4344
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3952
4345
|
"description": "SHA-256 checksum of the previous amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment on a requirement."
|
|
3953
4346
|
},
|
|
3954
4347
|
"cvss": {
|
|
3955
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4348
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
3956
4349
|
"$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.",
|
|
3957
4350
|
"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."
|
|
3958
4351
|
},
|
|
3959
4352
|
"justification": {
|
|
3960
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
4353
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
|
|
3961
4354
|
"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."
|
|
3962
4355
|
}
|
|
3963
4356
|
},
|
|
3964
|
-
"$comment": "Example 3: 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.",
|
|
4357
|
+
"$comment": "Example 3: 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. Example 7: operationalRequirement as it sits on the requirement after apply: no status, no impact; the finding stays failed and disposition reports operationalRequirement.",
|
|
3965
4358
|
"examples": [
|
|
3966
4359
|
{
|
|
3967
4360
|
"type": "waiver",
|
|
@@ -4061,9 +4454,19 @@
|
|
|
4061
4454
|
}
|
|
4062
4455
|
}
|
|
4063
4456
|
]
|
|
4457
|
+
},
|
|
4458
|
+
{
|
|
4459
|
+
"type": "operationalRequirement",
|
|
4460
|
+
"reason": "Air-gapped ingest requires USB transfer per operational procedure OP-2026-003. Ports are physically secured, transfers are logged and need two-person integrity.",
|
|
4461
|
+
"appliedBy": {
|
|
4462
|
+
"type": "email",
|
|
4463
|
+
"identifier": "system-owner@agency.gov"
|
|
4464
|
+
},
|
|
4465
|
+
"appliedAt": "2026-01-20T10:00:00Z",
|
|
4466
|
+
"expiresAt": "2099-12-31T00:00:00Z"
|
|
4064
4467
|
}
|
|
4065
4468
|
],
|
|
4066
|
-
"description": "An intentional change to a requirement's compliance status and/or impact score.
|
|
4469
|
+
"description": "An intentional change to a requirement's compliance status and/or impact score, as it sits on the requirement once applied. The same type-conditional rule as Standalone_Override: when type is 'operationalRequirement', neither status nor impact may be set, because the override records an accepted deviation without adjudicating the finding; it still governs disposition, and effectiveStatus stays what the results decided. When type is 'riskAdjustment', status may not be set: it re-rates the risk through impact and never changes pass/fail. For every other type, at least one of status or impact must be set. All overrides must have an expiration date to enforce periodic review.",
|
|
4067
4470
|
"title": "Status Override"
|
|
4068
4471
|
},
|
|
4069
4472
|
"POAM": {
|
|
@@ -4093,7 +4496,7 @@
|
|
|
4093
4496
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
4094
4497
|
},
|
|
4095
4498
|
"appliedBy": {
|
|
4096
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4499
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
4097
4500
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
4098
4501
|
},
|
|
4099
4502
|
"appliedAt": {
|
|
@@ -4109,23 +4512,23 @@
|
|
|
4109
4512
|
"milestones": {
|
|
4110
4513
|
"type": "array",
|
|
4111
4514
|
"items": {
|
|
4112
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4515
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
4113
4516
|
},
|
|
4114
4517
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
4115
4518
|
},
|
|
4116
4519
|
"signature": {
|
|
4117
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4520
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
4118
4521
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
4119
4522
|
},
|
|
4120
4523
|
"evidence": {
|
|
4121
4524
|
"type": "array",
|
|
4122
4525
|
"items": {
|
|
4123
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4526
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
4124
4527
|
},
|
|
4125
4528
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
4126
4529
|
},
|
|
4127
4530
|
"previousChecksum": {
|
|
4128
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4531
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4129
4532
|
"description": "SHA-256 checksum of the previous amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment on a requirement."
|
|
4130
4533
|
}
|
|
4131
4534
|
},
|
|
@@ -4268,17 +4671,9 @@
|
|
|
4268
4671
|
"Integrity": {
|
|
4269
4672
|
"type": "object",
|
|
4270
4673
|
"unevaluatedProperties": false,
|
|
4271
|
-
"dependentRequired": {
|
|
4272
|
-
"algorithm": [
|
|
4273
|
-
"checksum"
|
|
4274
|
-
],
|
|
4275
|
-
"checksum": [
|
|
4276
|
-
"algorithm"
|
|
4277
|
-
]
|
|
4278
|
-
},
|
|
4279
4674
|
"properties": {
|
|
4280
4675
|
"algorithm": {
|
|
4281
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4676
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
|
|
4282
4677
|
"description": "The hash algorithm used for the checksum."
|
|
4283
4678
|
},
|
|
4284
4679
|
"checksum": {
|
|
@@ -4307,13 +4702,39 @@
|
|
|
4307
4702
|
}
|
|
4308
4703
|
],
|
|
4309
4704
|
"description": "Cryptographic integrity information for verifying the HDF file has not been tampered with. If algorithm is provided, checksum must also be provided, and vice versa.",
|
|
4310
|
-
"title": "Integrity"
|
|
4705
|
+
"title": "Integrity",
|
|
4706
|
+
"allOf": [
|
|
4707
|
+
{
|
|
4708
|
+
"if": {
|
|
4709
|
+
"required": [
|
|
4710
|
+
"algorithm"
|
|
4711
|
+
]
|
|
4712
|
+
},
|
|
4713
|
+
"then": {
|
|
4714
|
+
"required": [
|
|
4715
|
+
"checksum"
|
|
4716
|
+
]
|
|
4717
|
+
}
|
|
4718
|
+
},
|
|
4719
|
+
{
|
|
4720
|
+
"if": {
|
|
4721
|
+
"required": [
|
|
4722
|
+
"checksum"
|
|
4723
|
+
]
|
|
4724
|
+
},
|
|
4725
|
+
"then": {
|
|
4726
|
+
"required": [
|
|
4727
|
+
"algorithm"
|
|
4728
|
+
]
|
|
4729
|
+
}
|
|
4730
|
+
}
|
|
4731
|
+
]
|
|
4311
4732
|
}
|
|
4312
4733
|
}
|
|
4313
4734
|
},
|
|
4314
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
4735
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
|
|
4315
4736
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4316
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
4737
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
|
|
4317
4738
|
"title": "HDF Amendment Primitives",
|
|
4318
4739
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
4319
4740
|
"$defs": {
|
|
@@ -4328,7 +4749,7 @@
|
|
|
4328
4749
|
"riskAdjustment",
|
|
4329
4750
|
"operationalRequirement"
|
|
4330
4751
|
],
|
|
4331
|
-
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
4752
|
+
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field; a status on it is rejected by validation.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
4332
4753
|
"title": "Override Type"
|
|
4333
4754
|
},
|
|
4334
4755
|
"Justification": {
|
|
@@ -4368,7 +4789,7 @@
|
|
|
4368
4789
|
},
|
|
4369
4790
|
"Standalone_Override": {
|
|
4370
4791
|
"type": "object",
|
|
4371
|
-
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation
|
|
4792
|
+
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation is gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact' may be set — the override records accepted risk without changing the finding (documentation-only). When type is 'riskAdjustment', 'status' may not be set — it re-rates the risk through 'impact' and never changes the finding's pass/fail; an override that must change status is a waiver or falsePositive. For all other types, at least one of 'status' or 'impact' must be set.\n\nThis rule aligns with:\n- OSCAL Assessment Results — finding.target.status and finding.associated-risk[].facet[] are separate axes (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/)\n- FedRAMP deviation request types — Risk Adjustment changes impact only, Operational Requirement documents acceptance only, False Positive changes status (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/)\n- NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).",
|
|
4372
4793
|
"unevaluatedProperties": false,
|
|
4373
4794
|
"required": [
|
|
4374
4795
|
"type",
|
|
@@ -4378,53 +4799,78 @@
|
|
|
4378
4799
|
"appliedAt",
|
|
4379
4800
|
"expiresAt"
|
|
4380
4801
|
],
|
|
4381
|
-
"
|
|
4382
|
-
|
|
4383
|
-
"
|
|
4384
|
-
"
|
|
4385
|
-
"
|
|
4802
|
+
"allOf": [
|
|
4803
|
+
{
|
|
4804
|
+
"if": {
|
|
4805
|
+
"properties": {
|
|
4806
|
+
"type": {
|
|
4807
|
+
"enum": [
|
|
4808
|
+
"operationalRequirement"
|
|
4809
|
+
]
|
|
4810
|
+
}
|
|
4811
|
+
},
|
|
4812
|
+
"required": [
|
|
4813
|
+
"type"
|
|
4814
|
+
]
|
|
4815
|
+
},
|
|
4816
|
+
"then": {
|
|
4817
|
+
"not": {
|
|
4818
|
+
"anyOf": [
|
|
4819
|
+
{
|
|
4820
|
+
"required": [
|
|
4821
|
+
"status"
|
|
4822
|
+
]
|
|
4823
|
+
},
|
|
4824
|
+
{
|
|
4825
|
+
"required": [
|
|
4826
|
+
"impact"
|
|
4827
|
+
]
|
|
4828
|
+
}
|
|
4829
|
+
]
|
|
4830
|
+
}
|
|
4831
|
+
},
|
|
4832
|
+
"else": {
|
|
4833
|
+
"anyOf": [
|
|
4834
|
+
{
|
|
4835
|
+
"required": [
|
|
4836
|
+
"status"
|
|
4837
|
+
]
|
|
4838
|
+
},
|
|
4839
|
+
{
|
|
4840
|
+
"required": [
|
|
4841
|
+
"impact"
|
|
4842
|
+
]
|
|
4843
|
+
}
|
|
4386
4844
|
]
|
|
4387
4845
|
}
|
|
4388
4846
|
},
|
|
4389
|
-
|
|
4390
|
-
"
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
"required": [
|
|
4398
|
-
"status"
|
|
4399
|
-
]
|
|
4847
|
+
{
|
|
4848
|
+
"if": {
|
|
4849
|
+
"properties": {
|
|
4850
|
+
"type": {
|
|
4851
|
+
"enum": [
|
|
4852
|
+
"riskAdjustment"
|
|
4853
|
+
]
|
|
4854
|
+
}
|
|
4400
4855
|
},
|
|
4401
|
-
{
|
|
4402
|
-
"required": [
|
|
4403
|
-
"impact"
|
|
4404
|
-
]
|
|
4405
|
-
}
|
|
4406
|
-
]
|
|
4407
|
-
}
|
|
4408
|
-
},
|
|
4409
|
-
"else": {
|
|
4410
|
-
"anyOf": [
|
|
4411
|
-
{
|
|
4412
4856
|
"required": [
|
|
4413
|
-
"
|
|
4857
|
+
"type"
|
|
4414
4858
|
]
|
|
4415
4859
|
},
|
|
4416
|
-
{
|
|
4417
|
-
"
|
|
4418
|
-
"
|
|
4419
|
-
|
|
4860
|
+
"then": {
|
|
4861
|
+
"not": {
|
|
4862
|
+
"required": [
|
|
4863
|
+
"status"
|
|
4864
|
+
]
|
|
4865
|
+
}
|
|
4420
4866
|
}
|
|
4421
|
-
|
|
4422
|
-
|
|
4867
|
+
}
|
|
4868
|
+
],
|
|
4423
4869
|
"properties": {
|
|
4424
4870
|
"externalReferences": {
|
|
4425
4871
|
"type": "array",
|
|
4426
4872
|
"items": {
|
|
4427
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4873
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
4428
4874
|
},
|
|
4429
4875
|
"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."
|
|
4430
4876
|
},
|
|
@@ -4435,15 +4881,15 @@
|
|
|
4435
4881
|
"requirementId": {
|
|
4436
4882
|
"type": "string",
|
|
4437
4883
|
"minLength": 1,
|
|
4438
|
-
"description": "The
|
|
4884
|
+
"description": "The id of the requirement being amended. An id names the requirement, not one finding, so the override applies to every requirement entry carrying that id in the baseline(s) it targets."
|
|
4439
4885
|
},
|
|
4440
4886
|
"baselineRef": {
|
|
4441
4887
|
"type": "string",
|
|
4442
4888
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
4443
4889
|
},
|
|
4444
4890
|
"status": {
|
|
4445
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
4446
|
-
"description": "The new status this
|
|
4891
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
4892
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
4447
4893
|
},
|
|
4448
4894
|
"impact": {
|
|
4449
4895
|
"$ref": "#/$defs/Impact_Override",
|
|
@@ -4454,7 +4900,7 @@
|
|
|
4454
4900
|
"description": "Justification for this amendment."
|
|
4455
4901
|
},
|
|
4456
4902
|
"appliedBy": {
|
|
4457
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4903
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
4458
4904
|
"description": "Identity of who applied this amendment."
|
|
4459
4905
|
},
|
|
4460
4906
|
"appliedAt": {
|
|
@@ -4470,20 +4916,20 @@
|
|
|
4470
4916
|
"evidence": {
|
|
4471
4917
|
"type": "array",
|
|
4472
4918
|
"items": {
|
|
4473
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4919
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
4474
4920
|
},
|
|
4475
4921
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
4476
4922
|
},
|
|
4477
4923
|
"signature": {
|
|
4478
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4924
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
4479
4925
|
"description": "Digital signature for non-repudiation."
|
|
4480
4926
|
},
|
|
4481
4927
|
"previousChecksum": {
|
|
4482
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4928
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4483
4929
|
"description": "SHA-256 checksum of the prior amendment in chronological order. Each amendment's checksum is recorded by the NEXT one, so editing an amendment in place is detectable — provided a later amendment is chained to it. It is NOT tamper-proof: the final amendment, the document envelope, deleted trailing amendments, and a chain that has been stripped or recomputed wholesale are all outside what it can detect. Use signature for non-repudiation. Omitted on the first amendment."
|
|
4484
4930
|
},
|
|
4485
4931
|
"cvss": {
|
|
4486
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4932
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
4487
4933
|
"$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.",
|
|
4488
4934
|
"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."
|
|
4489
4935
|
},
|
|
@@ -4494,7 +4940,7 @@
|
|
|
4494
4940
|
"milestones": {
|
|
4495
4941
|
"type": "array",
|
|
4496
4942
|
"items": {
|
|
4497
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4943
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
4498
4944
|
},
|
|
4499
4945
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
4500
4946
|
},
|
|
@@ -4511,7 +4957,7 @@
|
|
|
4511
4957
|
"affectedPackages": {
|
|
4512
4958
|
"type": "array",
|
|
4513
4959
|
"items": {
|
|
4514
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4960
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
4515
4961
|
},
|
|
4516
4962
|
"description": "Software packages this amendment is scoped to, distinct from componentRef (which scopes to an HDF-internal Component by UUID).\n\nUse 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.\n\nSymmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same package vocabulary.\n\nWhen omitted, the amendment applies system-wide (or only to componentRef when that is set)."
|
|
4517
4963
|
}
|
|
@@ -4644,9 +5090,9 @@
|
|
|
4644
5090
|
}
|
|
4645
5091
|
}
|
|
4646
5092
|
},
|
|
4647
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
5093
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
|
|
4648
5094
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4649
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
5095
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
|
|
4650
5096
|
"title": "HDF CVSS Primitives",
|
|
4651
5097
|
"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).",
|
|
4652
5098
|
"$defs": {
|
|
@@ -4843,9 +5289,9 @@
|
|
|
4843
5289
|
}
|
|
4844
5290
|
}
|
|
4845
5291
|
},
|
|
4846
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
5292
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
|
|
4847
5293
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4848
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
5294
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
|
|
4849
5295
|
"title": "HDF Affected Package Primitives",
|
|
4850
5296
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
4851
5297
|
"$defs": {
|
|
@@ -4953,9 +5399,9 @@
|
|
|
4953
5399
|
}
|
|
4954
5400
|
}
|
|
4955
5401
|
},
|
|
4956
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
5402
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0": {
|
|
4957
5403
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4958
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
5404
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0",
|
|
4959
5405
|
"title": "HDF Runner Primitive",
|
|
4960
5406
|
"description": "Information about the test execution environment where the security tool/scanner was executed.",
|
|
4961
5407
|
"$defs": {
|
|
@@ -4999,7 +5445,7 @@
|
|
|
4999
5445
|
"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."
|
|
5000
5446
|
},
|
|
5001
5447
|
"operator": {
|
|
5002
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5448
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
5003
5449
|
"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."
|
|
5004
5450
|
}
|
|
5005
5451
|
},
|
|
@@ -5048,9 +5494,9 @@
|
|
|
5048
5494
|
}
|
|
5049
5495
|
}
|
|
5050
5496
|
},
|
|
5051
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
5497
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0": {
|
|
5052
5498
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5053
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
5499
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0",
|
|
5054
5500
|
"title": "HDF Parameter Primitives",
|
|
5055
5501
|
"description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
|
|
5056
5502
|
"$defs": {
|
|
@@ -5102,7 +5548,8 @@
|
|
|
5102
5548
|
},
|
|
5103
5549
|
"allowedValues": {
|
|
5104
5550
|
"type": "array",
|
|
5105
|
-
"
|
|
5551
|
+
"items": true,
|
|
5552
|
+
"description": "Enumeration of permitted values. Each entry may be any JSON value, the same freedom Input.value has: an Array or Hash input enumerates container values, so no element type is imposed."
|
|
5106
5553
|
}
|
|
5107
5554
|
},
|
|
5108
5555
|
"description": "Validation constraints for an input value.",
|
|
@@ -5181,9 +5628,9 @@
|
|
|
5181
5628
|
}
|
|
5182
5629
|
}
|
|
5183
5630
|
},
|
|
5184
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
5631
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0": {
|
|
5185
5632
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5186
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
5633
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0",
|
|
5187
5634
|
"title": "HDF EPSS Primitive",
|
|
5188
5635
|
"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.",
|
|
5189
5636
|
"$defs": {
|
|
@@ -5238,9 +5685,9 @@
|
|
|
5238
5685
|
}
|
|
5239
5686
|
}
|
|
5240
5687
|
},
|
|
5241
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
5688
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0": {
|
|
5242
5689
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5243
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
5690
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0",
|
|
5244
5691
|
"title": "HDF Kev Primitives",
|
|
5245
5692
|
"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.",
|
|
5246
5693
|
"$defs": {
|