@mitre/hdf-schema 3.6.0-rc.5 → 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-baseline/v3.5.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-baseline/v3.6.0",
4
4
  "type": "object",
5
5
  "unevaluatedProperties": false,
6
6
  "required": [
@@ -9,7 +9,7 @@
9
9
  ],
10
10
  "allOf": [
11
11
  {
12
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Baseline_Metadata"
12
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Baseline_Metadata"
13
13
  }
14
14
  ],
15
15
  "properties": {
@@ -24,34 +24,34 @@
24
24
  "groups": {
25
25
  "type": "array",
26
26
  "items": {
27
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Group"
27
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Requirement_Group"
28
28
  },
29
29
  "description": "A set of descriptions for the requirement groups."
30
30
  },
31
31
  "inputs": {
32
32
  "type": "array",
33
33
  "items": {
34
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0#/$defs/Input"
34
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0#/$defs/Input"
35
35
  },
36
36
  "description": "The input(s) or attribute(s) to be used in the run."
37
37
  },
38
38
  "integrity": {
39
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
39
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Integrity",
40
40
  "description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
41
41
  },
42
42
  "remediation": {
43
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Remediation",
43
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Remediation",
44
44
  "description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for implementing the security controls defined in this baseline."
45
45
  },
46
46
  "depends": {
47
47
  "type": "array",
48
48
  "items": {
49
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Dependency"
49
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Dependency"
50
50
  },
51
51
  "description": "The set of dependencies this baseline depends on."
52
52
  },
53
53
  "generator": {
54
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Generator",
54
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Generator",
55
55
  "description": "The tool that generated this file."
56
56
  }
57
57
  },
@@ -142,7 +142,7 @@
142
142
  ],
143
143
  "allOf": [
144
144
  {
145
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Requirement_Core"
145
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Requirement_Core"
146
146
  }
147
147
  ],
148
148
  "properties": {
@@ -151,7 +151,7 @@
151
151
  "description": "Array of labeled descriptions. At least one description with label 'default' must be present. Convention: place default description first. Common labels: 'default', 'check', 'fix', 'rationale'."
152
152
  },
153
153
  "severity": {
154
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Severity",
154
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Severity",
155
155
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
156
156
  }
157
157
  },
@@ -193,9 +193,9 @@
193
193
  "description": "Array of labeled descriptions. At least one description with label 'default' must be present.",
194
194
  "title": "Baseline Requirement Descriptions"
195
195
  },
196
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
196
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0": {
197
197
  "$schema": "https://json-schema.org/draft/2020-12/schema",
198
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
198
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0",
199
199
  "title": "HDF Common Primitives",
200
200
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
201
201
  "$defs": {
@@ -275,22 +275,20 @@
275
275
  }
276
276
  },
277
277
  "unevaluatedProperties": false,
278
+ "$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.",
278
279
  "examples": [
279
280
  {
280
- "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
281
281
  "sourceName": "cve",
282
282
  "externalId": "CVE-2021-44228",
283
283
  "rel": "definition"
284
284
  },
285
285
  {
286
- "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
287
286
  "sourceName": "mitre-att&ck",
288
287
  "externalId": "T1059",
289
288
  "href": "https://attack.mitre.org/techniques/T1059/",
290
289
  "rel": "canonical"
291
290
  },
292
291
  {
293
- "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
294
292
  "sourceName": "stix",
295
293
  "href": "https://cti.example.org/bundles/log4shell.json",
296
294
  "rel": "investigate",
@@ -306,7 +304,6 @@
306
304
  "addedAt": "2026-07-26T00:00:00Z"
307
305
  },
308
306
  {
309
- "$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.",
310
307
  "sourceName": "stix",
311
308
  "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
312
309
  "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
@@ -1125,9 +1122,9 @@
1125
1122
  "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."
1126
1123
  }
1127
1124
  },
1125
+ "$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.",
1128
1126
  "examples": [
1129
1127
  {
1130
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
1131
1128
  "id": "SV-238196",
1132
1129
  "title": "The Ubuntu operating system must enforce password complexity",
1133
1130
  "impact": 0.5,
@@ -1157,7 +1154,6 @@
1157
1154
  ]
1158
1155
  },
