@mitre/hdf-schema 3.6.0-rc.4 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,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.5.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-amendments/v3.6.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.5.0#/$defs/Identity",
32
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.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.5.0#/$defs/Identity",
36
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.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.5.0#/$defs/Standalone_Override"
43
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.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.5.0#/$defs/Integrity",
55
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.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.5.0#/$defs/Signature",
59
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.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.5.0#/$defs/Generator",
67
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.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.5.0": {
104
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0": {
105
105
  "$schema": "https://json-schema.org/draft/2020-12/schema",
106
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
106
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.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",
@@ -1033,9 +1030,9 @@
1033
1030
  "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
1031
  }
1035
1032
  },
1033
+ "$comment": "Examples, in order: 1) v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.6.0 (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
1034
  "examples": [
1037
1035
  {
1038
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
1039
1036
  "id": "SV-238196",
1040
1037
  "title": "The Ubuntu operating system must enforce password complexity",
1041
1038
  "impact": 0.5,
@@ -1065,7 +1062,6 @@
1065
1062
  ]
1066
1063
  },
1067
1064
  {
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
1065
  "id": "AC-3",
1070
1066
  "title": "Access Enforcement",
1071
1067
  "impact": 0.7,
@@ -1087,7 +1083,6 @@
1087
1083
  "applicability": "required"
1088
1084
  },
1089
1085
  {
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
1086
  "id": "KSI-CNA-01",
1092
1087
  "title": "Cyber Security Plan documents the system",
1093
1088
  "impact": 0.5,
@@ -1107,7 +1102,6 @@
1107
1102
  "applicability": "required"
1108
1103
  },
1109
1104
  {
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
1105
  "id": "SV-999999",
1112
1106
  "title": "Example STIG rule pending automation",
1113
1107
  "impact": 0.3,
@@ -1172,9 +1166,9 @@
1172
1166
  }
1173
1167
  }
1174
1168
  },
1175
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
1169
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0": {
1176
1170
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1177
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
1171
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0",
1178
1172
  "title": "HDF Amendment Primitives",
1179
1173
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
1180
1174
  "$defs": {
@@ -1285,7 +1279,7 @@
1285
1279
  "externalReferences": {
1286
1280
  "type": "array",
1287
1281
  "items": {
1288
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1282
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1289
1283
  },
1290
1284
  "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
1285
  },
@@ -1302,7 +1296,7 @@
1302
1296
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
1303
1297
  },
1304
1298
  "status": {
1305
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1299
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
1306
1300
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
1307
1301
  },
1308
1302
  "impact": {
@@ -1314,7 +1308,7 @@
1314
1308
  "description": "Justification for this amendment."
1315
1309
  },
1316
1310
  "appliedBy": {
1317
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1311
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1318
1312
  "description": "Identity of who applied this amendment."
1319
1313
  },
1320
1314
  "appliedAt": {
@@ -1330,20 +1324,20 @@
1330
1324
  "evidence": {
1331
1325
  "type": "array",
1332
1326
  "items": {
1333
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1327
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
1334
1328
  },
1335
1329
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
1336
1330
  },
1337
1331
  "signature": {
1338
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1332
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
1339
1333
  "description": "Digital signature for non-repudiation."
1340
1334
  },
1341
1335
  "previousChecksum": {
1342
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1336
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
1343
1337
  "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
1338
  },
1345
1339
  "cvss": {
1346
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1340
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
1347
1341
  "$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
1342
  "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
1343
  },
@@ -1354,7 +1348,7 @@
1354
1348
  "milestones": {
1355
1349
  "type": "array",
1356
1350
  "items": {
1357
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1351
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
1358
1352
  },
1359
1353
  "description": "Remediation milestones (primarily for POA&M type amendments)."
1360
1354
  },
@@ -1371,11 +1365,12 @@
1371
1365
  "affectedPackages": {
1372
1366
  "type": "array",
1373
1367
  "items": {
1374
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
1368
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0#/$defs/Affected_Package"
1375
1369
  },
1376
1370
  "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
1371
  }
1378
1372
  },
