@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-amendments/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-amendments/v3.7.0",
|
|
4
4
|
"title": "HDF Amendments",
|
|
5
5
|
"description": "Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments are standalone documents that can be applied to results via merge operations.",
|
|
6
6
|
"type": "object",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
"description": "URI to the hdf-system document these amendments apply to."
|
|
30
30
|
},
|
|
31
31
|
"appliedBy": {
|
|
32
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
32
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
33
33
|
"description": "Default identity of who created this amendments document. Individual overrides may specify their own appliedBy."
|
|
34
34
|
},
|
|
35
35
|
"approvedBy": {
|
|
36
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
36
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
37
37
|
"description": "Identity of the authorizing official who approved these amendments."
|
|
38
38
|
},
|
|
39
39
|
"overrides": {
|
|
40
40
|
"type": "array",
|
|
41
41
|
"minItems": 1,
|
|
42
42
|
"items": {
|
|
43
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
43
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Standalone_Override"
|
|
44
44
|
},
|
|
45
45
|
"description": "The set of amendments (waivers, attestations, POA&Ms, and other overrides)."
|
|
46
46
|
},
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"description": "Optional key-value labels for grouping and querying amendments."
|
|
53
53
|
},
|
|
54
54
|
"integrity": {
|
|
55
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
55
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Integrity",
|
|
56
56
|
"description": "Cryptographic integrity information for verifying this amendments document has not been tampered with."
|
|
57
57
|
},
|
|
58
58
|
"signature": {
|
|
59
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
59
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
60
60
|
"description": "Document-level digital signature covering all amendments."
|
|
61
61
|
},
|
|
62
62
|
"version": {
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"description": "Version of this amendments document."
|
|
65
65
|
},
|
|
66
66
|
"generator": {
|
|
67
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
67
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0#/$defs/Generator",
|
|
68
68
|
"description": "Information about the tool that generated this document."
|
|
69
69
|
}
|
|
70
70
|
},
|
|
@@ -101,9 +101,9 @@
|
|
|
101
101
|
}
|
|
102
102
|
],
|
|
103
103
|
"$defs": {
|
|
104
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
104
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0": {
|
|
105
105
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
106
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
106
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0",
|
|
107
107
|
"title": "HDF Common Primitives",
|
|
108
108
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
109
109
|
"$defs": {
|
|
@@ -183,22 +183,20 @@
|
|
|
183
183
|
}
|
|
184
184
|
},
|
|
185
185
|
"unevaluatedProperties": false,
|
|
186
|
+
"$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.",
|
|
186
187
|
"examples": [
|
|
187
188
|
{
|
|
188
|
-
"$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
|
|
189
189
|
"sourceName": "cve",
|
|
190
190
|
"externalId": "CVE-2021-44228",
|
|
191
191
|
"rel": "definition"
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
|
-
"$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
|
|
195
194
|
"sourceName": "mitre-att&ck",
|
|
196
195
|
"externalId": "T1059",
|
|
197
196
|
"href": "https://attack.mitre.org/techniques/T1059/",
|
|
198
197
|
"rel": "canonical"
|
|
199
198
|
},
|
|
200
199
|
{
|
|
201
|
-
"$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
|
|
202
200
|
"sourceName": "stix",
|
|
203
201
|
"href": "https://cti.example.org/bundles/log4shell.json",
|
|
204
202
|
"rel": "investigate",
|
|
@@ -214,7 +212,6 @@
|
|
|
214
212
|
"addedAt": "2026-07-26T00:00:00Z"
|
|
215
213
|
},
|
|
216
214
|
{
|
|
217
|
-
"$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.",
|
|
218
215
|
"sourceName": "stix",
|
|
219
216
|
"externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
|
|
220
217
|
"href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
|
|
@@ -546,6 +543,24 @@
|
|
|
546
543
|
"type",
|
|
547
544
|
"data"
|
|
548
545
|
],
|
|
546
|
+
"if": {
|
|
547
|
+
"properties": {
|
|
548
|
+
"encoding": {
|
|
549
|
+
"const": "base64"
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"required": [
|
|
553
|
+
"encoding"
|
|
554
|
+
]
|
|
555
|
+
},
|
|
556
|
+
"then": {
|
|
557
|
+
"properties": {
|
|
558
|
+
"data": {
|
|
559
|
+
"pattern": "^[0-9A-Za-z+/]+={0,2}$",
|
|
560
|
+
"contentEncoding": "base64"
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
},
|
|
549
564
|
"properties": {
|
|
550
565
|
"type": {
|
|
551
566
|
"type": "string",
|
|
@@ -562,7 +577,8 @@
|
|
|
562
577
|
},
|
|
563
578
|
"data": {
|
|
564
579
|
"type": "string",
|
|
565
|
-
"
|
|
580
|
+
"minLength": 1,
|
|
581
|
+
"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."
|
|
566
582
|
},
|
|
567
583
|
"description": {
|
|
568
584
|
"type": "string",
|
|
@@ -574,7 +590,7 @@
|
|
|
574
590
|
},
|
|
575
591
|
"encoding": {
|
|
576
592
|
"type": "string",
|
|
577
|
-
"description": "Encoding used for the data. Example: 'base64', 'utf-8'."
|
|
593
|
+
"description": "Encoding used for the data. Example: 'base64', 'utf-8'. The value 'base64' (exactly, lowercase) requires data to be bare base64."
|
|
578
594
|
},
|
|
579
595
|
"size": {
|
|
580
596
|
"type": "number",
|
|
@@ -638,6 +654,7 @@
|
|
|
638
654
|
}
|
|
639
655
|
}
|
|
640
656
|
],
|
|
657
|
+
"$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.",
|
|
641
658
|
"description": "Supporting evidence for a finding or override, such as screenshots, code samples, log excerpts, or URLs.",
|
|
642
659
|
"title": "Evidence"
|
|
643
660
|
},
|
|
@@ -715,6 +732,13 @@
|
|
|
715
732
|
"status"
|
|
716
733
|
],
|
|
717
734
|
"properties": {
|
|
735
|
+
"title": {
|
|
736
|
+
"type": "string",
|
|
737
|
+
"minLength": 1,
|
|
738
|
+
"pattern": "^[^ \\t\\n\\r]([^\\n\\r]*[^ \\t\\n\\r])?$",
|
|
739
|
+
"$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.",
|
|
740
|
+
"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."
|
|
741
|
+
},
|
|
718
742
|
"description": {
|
|
719
743
|
"type": "string",
|
|
720
744
|
"description": "Description of this milestone or task."
|
|
@@ -744,6 +768,25 @@
|
|
|
744
768
|
"description": "Identity of who completed this milestone."
|
|
745
769
|
}
|
|
746
770
|
},
|
|
771
|
+
"examples": [
|
|
772
|
+
{
|
|
773
|
+
"title": "Deploy OpenSSH 9.8p1",
|
|
774
|
+
"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.",
|
|
775
|
+
"estimatedCompletion": "2026-10-31T00:00:00Z",
|
|
776
|
+
"status": "inProgress"
|
|
777
|
+
},
|
|
778
|
+
{
|
|
779
|
+
"description": "Isolate the affected host on a restricted VLAN until the vendor patch is available.",
|
|
780
|
+
"estimatedCompletion": "2026-09-05T00:00:00Z",
|
|
781
|
+
"status": "completed",
|
|
782
|
+
"completedAt": "2026-09-04T14:30:00Z",
|
|
783
|
+
"completedBy": {
|
|
784
|
+
"identifier": "network-admin@example.com",
|
|
785
|
+
"type": "email"
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
],
|
|
789
|
+
"$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.",
|
|
747
790
|
"description": "A milestone or task within a POA&M remediation plan.",
|
|
748
791
|
"title": "Milestone"
|
|
749
792
|
},
|
|
@@ -1033,9 +1076,9 @@
|
|
|
1033
1076
|
"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."
|
|
1034
1077
|
}
|
|
1035
1078
|
},
|
|
1079
|
+
"$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.",
|
|
1036
1080
|
"examples": [
|
|
1037
1081
|
{
|
|
1038
|
-
"$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
|
|
1039
1082
|
"id": "SV-238196",
|
|
1040
1083
|
"title": "The Ubuntu operating system must enforce password complexity",
|
|
1041
1084
|
"impact": 0.5,
|
|
@@ -1065,7 +1108,6 @@
|
|
|
1065
1108
|
]
|
|
1066
1109
|
},
|
|
1067
1110
|
{
|
|
1068
|
-
"$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.",
|
|
1069
1111
|
"id": "AC-3",
|
|
1070
1112
|
"title": "Access Enforcement",
|
|
1071
1113
|
"impact": 0.7,
|
|
@@ -1087,7 +1129,6 @@
|
|
|
1087
1129
|
"applicability": "required"
|
|
1088
1130
|
},
|
|
1089
1131
|
{
|
|
1090
|
-
"$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.",
|
|
1091
1132
|
"id": "KSI-CNA-01",
|
|
1092
1133
|
"title": "Cyber Security Plan documents the system",
|
|
1093
1134
|
"impact": 0.5,
|
|
@@ -1107,7 +1148,6 @@
|
|
|
1107
1148
|
"applicability": "required"
|
|
1108
1149
|
},
|
|
1109
1150
|
{
|
|
1110
|
-
"$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.",
|
|
1111
1151
|
"id": "SV-999999",
|
|
1112
1152
|
"title": "Example STIG rule pending automation",
|
|
1113
1153
|
"impact": 0.3,
|
|
@@ -1172,9 +1212,9 @@
|
|
|
1172
1212
|
}
|
|
1173
1213
|
}
|
|
1174
1214
|
},
|
|
1175
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
1215
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0": {
|
|
1176
1216
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1177
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
1217
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0",
|
|
1178
1218
|
"title": "HDF Amendment Primitives",
|
|
1179
1219
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
1180
1220
|
"$defs": {
|
|
@@ -1285,7 +1325,7 @@
|
|
|
1285
1325
|
"externalReferences": {
|
|
1286
1326
|
"type": "array",
|
|
1287
1327
|
"items": {
|
|
1288
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1328
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
|
|
1289
1329
|
},
|
|
1290
1330
|
"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."
|
|
1291
1331
|
},
|
|
@@ -1295,6 +1335,7 @@
|
|
|
1295
1335
|
},
|
|
1296
1336
|
"requirementId": {
|
|
1297
1337
|
"type": "string",
|
|
1338
|
+
"minLength": 1,
|
|
1298
1339
|
"description": "The ID of the requirement being amended. Must match a requirement ID in the referenced baseline."
|
|
1299
1340
|
},
|
|
1300
1341
|
"baselineRef": {
|
|
@@ -1302,7 +1343,7 @@
|
|
|
1302
1343
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
1303
1344
|
},
|
|
1304
1345
|
"status": {
|
|
1305
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1346
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
|
|
1306
1347
|
"description": "The new status this amendment sets. Optional when only impact is being overridden."
|
|
1307
1348
|
},
|
|
1308
1349
|
"impact": {
|
|
@@ -1314,7 +1355,7 @@
|
|
|
1314
1355
|
"description": "Justification for this amendment."
|
|
1315
1356
|
},
|
|
1316
1357
|
"appliedBy": {
|
|
1317
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1358
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
1318
1359
|
"description": "Identity of who applied this amendment."
|
|
1319
1360
|
},
|
|
1320
1361
|
"appliedAt": {
|
|
@@ -1330,20 +1371,20 @@
|
|
|
1330
1371
|
"evidence": {
|
|
1331
1372
|
"type": "array",
|
|
1332
1373
|
"items": {
|
|
1333
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1374
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
1334
1375
|
},
|
|
1335
1376
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
1336
1377
|
},
|
|
1337
1378
|
"signature": {
|
|
1338
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1379
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
1339
1380
|
"description": "Digital signature for non-repudiation."
|
|
1340
1381
|
},
|
|
1341
1382
|
"previousChecksum": {
|
|
1342
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1383
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
1343
1384
|
"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."
|
|
1344
1385
|
},
|
|
1345
1386
|
"cvss": {
|
|
1346
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1387
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
|
|
1347
1388
|
"$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.",
|
|
1348
1389
|
"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."
|
|
1349
1390
|
},
|
|
@@ -1354,7 +1395,7 @@
|
|
|
1354
1395
|
"milestones": {
|
|
1355
1396
|
"type": "array",
|
|
1356
1397
|
"items": {
|
|
1357
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1398
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
|
|
1358
1399
|
},
|
|
1359
1400
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
1360
1401
|
},
|
|
@@ -1371,11 +1412,12 @@
|
|
|
1371
1412
|
"affectedPackages": {
|
|
1372
1413
|
"type": "array",
|
|
1373
1414
|
"items": {
|
|
1374
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
1415
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0#/$defs/Affected_Package"
|
|
1375
1416
|
},
|
|
1376
1417
|
"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)."
|
|
1377
1418
|
}
|
|
1378
1419
|
},
|
|
1420
|
+
"$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.",
|
|
1379
1421
|
"examples": [
|
|
1380
1422
|
{
|
|
1381
1423
|
"type": "waiver",
|
|
@@ -1477,7 +1519,6 @@
|
|
|
1477
1519
|
"expiresAt": "2026-09-26T00:00:00Z"
|
|
1478
1520
|
},
|
|
1479
1521
|
{
|
|
1480
|
-
"$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.",
|
|
1481
1522
|
"type": "falsePositive",
|
|
1482
1523
|
"requirementId": "CVE-2026-12345",
|
|
1483
1524
|
"status": "notApplicable",
|
|
@@ -1504,9 +1545,9 @@
|
|
|
1504
1545
|
}
|
|
1505
1546
|
}
|
|
1506
1547
|
},
|
|
1507
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1548
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0": {
|
|
1508
1549
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1509
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1550
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0",
|
|
1510
1551
|
"title": "HDF Result Primitives",
|
|
1511
1552
|
"description": "Types for representing assessment results and statuses.",
|
|
1512
1553
|
"$defs": {
|
|
@@ -1637,9 +1678,9 @@
|
|
|
1637
1678
|
}
|
|
1638
1679
|
}
|
|
1639
1680
|
},
|
|
1640
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1681
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0": {
|
|
1641
1682
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1642
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1683
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0",
|
|
1643
1684
|
"title": "HDF CVSS Primitives",
|
|
1644
1685
|
"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).",
|
|
1645
1686
|
"$defs": {
|
|
@@ -1703,7 +1744,7 @@
|
|
|
1703
1744
|
]
|
|
1704
1745
|
}
|
|
1705
1746
|
],
|
|
1706
|
-
"$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.",
|
|
1747
|
+
"$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.",
|
|
1707
1748
|
"properties": {
|
|
1708
1749
|
"version": {
|
|
1709
1750
|
"type": "string",
|
|
@@ -1783,7 +1824,6 @@
|
|
|
1783
1824
|
},
|
|
1784
1825
|
"examples": [
|
|
1785
1826
|
{
|
|
1786
|
-
"$comment": "Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet.",
|
|
1787
1827
|
"version": "3.1",
|
|
1788
1828
|
"source": "CVE-2024-12345",
|
|
1789
1829
|
"baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
|
|
@@ -1791,7 +1831,6 @@
|
|
|
1791
1831
|
"baseSeverity": "critical"
|
|
1792
1832
|
},
|
|
1793
1833
|
{
|
|
1794
|
-
"$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.",
|
|
1795
1834
|
"version": "3.1",
|
|
1796
1835
|
"source": "CVE-2023-44487",
|
|
1797
1836
|
"baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
|
|
@@ -1801,7 +1840,6 @@
|
|
|
1801
1840
|
"threatScore": 5.5
|
|
1802
1841
|
},
|
|
1803
1842
|
{
|
|
1804
|
-
"$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.",
|
|
1805
1843
|
"version": "3.1",
|
|
1806
1844
|
"source": "CVE-2024-3094",
|
|
1807
1845
|
"baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
|
|
@@ -1813,7 +1851,6 @@
|
|
|
1813
1851
|
"computedSeverity": "critical"
|
|
1814
1852
|
},
|
|
1815
1853
|
{
|
|
1816
|
-
"$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.",
|
|
1817
1854
|
"version": "4.0",
|
|
1818
1855
|
"source": "CVE-2024-21762",
|
|
1819
1856
|
"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",
|
|
@@ -1828,7 +1865,6 @@
|
|
|
1828
1865
|
"computedSeverity": "medium"
|
|
1829
1866
|
},
|
|
1830
1867
|
{
|
|
1831
|
-
"$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.",
|
|
1832
1868
|
"version": "2.0",
|
|
1833
1869
|
"source": "CVE-2014-0160",
|
|
1834
1870
|
"baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
|
|
@@ -1841,9 +1877,9 @@
|
|
|
1841
1877
|
}
|
|
1842
1878
|
}
|
|
1843
1879
|
},
|
|
1844
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
1880
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0": {
|
|
1845
1881
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1846
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
1882
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.7.0",
|
|
1847
1883
|
"title": "HDF Affected Package Primitives",
|
|
1848
1884
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
1849
1885
|
"$defs": {
|
|
@@ -1909,9 +1945,9 @@
|
|
|
1909
1945
|
"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'."
|
|
1910
1946
|
}
|
|
1911
1947
|
},
|
|
1948
|
+
"$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.",
|
|
1912
1949
|
"examples": [
|
|
1913
1950
|
{
|
|
1914
|
-
"$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
|
|
1915
1951
|
"name": "openssl",
|
|
1916
1952
|
"version": "1.1.1k-7.el8_4",
|
|
1917
1953
|
"ecosystem": "rpm",
|
|
@@ -1920,7 +1956,6 @@
|
|
|
1920
1956
|
"fixedInVersion": "1.1.1l"
|
|
1921
1957
|
},
|
|
1922
1958
|
{
|
|
1923
|
-
"$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
|
|
1924
1959
|
"name": "lodash",
|
|
1925
1960
|
"version": "4.17.20",
|
|
1926
1961
|
"ecosystem": "npm",
|
|
@@ -1928,13 +1963,11 @@
|
|
|
1928
1963
|
"fixedInVersion": "4.17.21"
|
|
1929
1964
|
},
|
|
1930
1965
|
{
|
|
1931
|
-
"$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.",
|
|
1932
1966
|
"name": "requests",
|
|
1933
1967
|
"version": "2.28.1",
|
|
1934
1968
|
"ecosystem": "pypi"
|
|
1935
1969
|
},
|
|
1936
1970
|
{
|
|
1937
|
-
"$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
|
|
1938
1971
|
"name": "org.apache.logging.log4j:log4j-core",
|
|
1939
1972
|
"version": "2.14.1",
|
|
1940
1973
|
"ecosystem": "maven",
|
|
@@ -1943,11 +1976,9 @@
|
|
|
1943
1976
|
"fixedInVersion": "2.17.1"
|
|
1944
1977
|
},
|
|
1945
1978
|
{
|
|
1946
|
-
"$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.",
|
|
1947
1979
|
"purl": "pkg:npm/lodash@4.17.20"
|
|
1948
1980
|
},
|
|
1949
1981
|
{
|
|
1950
|
-
"$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.",
|
|
1951
1982
|
"cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
|
|
1952
1983
|
}
|
|
1953
1984
|
],
|
|
@@ -1956,9 +1987,9 @@
|
|
|
1956
1987
|
}
|
|
1957
1988
|
}
|
|
1958
1989
|
},
|
|
1959
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
1990
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0": {
|
|
1960
1991
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1961
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
1992
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.7.0",
|
|
1962
1993
|
"title": "HDF Extension Primitives",
|
|
1963
1994
|
"description": "Extension types for waivers, attestations, generators, and integrity.",
|
|
1964
1995
|
"$defs": {
|
|
@@ -1988,20 +2019,20 @@
|
|
|
1988
2019
|
"externalReferences": {
|
|
1989
2020
|
"type": "array",
|
|
1990
2021
|
"items": {
|
|
1991
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2022
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/External_Reference"
|
|
1992
2023
|
},
|
|
1993
2024
|
"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."
|
|
1994
2025
|
},
|
|
1995
2026
|
"type": {
|
|
1996
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2027
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Override_Type",
|
|
1997
2028
|
"description": "The type of override applied to this requirement."
|
|
1998
2029
|
},
|
|
1999
2030
|
"status": {
|
|
2000
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2031
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.7.0#/$defs/Result_Status",
|
|
2001
2032
|
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
2002
2033
|
},
|
|
2003
2034
|
"impact": {
|
|
2004
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2035
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Impact_Override",
|
|
2005
2036
|
"description": "Override to the requirement's impact score. At least one of status or impact must be set."
|
|
2006
2037
|
},
|
|
2007
2038
|
"reason": {
|
|
@@ -2009,7 +2040,7 @@
|
|
|
2009
2040
|
"description": "Explanation for why this override was applied."
|
|
2010
2041
|
},
|
|
2011
2042
|
"appliedBy": {
|
|
2012
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2043
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
2013
2044
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
2014
2045
|
},
|
|
2015
2046
|
"appliedAt": {
|
|
@@ -2023,30 +2054,31 @@
|
|
|
2023
2054
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
2024
2055
|
},
|
|
2025
2056
|
"signature": {
|
|
2026
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2057
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
2027
2058
|
"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."
|
|
2028
2059
|
},
|
|
2029
2060
|
"evidence": {
|
|
2030
2061
|
"type": "array",
|
|
2031
2062
|
"items": {
|
|
2032
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2063
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
2033
2064
|
},
|
|
2034
2065
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
2035
2066
|
},
|
|
2036
2067
|
"previousChecksum": {
|
|
2037
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2068
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
2038
2069
|
"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."
|
|
2039
2070
|
},
|
|
2040
2071
|
"cvss": {
|
|
2041
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
2072
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.7.0#/$defs/Cvss",
|
|
2042
2073
|
"$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.",
|
|
2043
2074
|
"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."
|
|
2044
2075
|
},
|
|
2045
2076
|
"justification": {
|
|
2046
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2077
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.7.0#/$defs/Justification",
|
|
2047
2078
|
"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."
|
|
2048
2079
|
}
|
|
2049
2080
|
},
|
|
2081
|
+
"$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.",
|
|
2050
2082
|
"examples": [
|
|
2051
2083
|
{
|
|
2052
2084
|
"type": "waiver",
|
|
@@ -2073,7 +2105,6 @@
|
|
|
2073
2105
|
"expiresAt": "2026-10-14T00:00:00Z"
|
|
2074
2106
|
},
|
|
2075
2107
|
{
|
|
2076
|
-
"$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.",
|
|
2077
2108
|
"type": "riskAdjustment",
|
|
2078
2109
|
"impact": {
|
|
2079
2110
|
"value": 0.9
|
|
@@ -2136,7 +2167,7 @@
|
|
|
2136
2167
|
"evidence": [
|
|
2137
2168
|
{
|
|
2138
2169
|
"type": "screenshot",
|
|
2139
|
-
"data": "
|
|
2170
|
+
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
|
|
2140
2171
|
"description": "Screenshot showing firewall configuration",
|
|
2141
2172
|
"mimeType": "image/png",
|
|
2142
2173
|
"encoding": "base64",
|
|
@@ -2179,7 +2210,7 @@
|
|
|
2179
2210
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
2180
2211
|
},
|
|
2181
2212
|
"appliedBy": {
|
|
2182
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2213
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Identity",
|
|
2183
2214
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
2184
2215
|
},
|
|
2185
2216
|
"appliedAt": {
|
|
@@ -2195,23 +2226,23 @@
|
|
|
2195
2226
|
"milestones": {
|
|
2196
2227
|
"type": "array",
|
|
2197
2228
|
"items": {
|
|
2198
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2229
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Milestone"
|
|
2199
2230
|
},
|
|
2200
2231
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
2201
2232
|
},
|
|
2202
2233
|
"signature": {
|
|
2203
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2234
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Signature",
|
|
2204
2235
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
2205
2236
|
},
|
|
2206
2237
|
"evidence": {
|
|
2207
2238
|
"type": "array",
|
|
2208
2239
|
"items": {
|
|
2209
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2240
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Evidence"
|
|
2210
2241
|
},
|
|
2211
2242
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
2212
2243
|
},
|
|
2213
2244
|
"previousChecksum": {
|
|
2214
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2245
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Checksum",
|
|
2215
2246
|
"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."
|
|
2216
2247
|
}
|
|
2217
2248
|
},
|
|
@@ -2364,7 +2395,7 @@
|
|
|
2364
2395
|
},
|
|
2365
2396
|
"properties": {
|
|
2366
2397
|
"algorithm": {
|
|
2367
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2398
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.7.0#/$defs/Hash_Algorithm",
|
|
2368
2399
|
"description": "The hash algorithm used for the checksum."
|
|
2369
2400
|
},
|
|
2370
2401
|
"checksum": {
|