1159
1156
  {
1160
- "$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.",
1161
1157
  "id": "AC-3",
1162
1158
  "title": "Access Enforcement",
1163
1159
  "impact": 0.7,
@@ -1179,7 +1175,6 @@
1179
1175
  "applicability": "required"
1180
1176
  },
1181
1177
  {
1182
- "$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.",
1183
1178
  "id": "KSI-CNA-01",
1184
1179
  "title": "Cyber Security Plan documents the system",
1185
1180
  "impact": 0.5,
@@ -1199,7 +1194,6 @@
1199
1194
  "applicability": "required"
1200
1195
  },
1201
1196
  {
1202
- "$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.",
1203
1197
  "id": "SV-999999",
1204
1198
  "title": "Example STIG rule pending automation",
1205
1199
  "impact": 0.3,
@@ -1264,9 +1258,9 @@
1264
1258
  }
1265
1259
  }
1266
1260
  },
1267
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0": {
1261
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0": {
1268
1262
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1269
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0",
1263
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.6.0",
1270
1264
  "title": "HDF Parameter Primitives",
1271
1265
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
1272
1266
  "$defs": {
@@ -1397,9 +1391,9 @@
1397
1391
  }
1398
1392
  }
1399
1393
  },
1400
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
1394
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0": {
1401
1395
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1402
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
1396
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0",
1403
1397
  "title": "HDF Extension Primitives",
1404
1398
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1405
1399
  "$defs": {
@@ -1429,20 +1423,20 @@
1429
1423
  "externalReferences": {
1430
1424
  "type": "array",
1431
1425
  "items": {
1432
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1426
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1433
1427
  },
1434
1428
  "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."
1435
1429
  },
1436
1430
  "type": {
1437
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
1431
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Override_Type",
1438
1432
  "description": "The type of override applied to this requirement."
1439
1433
  },
1440
1434
  "status": {
1441
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1435
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
1442
1436
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
1443
1437
  },
1444
1438
  "impact": {
1445
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
1439
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Impact_Override",
1446
1440
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
1447
1441
  },
1448
1442
  "reason": {
@@ -1450,7 +1444,7 @@
1450
1444
  "description": "Explanation for why this override was applied."
1451
1445
  },
1452
1446
  "appliedBy": {
1453
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1447
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1454
1448
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
1455
1449
  },
1456
1450
  "appliedAt": {
@@ -1464,30 +1458,31 @@
1464
1458
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
1465
1459
  },
1466
1460
  "signature": {
1467
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1461
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
1468
1462
  "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."
1469
1463
  },
1470
1464
  "evidence": {
1471
1465
  "type": "array",
1472
1466
  "items": {
1473
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1467
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
1474
1468
  },
1475
1469
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
1476
1470
  },
1477
1471
  "previousChecksum": {
1478
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1472
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
1479
1473
  "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."
1480
1474
  },
1481
1475
  "cvss": {
1482
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1476
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
1483
1477
  "$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.",
1484
1478
  "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."
1485
1479
  },
1486
1480
  "justification": {
1487
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
1481
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Justification",
1488
1482
  "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."
1489
1483
  }
1490
1484
  },