1373
+ "$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
1374
  "examples": [
1380
1375
  {
1381
1376
  "type": "waiver",
@@ -1477,7 +1472,6 @@
1477
1472
  "expiresAt": "2026-09-26T00:00:00Z"
1478
1473
  },
1479
1474
  {
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
1475
  "type": "falsePositive",
1482
1476
  "requirementId": "CVE-2026-12345",
1483
1477
  "status": "notApplicable",
@@ -1504,9 +1498,9 @@
1504
1498
  }
1505
1499
  }
1506
1500
  },
1507
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
1501
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0": {
1508
1502
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1509
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
1503
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0",
1510
1504
  "title": "HDF Result Primitives",
1511
1505
  "description": "Types for representing assessment results and statuses.",
1512
1506
  "$defs": {
@@ -1637,9 +1631,9 @@
1637
1631
  }
1638
1632
  }
1639
1633
  },
1640
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
1634
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0": {
1641
1635
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1642
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
1636
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0",
1643
1637
  "title": "HDF CVSS Primitives",
1644
1638
  "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
1639
  "$defs": {
@@ -1703,7 +1697,7 @@
1703
1697
  ]
1704
1698
  }
1705
1699
  ],
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.",
1700
+ "$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
1701
  "properties": {
1708
1702
  "version": {
1709
1703
  "type": "string",
@@ -1783,7 +1777,6 @@
1783
1777
  },
1784
1778
  "examples": [
1785
1779
  {
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
1780
  "version": "3.1",
1788
1781
  "source": "CVE-2024-12345",
1789
1782
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
@@ -1791,7 +1784,6 @@
1791
1784
  "baseSeverity": "critical"
1792
1785
  },
1793
1786
  {
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
1787
  "version": "3.1",
1796
1788
  "source": "CVE-2023-44487",
1797
1789
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
@@ -1801,7 +1793,6 @@
1801
1793
  "threatScore": 5.5
1802
1794
  },
1803
1795
  {
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
1796
  "version": "3.1",
1806
1797
  "source": "CVE-2024-3094",
1807
1798
  "baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
@@ -1813,7 +1804,6 @@
1813
1804
  "computedSeverity": "critical"
1814
1805
  },
1815
1806
  {
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
1807
  "version": "4.0",
1818
1808
  "source": "CVE-2024-21762",
1819
1809
  "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 +1818,6 @@
1828
1818
  "computedSeverity": "medium"
1829
1819
  },
1830
1820
  {
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
1821
  "version": "2.0",
1833
1822
  "source": "CVE-2014-0160",
1834
1823
  "baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
@@ -1841,9 +1830,9 @@
1841
1830
  }
1842
1831
  }
1843
1832
  },
1844
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
1833
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0": {
1845
1834
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1846
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
1835
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0",
1847
1836
  "title": "HDF Affected Package Primitives",
1848
1837
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
1849
1838
  "$defs": {
@@ -1909,9 +1898,9 @@
1909
1898
  "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
1899
  }
1911
1900
  },
1901
+ "$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
1902
  "examples": [
1913
1903
  {
1914
- "$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
1915
1904
  "name": "openssl",
1916
1905
  "version": "1.1.1k-7.el8_4",
1917
1906
  "ecosystem": "rpm",
@@ -1920,7 +1909,6 @@
1920
1909
  "fixedInVersion": "1.1.1l"
1921
1910
  },
1922
1911
  {
1923
- "$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
1924
1912
  "name": "lodash",
1925
1913
  "version": "4.17.20",
1926
1914
  "ecosystem": "npm",
@@ -1928,13 +1916,11 @@
1928
1916
  "fixedInVersion": "4.17.21"
1929
1917
  },
1930
1918
  {
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
1919
  "name": "requests",
1933
1920
  "version": "2.28.1",
1934
1921
  "ecosystem": "pypi"
1935
1922
  },
1936
1923
  {
1937
- "$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
1938
1924
  "name": "org.apache.logging.log4j:log4j-core",
1939
1925
  "version": "2.14.1",
1940
1926
  "ecosystem": "maven",
@@ -1943,11 +1929,9 @@
1943
1929
  "fixedInVersion": "2.17.1"
1944
1930
  },
1945
1931
  {
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
1932
  "purl": "pkg:npm/lodash@4.17.20"
1948
1933
  },
1949
1934
  {
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
1935
  "cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
1952
1936
  }
1953
1937
  ],
