@mitre/hdf-schema 3.6.0-rc.5 → 3.7.0-rc.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 +10 -4
- package/dist/go/hdf.go +30 -12
- package/dist/index.js +28 -28
- package/dist/schemas/hdf-amendments.schema.json +100 -69
- package/dist/schemas/hdf-baseline.schema.json +105 -74
- package/dist/schemas/hdf-comparison.schema.json +201 -176
- package/dist/schemas/hdf-evidence-package.schema.json +105 -75
- package/dist/schemas/hdf-plan.schema.json +106 -75
- package/dist/schemas/hdf-requirement-change-event.schema.json +191 -169
- package/dist/schemas/hdf-results.schema.json +176 -150
- package/dist/schemas/hdf-system.schema.json +123 -96
- package/dist/ts/hdf.d.ts +24 -2
- package/dist/ts/hdf.ts +24 -2
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.7.0",
|
|
4
4
|
"title": "HDF System",
|
|
5
5
|
"description": "Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP system-characteristics and FedRAMP system inventory.",
|
|
6
6
|
"type": "object",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"externalReferences": {
|
|
14
14
|
"type": "array",
|
|
15
15
|
"items": {
|
|
16
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
16
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
|
|
17
17
|
},
|
|
18
18
|
"description": "Optional references to external artifacts describing this system's threat environment or context (CTI/STIX, BOMs, advisories, or any URI-addressable artifact). Inert context; see External_Reference."
|
|
19
19
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"description": "Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of file location. Optional in casual use, expected in production documents."
|
|
24
24
|
},
|
|
25
25
|
"owner": {
|
|
26
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
26
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
27
27
|
"description": "Team or individual responsible for this system's authorization and compliance. Maps to OSCAL responsible-party with role 'system-owner'."
|
|
28
28
|
},
|
|
29
29
|
"name": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"description": "Description of the system's purpose and mission."
|
|
45
45
|
},
|
|
46
46
|
"authorizationStatus": {
|
|
47
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
47
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Authorization_Status",
|
|
48
48
|
"description": "Current Authorization to Operate (ATO) status."
|
|
49
49
|
},
|
|
50
50
|
"authorizationDate": {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"description": "Date the current authorization status was granted. ISO 8601 format."
|
|
54
54
|
},
|
|
55
55
|
"categorizationLevel": {
|
|
56
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
56
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Categorization_Level",
|
|
57
57
|
"description": "FIPS 199 security categorization (impact level)."
|
|
58
58
|
},
|
|
59
59
|
"boundaryDescription": {
|
|
@@ -64,28 +64,28 @@
|
|
|
64
64
|
"type": "array",
|
|
65
65
|
"minItems": 1,
|
|
66
66
|
"items": {
|
|
67
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
67
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0#/$defs/Component"
|
|
68
68
|
},
|
|
69
69
|
"description": "System components within the authorization boundary. Uses the full polymorphic Component type with stable identity (componentId), external references, and generalized BOM attachment (boms[])."
|
|
70
70
|
},
|
|
71
71
|
"controlDesignations": {
|
|
72
72
|
"type": "array",
|
|
73
73
|
"items": {
|
|
74
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
74
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Control_Designation"
|
|
75
75
|
},
|
|
76
76
|
"description": "Declares which controls are common, hybrid, or system-specific, and which component provides them. Maps to NIST SP 800-53 control designations and OSCAL leveraged-authorizations."
|
|
77
77
|
},
|
|
78
78
|
"dataFlows": {
|
|
79
79
|
"type": "array",
|
|
80
80
|
"items": {
|
|
81
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
81
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0#/$defs/Data_Flow"
|
|
82
82
|
},
|
|
83
83
|
"description": "Inter-component data flows describing how components communicate. Supports local, cross-system, and external flows. Replaces the interconnections[] field."
|
|
84
84
|
},
|
|
85
85
|
"boms": {
|
|
86
86
|
"type": "array",
|
|
87
87
|
"items": {
|
|
88
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
88
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
|
|
89
89
|
},
|
|
90
90
|
"description": "System-scoped Bills of Materials whose subject is the authorization boundary rather than a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM). Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See primitives/bom.schema.json."
|
|
91
91
|
},
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"description": "Optional key-value labels for grouping and querying systems."
|
|
98
98
|
},
|
|
99
99
|
"integrity": {
|
|
100
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
100
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
|
|
101
101
|
"description": "Cryptographic integrity information for verifying this system document has not been tampered with."
|
|
102
102
|
},
|
|
103
103
|
"version": {
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"description": "Version of this system document."
|
|
106
106
|
},
|
|
107
107
|
"generator": {
|
|
108
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
108
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
|
|
109
109
|
"description": "Information about the tool that generated this system document."
|
|
110
110
|
}
|
|
111
111
|
},
|
|
@@ -158,9 +158,9 @@
|
|
|
158
158
|
}
|
|
159
159
|
],
|
|
160
160
|
"$defs": {
|
|
161
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
161
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0": {
|
|
162
162
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
163
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
163
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0",
|
|
164
164
|
"title": "HDF Common Primitives",
|
|
165
165
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
166
166
|
"$defs": {
|
|
@@ -240,22 +240,20 @@
|
|
|
240
240
|
}
|
|
241
241
|
},
|
|
242
242
|
"unevaluatedProperties": false,
|
|
243
|
+
"$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.",
|
|
243
244
|
"examples": [
|
|
244
245
|
{
|
|
245
|
-
"$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
|
|
246
246
|
"sourceName": "cve",
|
|
247
247
|
"externalId": "CVE-2021-44228",
|
|
248
248
|
"rel": "definition"
|
|
249
249
|
},
|
|
250
250
|
{
|
|
251
|
-
"$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
|
|
252
251
|
"sourceName": "mitre-att&ck",
|
|
253
252
|
"externalId": "T1059",
|
|
254
253
|
"href": "https://attack.mitre.org/techniques/T1059/",
|
|
255
254
|
"rel": "canonical"
|
|
256
255
|
},
|
|
257
256
|
{
|
|
258
|
-
"$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
|
|
259
257
|
"sourceName": "stix",
|
|
260
258
|
"href": "https://cti.example.org/bundles/log4shell.json",
|
|
261
259
|
"rel": "investigate",
|
|
@@ -271,7 +269,6 @@
|
|
|
271
269
|
"addedAt": "2026-07-26T00:00:00Z"
|
|
272
270
|
},
|
|
273
271
|
{
|
|
274
|
-
"$comment": "Enrichment envelope: a STIX threat-intel object embedded losslessly in `document` and classified via `kind`, cited by id and pointed at by href — the pointer and the embedded copy compose. The payload rides verbatim; HDF does not normalize STIX fields.",
|
|
275
272
|
"sourceName": "stix",
|
|
276
273
|
"externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
|
|
277
274
|
"href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
|
|
@@ -603,6 +600,24 @@
|
|
|
603
600
|
"type",
|
|
604
601
|
"data"
|
|
605
602
|
],
|
|
603
|
+
"if": {
|
|
604
|
+
"properties": {
|
|
605
|
+
"encoding": {
|
|
606
|
+
"const": "base64"
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
"required": [
|
|
610
|
+
"encoding"
|
|
611
|
+
]
|
|
612
|
+
},
|
|
613
|
+
"then": {
|
|
614
|
+
"properties": {
|
|
615
|
+
"data": {
|
|
616
|
+
"pattern": "^[0-9A-Za-z+/]+={0,2}$",
|
|
617
|
+
"contentEncoding": "base64"
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
},
|
|
606
621
|
"properties": {
|
|
607
622
|
"type": {
|
|
608
623
|
"type": "string",
|
|
@@ -619,7 +634,8 @@
|
|
|
619
634
|
},
|
|
620
635
|
"data": {
|
|
621
636
|
"type": "string",
|
|
622
|
-
"
|
|
637
|
+
"minLength": 1,
|
|
638
|
+
"description": "The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs: the raw text. For URLs: the URL string. Must not be empty. When encoding is 'base64', data must be bare base64 matching ^[0-9A-Za-z+/]+={0,2}$ (OSCAL's Base64Datatype): no data: URI prefix, URL, or line breaks."
|
|
623
639
|
},
|
|
624
640
|
"description": {
|
|
625
641
|
"type": "string",
|
|
@@ -631,7 +647,7 @@
|
|
|
631
647
|
},
|
|
632
648
|
"encoding": {
|
|
633
649
|
"type": "string",
|
|
634
|
-
"description": "Encoding used for the data. Example: 'base64', 'utf-8'."
|
|
650
|
+
"description": "Encoding used for the data. Example: 'base64', 'utf-8'. The value 'base64' (exactly, lowercase) requires data to be bare base64."
|
|
635
651
|
},
|
|
636
652
|
"size": {
|
|
637
653
|
"type": "number",
|
|
@@ -695,6 +711,7 @@
|
|
|
695
711
|
}
|
|
696
712
|
}
|
|
697
713
|
],
|
|
714
|
+
"$comment": "Examples, in order: 1) base64-encoded PNG screenshot with full capture provenance; 2) raw configuration text; 3) log excerpt; 4) URL to an external ticket; 5) base64-encoded file captured by an automated system.",
|
|
698
715
|
"description": "Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts, or URLs.",
|
|
699
716
|
"title": "Evidence"
|
|
700
717
|
},
|
|
@@ -772,6 +789,13 @@
|
|
|
772
789
|
"status"
|
|
773
790
|
],
|
|
774
791
|
"properties": {
|
|
792
|
+
"title": {
|
|
793
|
+
"type": "string",
|
|
794
|
+
"minLength": 1,
|
|
795
|
+
"pattern": "^[^ \\t\\n\\r]([^\\n\\r]*[^ \\t\\n\\r])?$",
|
|
796
|
+
"$comment": "The pattern is OSCAL's StringDatatype (\\S(.*\\S)?) as its XSD defines \\S and '.', spelled with explicit classes so ECMA-262 and Go regexp engines agree: \\S and '.' differ between them on CR and non-ASCII whitespace.",
|
|
797
|
+
"description": "Short single-line label for this milestone, suitable where a consumer needs a title (for example an OSCAL POA&M remediation or task). No line breaks, and no leading or trailing whitespace. The description remains the full text of the milestone; the title does not replace it."
|
|
798
|
+
},
|
|
775
799
|
"description": {
|
|
776
800
|
"type": "string",
|
|
777
801
|
"description": "Description of this milestone or task."
|
|
@@ -801,6 +825,25 @@
|
|
|
801
825
|
"description": "Identity of who completed this milestone."
|
|
802
826
|
}
|
|
803
827
|
},
|
|
828
|
+
"examples": [
|
|
829
|
+
{
|
|
830
|
+
"title": "Deploy OpenSSH 9.8p1",
|
|
831
|
+
"description": "Upgrade OpenSSH to 9.8p1 on every RHEL 9 host in the web tier to remediate CVE-2024-6387, then restart sshd during the Saturday maintenance window.",
|
|
832
|
+
"estimatedCompletion": "2026-10-31T00:00:00Z",
|
|
833
|
+
"status": "inProgress"
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"description": "Isolate the affected host on a restricted VLAN until the vendor patch is available.",
|
|
837
|
+
"estimatedCompletion": "2026-09-05T00:00:00Z",
|
|
838
|
+
"status": "completed",
|
|
839
|
+
"completedAt": "2026-09-04T14:30:00Z",
|
|
840
|
+
"completedBy": {
|
|
841
|
+
"identifier": "network-admin@example.com",
|
|
842
|
+
"type": "email"
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
],
|
|
846
|
+
"$comment": "Examples, in order: 1) titled milestone in progress — the title is the short label, the description the full remediation text; 2) untitled completed milestone with completion provenance — title is optional, and a consumer needing one derives it.",
|
|
804
847
|
"description": "A milestone or task within a POA&M remediation plan.",
|
|
805
848
|
"title": "Milestone"
|
|
806
849
|
},
|
|
@@ -1090,9 +1133,9 @@
|
|
|
1090
1133
|
"description": "Whether the requirement is mandatory within its baseline.\n\nDistinct from severity (risk weight) and status (lifecycle state).\n\nMaps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop, FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).\n\nOptional: when omitted, consumers should treat the requirement as 'required' by convention."
|
|
1091
1134
|
}
|
|
1092
1135
|
},
|
|
1136
|
+
"$comment": "Examples, in order: 1) v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape for backward compatibility; 2) v3.2 example populating all three classification fields. controlType=technical because AC-3 is enforced via configuration, not policy text. verificationMethod=automated because a check exists. applicability=required because this is a CORE control in the source baseline; 3) v3.2 example for a manual-by-design requirement. FedRAMP 20x KSIs are statement-form: code is omitted (not null) and verificationMethod=manual-by-design distinguishes this from 'automation could exist but doesn't yet'. controlType=policy because this is an authored governance statement; 4) v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
|
|
1093
1137
|
"examples": [
|
|
1094
1138
|
{
|
|
1095
|
-
"$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
|
|
1096
1139
|
"id": "SV-238196",
|
|
1097
1140
|
"title": "The Ubuntu operating system must enforce password complexity",
|
|
1098
1141
|
"impact": 0.5,
|
|
@@ -1122,7 +1165,6 @@
|
|
|
1122
1165
|
]
|
|
1123
1166
|
},
|
|
1124
1167
|
{
|
|
1125
|
-
"$comment": "v3.2 example populating all three classification fields. controlType=technical because AC-3 is enforced via configuration, not policy text. verificationMethod=automated because a check exists. applicability=required because this is a CORE control in the source baseline.",
|
|
1126
1168
|
"id": "AC-3",
|
|
1127
1169
|
"title": "Access Enforcement",
|
|
1128
1170
|
"impact": 0.7,
|
|
@@ -1144,7 +1186,6 @@
|
|
|
1144
1186
|
"applicability": "required"
|
|
1145
1187
|
},
|
|
1146
1188
|
{
|
|
1147
|
-
"$comment": "v3.2 example for a manual-by-design requirement. FedRAMP 20x KSIs are statement-form: code is omitted (not null) and verificationMethod=manual-by-design distinguishes this from 'automation could exist but doesn't yet'. controlType=policy because this is an authored governance statement.",
|
|
1148
1189
|
"id": "KSI-CNA-01",
|
|
1149
1190
|
"title": "Cyber Security Plan documents the system",
|
|
1150
1191
|
"impact": 0.5,
|
|
@@ -1164,7 +1205,6 @@
|
|
|
1164
1205
|
"applicability": "required"
|
|
1165
1206
|
},
|
|
1166
1207
|
{
|
|
1167
|
-
"$comment": "v3.2 example for a STIG rule lacking a <fix>. Differs from manual-by-design: automation should exist, just not yet. applicability=advisory used here because the source format flagged it as recommended-but-not-mandatory; CIS-style IG memberships and FedRAMP 'Optional:' markers map onto applicability=optional or advisory similarly.",
|
|
1168
1208
|
"id": "SV-999999",
|
|
1169
1209
|
"title": "Example STIG rule pending automation",
|
|
1170
1210
|
"impact": 0.3,
|
|
@@ -1229,9 +1269,9 @@
|
|
|
1229
1269
|
}
|
|
1230
1270
|
}
|
|
1231
1271
|
},
|
|
1232
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1272
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0": {
|
|
1233
1273
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1234
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1274
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0",
|
|
1235
1275
|
"title": "HDF System Primitives",
|
|
1236
1276
|
"description": "Types for describing system architecture, authorization boundaries, and components.",
|
|
1237
1277
|
"$defs": {
|
|
@@ -1282,7 +1322,7 @@
|
|
|
1282
1322
|
"description": "Rationale for why this override is needed."
|
|
1283
1323
|
},
|
|
1284
1324
|
"approvedBy": {
|
|
1285
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1325
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
1286
1326
|
"description": "Identity of the person or system that approved this override."
|
|
1287
1327
|
}
|
|
1288
1328
|
},
|
|
@@ -1364,9 +1404,9 @@
|
|
|
1364
1404
|
}
|
|
1365
1405
|
}
|
|
1366
1406
|
},
|
|
1367
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1407
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0": {
|
|
1368
1408
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1369
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1409
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.7.0",
|
|
1370
1410
|
"title": "HDF Component Primitives",
|
|
1371
1411
|
"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).",
|
|
1372
1412
|
"$defs": {
|
|
@@ -1412,7 +1452,7 @@
|
|
|
1412
1452
|
"description": "Description of this component's role or purpose."
|
|
1413
1453
|
},
|
|
1414
1454
|
"owner": {
|
|
1415
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1455
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
1416
1456
|
"description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
|
|
1417
1457
|
},
|
|
1418
1458
|
"externalIds": {
|
|
@@ -1432,14 +1472,14 @@
|
|
|
1432
1472
|
"boms": {
|
|
1433
1473
|
"type": "array",
|
|
1434
1474
|
"items": {
|
|
1435
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
1475
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0#/$defs/Bom"
|
|
1436
1476
|
},
|
|
1437
1477
|
"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."
|
|
1438
1478
|
},
|
|
1439
1479
|
"integrity": {
|
|
1440
1480
|
"type": "array",
|
|
1441
1481
|
"items": {
|
|
1442
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1482
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
|
|
1443
1483
|
},
|
|
1444
1484
|
"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."
|
|
1445
1485
|
},
|
|
@@ -1453,12 +1493,12 @@
|
|
|
1453
1493
|
"inputOverrides": {
|
|
1454
1494
|
"type": "array",
|
|
1455
1495
|
"items": {
|
|
1456
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1496
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Input_Override"
|
|
1457
1497
|
},
|
|
1458
1498
|
"description": "System-specific overrides for baseline input values."
|
|
1459
1499
|
},
|
|
1460
1500
|
"targetSelector": {
|
|
1461
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1501
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.7.0#/$defs/Target_Selector",
|
|
1462
1502
|
"description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
|
|
1463
1503
|
}
|
|
1464
1504
|
},
|
|
@@ -1589,9 +1629,9 @@
|
|
|
1589
1629
|
}
|
|
1590
1630
|
}
|
|
1591
1631
|
],
|
|
1632
|
+
"$comment": "Examples, in order: 1) Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix; 2) Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
|
|
1592
1633
|
"examples": [
|
|
1593
1634
|
{
|
|
1594
|
-
"$comment": "Domain-joined host carrying all three identity fields separately: short hostname, FQDN, and the (distinct) directory domain. HOST_NAME and HOST_FQDN from a STIG checklist map here; note the AD domain differs from the FQDN's DNS suffix.",
|
|
1595
1635
|
"type": "host",
|
|
1596
1636
|
"name": "web-server-prod-01",
|
|
1597
1637
|
"componentId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
|
|
@@ -1607,7 +1647,6 @@
|
|
|
1607
1647
|
}
|
|
1608
1648
|
},
|
|
1609
1649
|
{
|
|
1610
|
-
"$comment": "Standalone/workgroup host: has a short hostname but no directory domain — 'domain' is omitted rather than fabricated from the FQDN suffix.",
|
|
1611
1650
|
"type": "host",
|
|
1612
1651
|
"name": "kiosk-lab-07",
|
|
1613
1652
|
"hostname": "kiosk-lab-07",
|
|
@@ -1742,7 +1781,7 @@
|
|
|
1742
1781
|
"const": "cloudAccount"
|
|
1743
1782
|
},
|
|
1744
1783
|
"provider": {
|
|
1745
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1784
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
|
|
1746
1785
|
"description": "Cloud provider."
|
|
1747
1786
|
},
|
|
1748
1787
|
"accountId": {
|
|
@@ -1781,7 +1820,7 @@
|
|
|
1781
1820
|
"const": "cloudResource"
|
|
1782
1821
|
},
|
|
1783
1822
|
"provider": {
|
|
1784
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1823
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Cloud_Provider",
|
|
1785
1824
|
"description": "Cloud provider."
|
|
1786
1825
|
},
|
|
1787
1826
|
"resourceType": {
|
|
@@ -2080,9 +2119,9 @@
|
|
|
2080
2119
|
}
|
|
2081
2120
|
}
|
|
2082
2121
|
},
|
|
2083
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2122
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0": {
|
|
2084
2123
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2085
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2124
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.7.0",
|
|
2086
2125
|
"title": "HDF BOM Primitives",
|
|
2087
2126
|
"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.",
|
|
2088
2127
|
"$defs": {
|
|
@@ -2138,7 +2177,7 @@
|
|
|
2138
2177
|
"hashes": {
|
|
2139
2178
|
"type": "array",
|
|
2140
2179
|
"items": {
|
|
2141
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2180
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum"
|
|
2142
2181
|
},
|
|
2143
2182
|
"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."
|
|
2144
2183
|
},
|
|
@@ -2255,9 +2294,9 @@
|
|
|
2255
2294
|
]
|
|
2256
2295
|
}
|
|
2257
2296
|
],
|
|
2297
|
+
"$comment": "Examples, in order: 1) Passthrough SBOM by external reference — the universal escape hatch, available to every bomType; 2) Passthrough for a reserved-but-not-yet-normalized type (cbom) — carried opaquely until a normalized extension ships; 3) Normalized ai-model BOM: CISA/G7-aligned fields live in the model extension, never at the component root or shared base; 4) Normalized dataset BOM with lineage — a filtered derivative of a base dataset, referenced by an ai-model via datasetRefs.",
|
|
2258
2298
|
"examples": [
|
|
2259
2299
|
{
|
|
2260
|
-
"$comment": "Passthrough SBOM by external reference — the universal escape hatch, available to every bomType.",
|
|
2261
2300
|
"bomType": "sbom",
|
|
2262
2301
|
"format": "cyclonedx",
|
|
2263
2302
|
"ref": "https://artifacts.agency.gov/sbom/webtier.cdx.json",
|
|
@@ -2269,7 +2308,6 @@
|
|
|
2269
2308
|
]
|
|
2270
2309
|
},
|
|
2271
2310
|
{
|
|
2272
|
-
"$comment": "Passthrough for a reserved-but-not-yet-normalized type (cbom) — carried opaquely until a normalized extension ships.",
|
|
2273
2311
|
"bomType": "cbom",
|
|
2274
2312
|
"format": "cyclonedx",
|
|
2275
2313
|
"document": {
|
|
@@ -2278,7 +2316,6 @@
|
|
|
2278
2316
|
}
|
|
2279
2317
|
},
|
|
2280
2318
|
{
|
|
2281
|
-
"$comment": "Normalized ai-model BOM: CISA/G7-aligned fields live in the model extension, never at the component root or shared base.",
|
|
2282
2319
|
"bomType": "ai-model",
|
|
2283
2320
|
"format": "cyclonedx-ml",
|
|
2284
2321
|
"model": {
|
|
@@ -2318,7 +2355,6 @@
|
|
|
2318
2355
|
}
|
|
2319
2356
|
},
|
|
2320
2357
|
{
|
|
2321
|
-
"$comment": "Normalized dataset BOM with lineage — a filtered derivative of a base dataset, referenced by an ai-model via datasetRefs.",
|
|
2322
2358
|
"bomType": "dataset",
|
|
2323
2359
|
"format": "croissant",
|
|
2324
2360
|
"dataset": {
|
|
@@ -2553,9 +2589,9 @@
|
|
|
2553
2589
|
}
|
|
2554
2590
|
}
|
|
2555
2591
|
},
|
|
2556
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
2592
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0": {
|
|
2557
2593
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2558
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
2594
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.7.0",
|
|
2559
2595
|
"title": "HDF Data Flow Primitives",
|
|
2560
2596
|
"description": "Types for describing data flows between components within a system and across system boundaries. Data flows model network connections, API calls, database queries, and other inter-component communication.",
|
|
2561
2597
|
"$defs": {
|
|
@@ -2712,9 +2748,9 @@
|
|
|
2712
2748
|
}
|
|
2713
2749
|
}
|
|
2714
2750
|
},
|
|
2715
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2751
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0": {
|
|
2716
2752
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2717
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2753
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0",
|
|
2718
2754
|
"title": "HDF Extension Primitives",
|
|
2719
2755
|
"description": "Extension types for waivers, attestations, generators, and integrity.",
|
|
2720
2756
|
"$defs": {
|
|
@@ -2744,20 +2780,20 @@
|
|
|
2744
2780
|
"externalReferences": {
|
|
2745
2781
|
"type": "array",
|
|
2746
2782
|
"items": {
|
|
2747
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2783
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
|
|
2748
2784
|
},
|
|
2749
2785
|
"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."
|
|
2750
2786
|
},
|
|
2751
2787
|
"type": {
|
|
2752
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2788
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
|
|
2753
2789
|
"description": "The type of override applied to this requirement."
|
|
2754
2790
|
},
|
|
2755
2791
|
"status": {
|
|
2756
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2792
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
|
|
2757
2793
|
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
2758
2794
|
},
|
|
2759
2795
|
"impact": {
|
|
2760
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2796
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Impact_Override",
|
|
2761
2797
|
"description": "Override to the requirement's impact score. At least one of status or impact must be set."
|
|
2762
2798
|
},
|
|
2763
2799
|
"reason": {
|
|
@@ -2765,7 +2801,7 @@
|
|
|
2765
2801
|
"description": "Explanation for why this override was applied."
|
|
2766
2802
|
},
|
|
2767
2803
|
"appliedBy": {
|
|
2768
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2804
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
2769
2805
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
2770
2806
|
},
|
|
2771
2807
|
"appliedAt": {
|
|
@@ -2779,30 +2815,31 @@
|
|
|
2779
2815
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
2780
2816
|
},
|
|
2781
2817
|
"signature": {
|
|
2782
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2818
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
2783
2819
|
"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."
|
|
2784
2820
|
},
|
|
2785
2821
|
"evidence": {
|
|
2786
2822
|
"type": "array",
|
|
2787
2823
|
"items": {
|
|
2788
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2824
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
2789
2825
|
},
|
|
2790
2826
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
2791
2827
|
},
|
|
2792
2828
|
"previousChecksum": {
|
|
2793
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2829
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
2794
2830
|
"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."
|
|
2795
2831
|
},
|
|
2796
2832
|
"cvss": {
|
|
2797
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
2833
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
|
|
2798
2834
|
"$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.",
|
|
2799
2835
|
"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."
|
|
2800
2836
|
},
|
|
2801
2837
|
"justification": {
|
|
2802
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2838
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Justification",
|
|
2803
2839
|
"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."
|
|
2804
2840
|
}
|
|
2805
2841
|
},
|
|
2842
|
+
"$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.",
|
|
2806
2843
|
"examples": [
|
|
2807
2844
|
{
|
|
2808
2845
|
"type": "waiver",
|
|
@@ -2829,7 +2866,6 @@
|
|
|
2829
2866
|
"expiresAt": "2026-10-14T00:00:00Z"
|
|
2830
2867
|
},
|
|
2831
2868
|
{
|
|
2832
|
-
"$comment": "Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute.",
|
|
2833
2869
|
"type": "riskAdjustment",
|
|
2834
2870
|
"impact": {
|
|
2835
2871
|
"value": 0.9
|
|
@@ -2892,7 +2928,7 @@
|
|
|
2892
2928
|
"evidence": [
|
|
2893
2929
|
{
|
|
2894
2930
|
"type": "screenshot",
|
|
2895
|
-
"data": "
|
|
2931
|
+
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
|
|
2896
2932
|
"description": "Screenshot showing firewall configuration",
|
|
2897
2933
|
"mimeType": "image/png",
|
|
2898
2934
|
"encoding": "base64",
|
|
@@ -2935,7 +2971,7 @@
|
|
|
2935
2971
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
2936
2972
|
},
|
|
2937
2973
|
"appliedBy": {
|
|
2938
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2974
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
2939
2975
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
2940
2976
|
},
|
|
2941
2977
|
"appliedAt": {
|
|
@@ -2951,23 +2987,23 @@
|
|
|
2951
2987
|
"milestones": {
|
|
2952
2988
|
"type": "array",
|
|
2953
2989
|
"items": {
|
|
2954
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2990
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
|
|
2955
2991
|
},
|
|
2956
2992
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
2957
2993
|
},
|
|
2958
2994
|
"signature": {
|
|
2959
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2995
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
2960
2996
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
2961
2997
|
},
|
|
2962
2998
|
"evidence": {
|
|
2963
2999
|
"type": "array",
|
|
2964
3000
|
"items": {
|
|
2965
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3001
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
2966
3002
|
},
|
|
2967
3003
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
2968
3004
|
},
|
|
2969
3005
|
"previousChecksum": {
|
|
2970
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3006
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
2971
3007
|
"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."
|
|
2972
3008
|
}
|
|
2973
3009
|
},
|
|
@@ -3120,7 +3156,7 @@
|
|
|
3120
3156
|
},
|
|
3121
3157
|
"properties": {
|
|
3122
3158
|
"algorithm": {
|
|
3123
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3159
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Hash_Algorithm",
|
|
3124
3160
|
"description": "The hash algorithm used for the checksum."
|
|
3125
3161
|
},
|
|
3126
3162
|
"checksum": {
|
|
@@ -3153,9 +3189,9 @@
|
|
|
3153
3189
|
}
|
|
3154
3190
|
}
|
|
3155
3191
|
},
|
|
3156
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3192
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0": {
|
|
3157
3193
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3158
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3194
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0",
|
|
3159
3195
|
"title": "HDF Amendment Primitives",
|
|
3160
3196
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
3161
3197
|
"$defs": {
|
|
@@ -3266,7 +3302,7 @@
|
|
|
3266
3302
|
"externalReferences": {
|
|
3267
3303
|
"type": "array",
|
|
3268
3304
|
"items": {
|
|
3269
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3305
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
|
|
3270
3306
|
},
|
|
3271
3307
|
"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."
|
|
3272
3308
|
},
|
|
@@ -3276,6 +3312,7 @@
|
|
|
3276
3312
|
},
|
|
3277
3313
|
"requirementId": {
|
|
3278
3314
|
"type": "string",
|
|
3315
|
+
"minLength": 1,
|
|
3279
3316
|
"description": "The ID of the requirement being amended. Must match a requirement ID in the referenced baseline."
|
|
3280
3317
|
},
|
|
3281
3318
|
"baselineRef": {
|
|
@@ -3283,7 +3320,7 @@
|
|
|
3283
3320
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
3284
3321
|
},
|
|
3285
3322
|
"status": {
|
|
3286
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3323
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
|
|
3287
3324
|
"description": "The new status this amendment sets. Optional when only impact is being overridden."
|
|
3288
3325
|
},
|
|
3289
3326
|
"impact": {
|
|
@@ -3295,7 +3332,7 @@
|
|
|
3295
3332
|
"description": "Justification for this amendment."
|
|
3296
3333
|
},
|
|
3297
3334
|
"appliedBy": {
|
|
3298
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3335
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
3299
3336
|
"description": "Identity of who applied this amendment."
|
|
3300
3337
|
},
|
|
3301
3338
|
"appliedAt": {
|
|
@@ -3311,20 +3348,20 @@
|
|
|
3311
3348
|
"evidence": {
|
|
3312
3349
|
"type": "array",
|
|
3313
3350
|
"items": {
|
|
3314
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3351
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
3315
3352
|
},
|
|
3316
3353
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
3317
3354
|
},
|
|
3318
3355
|
"signature": {
|
|
3319
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3356
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
3320
3357
|
"description": "Digital signature for non-repudiation."
|
|
3321
3358
|
},
|
|
3322
3359
|
"previousChecksum": {
|
|
3323
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3360
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
3324
3361
|
"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."
|
|
3325
3362
|
},
|
|
3326
3363
|
"cvss": {
|
|
3327
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3364
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
|
|
3328
3365
|
"$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.",
|
|
3329
3366
|
"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."
|
|
3330
3367
|
},
|
|
@@ -3335,7 +3372,7 @@
|
|
|
3335
3372
|
"milestones": {
|
|
3336
3373
|
"type": "array",
|
|
3337
3374
|
"items": {
|
|
3338
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3375
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
|
|
3339
3376
|
},
|
|
3340
3377
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
3341
3378
|
},
|
|
@@ -3352,11 +3389,12 @@
|
|
|
3352
3389
|
"affectedPackages": {
|
|
3353
3390
|
"type": "array",
|
|
3354
3391
|
"items": {
|
|
3355
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3392
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
|
|
3356
3393
|
},
|
|
3357
3394
|
"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)."
|
|
3358
3395
|
}
|
|
3359
3396
|
},
|
|
3397
|
+
"$comment": "Example 7: VEX-style import — falsePositive scoped to specific packages by purl. The affectedPackages array carries structured product identity instead of squeezing 'Products: …' into the reason free-text field.",
|
|
3360
3398
|
"examples": [
|
|
3361
3399
|
{
|
|
3362
3400
|
"type": "waiver",
|
|
@@ -3458,7 +3496,6 @@
|
|
|
3458
3496
|
"expiresAt": "2026-09-26T00:00:00Z"
|
|
3459
3497
|
},
|
|
3460
3498
|
{
|
|
3461
|
-
"$comment": "VEX-style import — falsePositive scoped to specific packages by purl. The affectedPackages array carries structured product identity instead of squeezing 'Products: …' into the reason free-text field.",
|
|
3462
3499
|
"type": "falsePositive",
|
|
3463
3500
|
"requirementId": "CVE-2026-12345",
|
|
3464
3501
|
"status": "notApplicable",
|
|
@@ -3485,9 +3522,9 @@
|
|
|
3485
3522
|
}
|
|
3486
3523
|
}
|
|
3487
3524
|
},
|
|
3488
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3525
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0": {
|
|
3489
3526
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3490
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3527
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0",
|
|
3491
3528
|
"title": "HDF Result Primitives",
|
|
3492
3529
|
"description": "Types for representing assessment results and statuses.",
|
|
3493
3530
|
"$defs": {
|
|
@@ -3618,9 +3655,9 @@
|
|
|
3618
3655
|
}
|
|
3619
3656
|
}
|
|
3620
3657
|
},
|
|
3621
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3658
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0": {
|
|
3622
3659
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3623
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3660
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0",
|
|
3624
3661
|
"title": "HDF CVSS Primitives",
|
|
3625
3662
|
"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).",
|
|
3626
3663
|
"$defs": {
|
|
@@ -3684,7 +3721,7 @@
|
|
|
3684
3721
|
]
|
|
3685
3722
|
}
|
|
3686
3723
|
],
|
|
3687
|
-
"$comment": "Only `version` is required; every metric/score field is optional because a single Cvss instance may represent vendor-supplied Base data (on a finding's cvss[]), consumer-supplied enrichment (on a riskAdjustment override — Environmental/Threat/Supplemental deltas with NO base, since base is the finding's scan-specific vendor data), or a fully-resolved effectiveCvss. The Base/Threat/Environmental/Supplemental groups do not partition cleanly into vendor-vs-consumer (Threat straddles: vendor temporal data and consumer exploit-maturity both live here), so a single permissive type is more honest than separate vendor/consumer types. The anyOf guardrail rejects a content-free object (e.g. {version} alone) by requiring at least one substantive metric or score. baseVector remains optional even when baseScore is present: some vendor tools (Twistlock/Prisma Cloud) emit a final score without the vector that derived it — that score is captured structurally rather than lost.",
|
|
3724
|
+
"$comment": "Only `version` is required; every metric/score field is optional because a single Cvss instance may represent vendor-supplied Base data (on a finding's cvss[]), consumer-supplied enrichment (on a riskAdjustment override — Environmental/Threat/Supplemental deltas with NO base, since base is the finding's scan-specific vendor data), or a fully-resolved effectiveCvss. The Base/Threat/Environmental/Supplemental groups do not partition cleanly into vendor-vs-consumer (Threat straddles: vendor temporal data and consumer exploit-maturity both live here), so a single permissive type is more honest than separate vendor/consumer types. The anyOf guardrail rejects a content-free object (e.g. {version} alone) by requiring at least one substantive metric or score. baseVector remains optional even when baseScore is present: some vendor tools (Twistlock/Prisma Cloud) emit a final score without the vector that derived it — that score is captured structurally rather than lost. Examples, in order: 1) Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet; 2) Base + Threat: consumer added Exploit Maturity ('E:U' = Unproven) and Remediation Level ('RL:O' = Official Fix) to a HTTP/2 'Rapid Reset' DoS finding. Threat score drops from base 7.5 to 5.5; 3) Base + Environmental: consumer asserts the affected system is high-criticality (CR:H, IR:H, AR:H) AND network-reachable in their environment (MAV:N). Environmental score reflects deployment risk for the xz-utils backdoor; 4) Full CVSS 4.0: vendor base + consumer threat (E:A = Attacked, exploits seen in the wild) + environmental (high CIA requirements) + supplemental context (S:P = present safety impact, AU:N = no autonomous spread, RE:M = moderate response effort) for the Fortinet FortiOS pre-auth RCE. computedScore reflects post-mitigation final risk; 5) CVSS 2.0 legacy: Heartbleed (CVE-2014-0160) as still reported by older scanner output and legacy NVD data. CVSS 2.0 vectors have no 'CVSS:2.0/' prefix.",
|
|
3688
3725
|
"properties": {
|
|
3689
3726
|
"version": {
|
|
3690
3727
|
"type": "string",
|
|
@@ -3764,7 +3801,6 @@
|
|
|
3764
3801
|
},
|
|
3765
3802
|
"examples": [
|
|
3766
3803
|
{
|
|
3767
|
-
"$comment": "Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet.",
|
|
3768
3804
|
"version": "3.1",
|
|
3769
3805
|
"source": "CVE-2024-12345",
|
|
3770
3806
|
"baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
|
|
@@ -3772,7 +3808,6 @@
|
|
|
3772
3808
|
"baseSeverity": "critical"
|
|
3773
3809
|
},
|
|
3774
3810
|
{
|
|
3775
|
-
"$comment": "Base + Threat: consumer added Exploit Maturity ('E:U' = Unproven) and Remediation Level ('RL:O' = Official Fix) to a HTTP/2 'Rapid Reset' DoS finding. Threat score drops from base 7.5 to 5.5.",
|
|
3776
3811
|
"version": "3.1",
|
|
3777
3812
|
"source": "CVE-2023-44487",
|
|
3778
3813
|
"baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
|
|
@@ -3782,7 +3817,6 @@
|
|
|
3782
3817
|
"threatScore": 5.5
|
|
3783
3818
|
},
|
|
3784
3819
|
{
|
|
3785
|
-
"$comment": "Base + Environmental: consumer asserts the affected system is high-criticality (CR:H, IR:H, AR:H) AND network-reachable in their environment (MAV:N). Environmental score reflects deployment risk for the xz-utils backdoor.",
|
|
3786
3820
|
"version": "3.1",
|
|
3787
3821
|
"source": "CVE-2024-3094",
|
|
3788
3822
|
"baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
|
|
@@ -3794,7 +3828,6 @@
|
|
|
3794
3828
|
"computedSeverity": "critical"
|
|
3795
3829
|
},
|
|
3796
3830
|
{
|
|
3797
|
-
"$comment": "Full CVSS 4.0: vendor base + consumer threat (E:A = Attacked, exploits seen in the wild) + environmental (high CIA requirements) + supplemental context (S:P = present safety impact, AU:N = no autonomous spread, RE:M = moderate response effort) for the Fortinet FortiOS pre-auth RCE. computedScore reflects post-mitigation final risk.",
|
|
3798
3831
|
"version": "4.0",
|
|
3799
3832
|
"source": "CVE-2024-21762",
|
|
3800
3833
|
"baseVector": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
|
|
@@ -3809,7 +3842,6 @@
|
|
|
3809
3842
|
"computedSeverity": "medium"
|
|
3810
3843
|
},
|
|
3811
3844
|
{
|
|
3812
|
-
"$comment": "CVSS 2.0 legacy: Heartbleed (CVE-2014-0160) as still reported by older scanner output and legacy NVD data. CVSS 2.0 vectors have no 'CVSS:2.0/' prefix.",
|
|
3813
3845
|
"version": "2.0",
|
|
3814
3846
|
"source": "CVE-2014-0160",
|
|
3815
3847
|
"baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
|
|
@@ -3822,9 +3854,9 @@
|
|
|
3822
3854
|
}
|
|
3823
3855
|
}
|
|
3824
3856
|
},
|
|
3825
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3857
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0": {
|
|
3826
3858
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3827
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3859
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0",
|
|
3828
3860
|
"title": "HDF Affected Package Primitives",
|
|
3829
3861
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
3830
3862
|
"$defs": {
|
|
@@ -3890,9 +3922,9 @@
|
|
|
3890
3922
|
"description": "Optional version string identifying the first release that contains the fix for the vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes 'openssl@1.1.1k'."
|
|
3891
3923
|
}
|
|
3892
3924
|
},
|
|
3925
|
+
"$comment": "Examples, in order: 1) RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan; 2) NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier; 3) Minimal valid AffectedPackage — only the three required fields. Use when the scanner reports a package by name+version without emitting CPE or PURL strings; 4) Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed; 5) purl-only — VEX import path where the source format gives a purl and we choose not to decompose it. Valid because purl encodes name/version/ecosystem implicitly; 6) cpe-only — NIST-flavored scopes where the consumer carries a CPE 2.3 string and no purl. Valid because cpe encodes vendor/product/version.",
|
|
3893
3926
|
"examples": [
|
|
3894
3927
|
{
|
|
3895
|
-
"$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
|
|
3896
3928
|
"name": "openssl",
|
|
3897
3929
|
"version": "1.1.1k-7.el8_4",
|
|
3898
3930
|
"ecosystem": "rpm",
|
|
@@ -3901,7 +3933,6 @@
|
|
|
3901
3933
|
"fixedInVersion": "1.1.1l"
|
|
3902
3934
|
},
|
|
3903
3935
|
{
|
|
3904
|
-
"$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
|
|
3905
3936
|
"name": "lodash",
|
|
3906
3937
|
"version": "4.17.20",
|
|
3907
3938
|
"ecosystem": "npm",
|
|
@@ -3909,13 +3940,11 @@
|
|
|
3909
3940
|
"fixedInVersion": "4.17.21"
|
|
3910
3941
|
},
|
|
3911
3942
|
{
|
|
3912
|
-
"$comment": "Minimal valid AffectedPackage — only the three required fields. Use when the scanner reports a package by name+version without emitting CPE or PURL strings.",
|
|
3913
3943
|
"name": "requests",
|
|
3914
3944
|
"version": "2.28.1",
|
|
3915
3945
|
"ecosystem": "pypi"
|
|
3916
3946
|
},
|
|
3917
3947
|
{
|
|
3918
|
-
"$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
|
|
3919
3948
|
"name": "org.apache.logging.log4j:log4j-core",
|
|
3920
3949
|
"version": "2.14.1",
|
|
3921
3950
|
"ecosystem": "maven",
|
|
@@ -3924,11 +3953,9 @@
|
|
|
3924
3953
|
"fixedInVersion": "2.17.1"
|
|
3925
3954
|
},
|
|
3926
3955
|
{
|
|
3927
|
-
"$comment": "purl-only — VEX import path where the source format gives a purl and we choose not to decompose it. Valid because purl encodes name/version/ecosystem implicitly.",
|
|
3928
3956
|
"purl": "pkg:npm/lodash@4.17.20"
|
|
3929
3957
|
},
|
|
3930
3958
|
{
|
|
3931
|
-
"$comment": "cpe-only — NIST-flavored scopes where the consumer carries a CPE 2.3 string and no purl. Valid because cpe encodes vendor/product/version.",
|
|
3932
3959
|
"cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
|
|
3933
3960
|
}
|
|
3934
3961
|
],
|