1485
+ "$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.",
1491
1486
  "examples": [
1492
1487
  {
1493
1488
  "type": "waiver",
@@ -1514,7 +1509,6 @@
1514
1509
  "expiresAt": "2026-10-14T00:00:00Z"
1515
1510
  },
1516
1511
  {
1517
- "$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.",
1518
1512
  "type": "riskAdjustment",
1519
1513
  "impact": {
1520
1514
  "value": 0.9
@@ -1620,7 +1614,7 @@
1620
1614
  "description": "Detailed explanation of the plan, including what actions will be taken."
1621
1615
  },
1622
1616
  "appliedBy": {
1623
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1617
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1624
1618
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
1625
1619
  },
1626
1620
  "appliedAt": {
@@ -1636,23 +1630,23 @@
1636
1630
  "milestones": {
1637
1631
  "type": "array",
1638
1632
  "items": {
1639
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1633
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
1640
1634
  },
1641
1635
  "description": "Optional array of milestones tracking progress toward completion."
1642
1636
  },
1643
1637
  "signature": {
1644
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1638
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
1645
1639
  "description": "Optional digital signature for enhanced trust and non-repudiation."
1646
1640
  },
1647
1641
  "evidence": {
1648
1642
  "type": "array",
1649
1643
  "items": {
1650
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1644
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
1651
1645
  },
1652
1646
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
1653
1647
  },
1654
1648
  "previousChecksum": {
1655
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1649
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
1656
1650
  "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."
1657
1651
  }
1658
1652
  },
@@ -1805,7 +1799,7 @@
1805
1799
  },
1806
1800
  "properties": {
1807
1801
  "algorithm": {
1808
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
1802
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Hash_Algorithm",
1809
1803
  "description": "The hash algorithm used for the checksum."
1810
1804
  },
1811
1805
  "checksum": {
@@ -1838,9 +1832,9 @@
1838
1832
  }
1839
1833
  }
1840
1834
  },
1841
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
1835
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0": {
1842
1836
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1843
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
1837
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0",
1844
1838
  "title": "HDF Amendment Primitives",
1845
1839
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
1846
1840
  "$defs": {
@@ -1951,7 +1945,7 @@
1951
1945
  "externalReferences": {
1952
1946
  "type": "array",
1953
1947
  "items": {
1954
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1948
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1955
1949
  },
1956
1950
  "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."
1957
1951
  },
@@ -1968,7 +1962,7 @@
1968
1962
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
1969
1963
  },
1970
1964
  "status": {
1971
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1965
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
1972
1966
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
1973
1967
  },
1974
1968
  "impact": {
@@ -1980,7 +1974,7 @@
1980
1974
  "description": "Justification for this amendment."
1981
1975
  },
1982
1976
  "appliedBy": {
1983
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1977
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1984
1978
  "description": "Identity of who applied this amendment."
1985
1979
  },
1986
1980
  "appliedAt": {
@@ -1996,20 +1990,20 @@
1996
1990
  "evidence": {
1997
1991
  "type": "array",
1998
1992
  "items": {
1999
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1993
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
2000
1994
  },
2001
1995
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
2002
1996
  },
2003
1997
  "signature": {
2004
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1998
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
2005
1999
  "description": "Digital signature for non-repudiation."
2006
2000
  },
2007
2001
  "previousChecksum": {
2008
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
2002
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
2009
2003
  "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."
2010
2004
  },
2011
2005
  "cvss": {
2012
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
2006
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
2013
2007
  "$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.",
2014
2008
  "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."
2015
2009
  },
@@ -2020,7 +2014,7 @@
2020
2014
  "milestones": {
2021
2015
  "type": "array",
2022
2016
  "items": {
2023
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
2017
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
2024
2018
  },
2025
2019
  "description": "Remediation milestones (primarily for POA&M type amendments)."
2026
2020
  },
@@ -2037,11 +2031,12 @@
2037
2031
  "affectedPackages": {
2038
2032
  "type": "array",
2039
2033
  "items": {
2040
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
2034
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0#/$defs/Affected_Package"
2041
2035
  },
2042
2036
  "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)."
2043
2037
  }
2044
2038
  },
2039
+ "$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.",
2045
2040
  "examples": [
2046
2041
  {
2047
2042
  "type": "waiver",
@@ -2143,7 +2138,6 @@
2143
2138
  "expiresAt": "2026-09-26T00:00:00Z"
2144
2139
  },
2145
2140
  {
2146
- "$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.",
2147
2141
  "type": "falsePositive",
2148
2142
  "requirementId": "CVE-2026-12345",
2149
2143
  "status": "notApplicable",
@@ -2170,9 +2164,9 @@
2170
2164
  }
2171
2165
  }
2172
2166
  },
2173
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
2167
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0": {
2174
2168
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2175
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
2169
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0",
2176
2170
  "title": "HDF Result Primitives",