@@ -1956,9 +1940,9 @@
1956
1940
  }
1957
1941
  }
1958
1942
  },
1959
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
1943
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0": {
1960
1944
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1961
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
1945
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0",
1962
1946
  "title": "HDF Extension Primitives",
1963
1947
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1964
1948
  "$defs": {
@@ -1988,20 +1972,20 @@
1988
1972
  "externalReferences": {
1989
1973
  "type": "array",
1990
1974
  "items": {
1991
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1975
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1992
1976
  },
1993
1977
  "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
1978
  },
1995
1979
  "type": {
1996
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
1980
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Override_Type",
1997
1981
  "description": "The type of override applied to this requirement."
1998
1982
  },
1999
1983
  "status": {
2000
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1984
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
2001
1985
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
2002
1986
  },
2003
1987
  "impact": {
2004
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
1988
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Impact_Override",
2005
1989
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
2006
1990
  },
2007
1991
  "reason": {
@@ -2009,7 +1993,7 @@
2009
1993
  "description": "Explanation for why this override was applied."
2010
1994
  },
2011
1995
  "appliedBy": {
2012
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1996
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
2013
1997
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
2014
1998
  },
2015
1999
  "appliedAt": {
@@ -2023,30 +2007,31 @@
2023
2007
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
2024
2008
  },
2025
2009
  "signature": {
2026
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
2010
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
2027
2011
  "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
2012
  },
2029
2013
  "evidence": {
2030
2014
  "type": "array",
2031
2015
  "items": {
2032
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
2016
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
2033
2017
  },
2034
2018
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
2035
2019
  },
2036
2020
  "previousChecksum": {
2037
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
2021
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
2038
2022
  "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
2023
  },
2040
2024
  "cvss": {
2041
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
2025
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
2042
2026
  "$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
2027
  "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
2028
  },
2045
2029
  "justification": {
2046
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
2030
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Justification",
2047
2031
  "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
2032
  }
2049
2033
  },
2034
+ "$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
2035
  "examples": [
2051
2036
  {
2052
2037
  "type": "waiver",
@@ -2073,7 +2058,6 @@
2073
2058
  "expiresAt": "2026-10-14T00:00:00Z"
2074
2059
  },
2075
2060
  {
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
2061
  "type": "riskAdjustment",
2078
2062
  "impact": {
2079
2063
  "value": 0.9
@@ -2179,7 +2163,7 @@
2179
2163
  "description": "Detailed explanation of the plan, including what actions will be taken."
2180
2164
  },
2181
2165
  "appliedBy": {
2182
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
2166
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
2183
2167
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
2184
2168
  },
2185
2169
  "appliedAt": {
@@ -2195,23 +2179,23 @@
2195
2179
  "milestones": {
2196
2180
  "type": "array",
2197
2181
  "items": {
2198
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
2182
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
2199
2183
  },
2200
2184
  "description": "Optional array of milestones tracking progress toward completion."
2201
2185
  },
2202
2186
  "signature": {
2203
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
2187
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
2204
2188
  "description": "Optional digital signature for enhanced trust and non-repudiation."
2205
2189
  },
2206
2190
  "evidence": {
2207
2191
  "type": "array",
2208
2192
  "items": {
2209
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
2193
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
2210
2194
  },
2211
2195
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
2212
2196
  },
2213
2197
  "previousChecksum": {
2214
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
2198
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
2215
2199
  "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
2200
  }
2217
2201
  },
@@ -2364,7 +2348,7 @@
2364
2348
  },
2365
2349
  "properties": {
2366
2350
  "algorithm": {
2367
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
2351
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Hash_Algorithm",
2368
2352
  "description": "The hash algorithm used for the checksum."
2369
2353
  },
2370
2354
  "checksum": {