2177
2171
  "description": "Types for representing assessment results and statuses.",
2178
2172
  "$defs": {
@@ -2303,9 +2297,9 @@
2303
2297
  }
2304
2298
  }
2305
2299
  },
2306
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
2300
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0": {
2307
2301
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2308
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
2302
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0",
2309
2303
  "title": "HDF CVSS Primitives",
2310
2304
  "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).",
2311
2305
  "$defs": {
@@ -2369,7 +2363,7 @@
2369
2363
  ]
2370
2364
  }
2371
2365
  ],
2372
- "$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.",
2366
+ "$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.",
2373
2367
  "properties": {
2374
2368
  "version": {
2375
2369
  "type": "string",
@@ -2449,7 +2443,6 @@
2449
2443
  },
2450
2444
  "examples": [
2451
2445
  {
2452
- "$comment": "Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet.",
2453
2446
  "version": "3.1",
2454
2447
  "source": "CVE-2024-12345",
2455
2448
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
@@ -2457,7 +2450,6 @@
2457
2450
  "baseSeverity": "critical"
2458
2451
  },
2459
2452
  {
2460
- "$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.",
2461
2453
  "version": "3.1",
2462
2454
  "source": "CVE-2023-44487",
2463
2455
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
@@ -2467,7 +2459,6 @@
2467
2459
  "threatScore": 5.5
2468
2460
  },
2469
2461
  {
2470
- "$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.",
2471
2462
  "version": "3.1",
2472
2463
  "source": "CVE-2024-3094",
2473
2464
  "baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
@@ -2479,7 +2470,6 @@
2479
2470
  "computedSeverity": "critical"
2480
2471
  },
2481
2472
  {
2482
- "$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.",
2483
2473
  "version": "4.0",
2484
2474
  "source": "CVE-2024-21762",
2485
2475
  "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",
@@ -2494,7 +2484,6 @@
2494
2484
  "computedSeverity": "medium"
2495
2485
  },
2496
2486
  {
2497
- "$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.",
2498
2487
  "version": "2.0",
2499
2488
  "source": "CVE-2014-0160",
2500
2489
  "baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
@@ -2507,9 +2496,9 @@
2507
2496
  }
2508
2497
  }
2509
2498
  },
2510
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
2499
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0": {
2511
2500
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2512
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
2501
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0",
2513
2502
  "title": "HDF Affected Package Primitives",
2514
2503
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
2515
2504
  "$defs": {
@@ -2575,9 +2564,9 @@
2575
2564
  "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'."
2576
2565
  }
2577
2566
  },
2567
+ "$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.",
2578
2568
  "examples": [
2579
2569
  {
2580
- "$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
2581
2570
  "name": "openssl",
2582
2571
  "version": "1.1.1k-7.el8_4",
2583
2572
  "ecosystem": "rpm",
@@ -2586,7 +2575,6 @@
2586
2575
  "fixedInVersion": "1.1.1l"
2587
2576
  },
2588
2577
  {
2589
- "$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
2590
2578
  "name": "lodash",
2591
2579
  "version": "4.17.20",
2592
2580
  "ecosystem": "npm",
@@ -2594,13 +2582,11 @@
2594
2582
  "fixedInVersion": "4.17.21"
2595
2583
  },
2596
2584
  {
2597
- "$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.",
2598
2585
  "name": "requests",
2599
2586
  "version": "2.28.1",
2600
2587
  "ecosystem": "pypi"
2601
2588
  },
2602
2589
  {
2603
- "$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
2604
2590
  "name": "org.apache.logging.log4j:log4j-core",
2605
2591
  "version": "2.14.1",
2606
2592
  "ecosystem": "maven",
@@ -2609,11 +2595,9 @@
2609
2595
  "fixedInVersion": "2.17.1"
2610
2596
  },
2611
2597
  {
2612
- "$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.",
2613
2598
  "purl": "pkg:npm/lodash@4.17.20"
2614
2599
  },
2615
2600
  {
2616
- "$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.",
2617
2601
  "cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
2618
2602
  }
2619
2603
  ],