@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-evidence-package/v3.5.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-evidence-package/v3.6.0",
4
4
  "title": "HDF Evidence Package",
5
5
  "description": "Bundles references to all HDF documents for audit, authorization, and compliance review. Each content entry references a document by type, URI, and checksum for integrity verification.",
6
6
  "type": "object",
@@ -13,7 +13,7 @@
13
13
  "externalReferences": {
14
14
  "type": "array",
15
15
  "items": {
16
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
16
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
17
17
  },
18
18
  "description": "Optional references to external artifacts relevant to this evidence package (CTI/STIX, BOMs, advisories, or any URI-addressable artifact) beyond the document references it already carries. Inert context; see External_Reference."
19
19
  },
@@ -41,7 +41,7 @@
41
41
  "description": "URI to the hdf-plan document that drove this assessment. Used for completeness verification — every baseline in the plan should have a corresponding results document in this package."
42
42
  },
43
43
  "preparedBy": {
44
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
44
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
45
45
  "description": "Identity of who prepared this evidence package."
46
46
  },
47
47
  "preparedAt": {
@@ -69,7 +69,7 @@
69
69
  "description": "Summary of assessment completeness and compliance status."
70
70
  },
71
71
  "signature": {
72
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
72
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
73
73
  "description": "Digital signature covering the entire evidence package."
74
74
  },
75
75
  "labels": {
@@ -80,7 +80,7 @@
80
80
  "description": "Optional key-value labels for grouping and querying evidence packages."
81
81
  },
82
82
  "integrity": {
83
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Integrity",
83
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Integrity",
84
84
  "description": "Cryptographic integrity information for verifying this evidence package has not been tampered with."
85
85
  },
86
86
  "version": {
@@ -88,7 +88,7 @@
88
88
  "description": "Version of this evidence package."
89
89
  },
90
90
  "generator": {
91
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0#/$defs/Generator",
91
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0#/$defs/Generator",
92
92
  "description": "Information about the tool that generated this document."
93
93
  }
94
94
  },
@@ -125,7 +125,7 @@
125
125
  "description": "URI to the document. Can be a relative path or absolute URL."
126
126
  },
127
127
  "checksum": {
128
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
128
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
129
129
  "description": "Cryptographic checksum for verifying the referenced document's integrity."
130
130
  },
131
131
  "description": {
@@ -242,7 +242,7 @@
242
242
  "description": "The native format discriminator of the referenced artifact."
243
243
  },
244
244
  "checksum": {
245
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
245
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
246
246
  "description": "Cryptographic checksum of the referenced artifact for integrity verification.",
247
247
  "$comment": "Strongly recommended for external evidence — a point-in-time reference without an integrity hash is weakly auditable. Kept out of `description` so this usage-specific note does not aggregate into the shared Checksum type's generated Go doc comment (quicktype concatenates $ref-sibling descriptions onto the referenced type)."
248
248
  },
@@ -265,7 +265,6 @@
265
265
  },
266
266
  "examples": [
267
267
  {
268
- "$comment": "ECS log corpus carried by reference (NDJSON) — HDF never parses it; the hash pins integrity.",
269
268
  "uri": "https://evidence.agency.gov/logs/portal-2026-q1.ndjson",
270
269
  "format": "ecs",
271
270
  "formatVersion": "9.4.0",
@@ -284,22 +283,22 @@
284
283
  }
285
284
  },
286
285
  {
287
- "$comment": "OCSF telemetry landed as Parquet in a security data lake.",
288
286
  "uri": "s3://agency-security-lake/ocsf/portal/2026/q1/",
289
287
  "format": "ocsf",
290
288
  "formatVersion": "1.8.0",
291
289
  "mediaType": "application/vnd.apache.parquet",
292
- "collector": "aws-security-lake"
290
+ "metadata": {
291
+ "collector": "aws-security-lake"
292
+ }
293
293
  },
294
294
  {
295
- "$comment": "A Splunk export carried as an opaque x- custom format — CIM/ASIM are query-time models, so reference the EXPORT, not the model.",
296
295
  "uri": "siem/auth-events-2026-q1.json",
297
296
  "format": "x-splunk-export",
298
297
  "mediaType": "application/json"
299
298
  }
300
299
  ],
301
300
  "description": "A reference to external native-format evidence (log/telemetry corpus or other artifact) carried by URI + integrity hash + format discriminator. Reference-only: the artifact is never embedded (corpora can be huge) or transcoded (that would be lossy) — it stays canonical in its native format and HDF acts as the structured index.",
302
- "$comment": "Deliberately distinct from two look-alike primitives — the shared DRY is the common Checksum type, not the container. Bom (boms[] on components/system) models component COMPOSITION and is richer: also embeddable (document) and normalizable into HDF's queryable shape (packages/model/dataset). Content_Reference (contents[]) references HDF-ECOSYSTEM documents and BOMs by Content_Type. External_Evidence_Reference is reference-only and OPAQUE (HDF never inspects it), for NATIVE non-HDF log/telemetry corpora indexed as accreditation evidence; it carries log-specific metadata (recordCount/timeRange/collector) the other two do not. Do not merge these — collapsing them would mix incompatible discriminator axes and lose Bom's normalization.",
301
+ "$comment": "Deliberately distinct from two look-alike primitives — the shared DRY is the common Checksum type, not the container. Bom (boms[] on components/system) models component COMPOSITION and is richer: also embeddable (document) and normalizable into HDF's queryable shape (packages/model/dataset). Content_Reference (contents[]) references HDF-ECOSYSTEM documents and BOMs by Content_Type. External_Evidence_Reference is reference-only and OPAQUE (HDF never inspects it), for NATIVE non-HDF log/telemetry corpora indexed as accreditation evidence; it carries log-specific metadata (recordCount/timeRange/collector) the other two do not. Do not merge these — collapsing them would mix incompatible discriminator axes and lose Bom's normalization. Examples, in order: 1) ECS log corpus carried by reference (NDJSON) — HDF never parses it; the hash pins integrity; 2) OCSF telemetry landed as Parquet in a security data lake; 3) A Splunk export carried as an opaque x- custom format — CIM/ASIM are query-time models, so reference the EXPORT, not the model.",
303
302
  "title": "External Evidence Reference"
304
303
  },
305
304
  "SBOM_Coverage": {
@@ -358,9 +357,9 @@
358
357
  "description": "Informational summary of assessment completeness. Not authoritative — tools should compute these from the referenced documents.",
359
358
  "title": "Completeness Check"
360
359
  },
361
- "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
360
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0": {
362
361
  "$schema": "https://json-schema.org/draft/2020-12/schema",
363
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
362
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0",
364
363
  "title": "HDF Common Primitives",
365
364
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
366
365
  "$defs": {
@@ -440,22 +439,20 @@
440
439
  }
441
440
  },
442
441
  "unevaluatedProperties": false,
442
+ "$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.",
443
443
  "examples": [
444
444
  {
445
- "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
446
445
  "sourceName": "cve",
447
446
  "externalId": "CVE-2021-44228",
448
447
  "rel": "definition"
449
448
  },
450
449
  {
451
- "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
452
450
  "sourceName": "mitre-att&ck",
453
451
  "externalId": "T1059",
454
452
  "href": "https://attack.mitre.org/techniques/T1059/",
455
453
  "rel": "canonical"
456
454
  },
457
455
  {
458
- "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
459
456
  "sourceName": "stix",
460
457
  "href": "https://cti.example.org/bundles/log4shell.json",
461
458
  "rel": "investigate",
@@ -471,7 +468,6 @@
471
468
  "addedAt": "2026-07-26T00:00:00Z"
472
469
  },
473
470
  {
474
- "$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.",
475
471
  "sourceName": "stix",
476
472
  "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
477
473
  "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
@@ -1290,9 +1286,9 @@
1290
1286
  "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."
1291
1287
  }
1292
1288
  },
1289
+ "$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.",
1293
1290
  "examples": [
1294
1291
  {
1295
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
1296
1292
  "id": "SV-238196",
1297
1293
  "title": "The Ubuntu operating system must enforce password complexity",
1298
1294
  "impact": 0.5,
@@ -1322,7 +1318,6 @@
1322
1318
  ]
1323
1319
  },
1324
1320
  {
1325
- "$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.",
1326
1321
  "id": "AC-3",
1327
1322
  "title": "Access Enforcement",
1328
1323
  "impact": 0.7,
@@ -1344,7 +1339,6 @@
1344
1339
  "applicability": "required"
1345
1340
  },
1346
1341
  {
1347
- "$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.",
1348
1342
  "id": "KSI-CNA-01",
1349
1343
  "title": "Cyber Security Plan documents the system",
1350
1344
  "impact": 0.5,
@@ -1364,7 +1358,6 @@
1364
1358
  "applicability": "required"
1365
1359
  },
1366
1360
  {
1367
- "$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.",
1368
1361
  "id": "SV-999999",
1369
1362
  "title": "Example STIG rule pending automation",
1370
1363
  "impact": 0.3,
@@ -1429,9 +1422,9 @@
1429
1422
  }
1430
1423
  }
1431
1424
  },
1432
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
1425
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0": {
1433
1426
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1434
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
1427
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.6.0",
1435
1428
  "title": "HDF Extension Primitives",
1436
1429
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1437
1430
  "$defs": {
@@ -1461,20 +1454,20 @@
1461
1454
  "externalReferences": {
1462
1455
  "type": "array",
1463
1456
  "items": {
1464
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1457
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1465
1458
  },
1466
1459
  "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."
1467
1460
  },
1468
1461
  "type": {
1469
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
1462
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Override_Type",
1470
1463
  "description": "The type of override applied to this requirement."
1471
1464
  },
1472
1465
  "status": {
1473
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1466
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
1474
1467
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
1475
1468
  },
1476
1469
  "impact": {
1477
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
1470
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Impact_Override",
1478
1471
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
1479
1472
  },
1480
1473
  "reason": {
@@ -1482,7 +1475,7 @@
1482
1475
  "description": "Explanation for why this override was applied."
1483
1476
  },
1484
1477
  "appliedBy": {
1485
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1478
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1486
1479
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
1487
1480
  },
1488
1481
  "appliedAt": {
@@ -1496,30 +1489,31 @@
1496
1489
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
1497
1490
  },
1498
1491
  "signature": {
1499
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1492
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
1500
1493
  "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."
1501
1494
  },
1502
1495
  "evidence": {
1503
1496
  "type": "array",
1504
1497
  "items": {
1505
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1498
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
1506
1499
  },
1507
1500
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
1508
1501
  },
1509
1502
  "previousChecksum": {
1510
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1503
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
1511
1504
  "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."
1512
1505
  },
1513
1506
  "cvss": {
1514
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1507
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
1515
1508
  "$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.",
1516
1509
  "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."
1517
1510
  },
1518
1511
  "justification": {
1519
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
1512
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0#/$defs/Justification",
1520
1513
  "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."
1521
1514
  }
1522
1515
  },
1516
+ "$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.",
1523
1517
  "examples": [
1524
1518
  {
1525
1519
  "type": "waiver",
@@ -1546,7 +1540,6 @@
1546
1540
  "expiresAt": "2026-10-14T00:00:00Z"
1547
1541
  },
1548
1542
  {
1549
- "$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.",
1550
1543
  "type": "riskAdjustment",
1551
1544
  "impact": {
1552
1545
  "value": 0.9
@@ -1652,7 +1645,7 @@
1652
1645
  "description": "Detailed explanation of the plan, including what actions will be taken."
1653
1646
  },
1654
1647
  "appliedBy": {
1655
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1648
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
1656
1649
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
1657
1650
  },
1658
1651
  "appliedAt": {
@@ -1668,23 +1661,23 @@
1668
1661
  "milestones": {
1669
1662
  "type": "array",
1670
1663
  "items": {
1671
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1664
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
1672
1665
  },
1673
1666
  "description": "Optional array of milestones tracking progress toward completion."
1674
1667
  },
1675
1668
  "signature": {
1676
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1669
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
1677
1670
  "description": "Optional digital signature for enhanced trust and non-repudiation."
1678
1671
  },
1679
1672
  "evidence": {
1680
1673
  "type": "array",
1681
1674
  "items": {
1682
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1675
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
1683
1676
  },
1684
1677
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
1685
1678
  },
1686
1679
  "previousChecksum": {
1687
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1680
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
1688
1681
  "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."
1689
1682
  }
1690
1683
  },
@@ -1837,7 +1830,7 @@
1837
1830
  },
1838
1831
  "properties": {
1839
1832
  "algorithm": {
1840
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
1833
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Hash_Algorithm",
1841
1834
  "description": "The hash algorithm used for the checksum."
1842
1835
  },
1843
1836
  "checksum": {
@@ -1870,9 +1863,9 @@
1870
1863
  }
1871
1864
  }
1872
1865
  },
1873
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
1866
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0": {
1874
1867
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1875
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
1868
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.6.0",
1876
1869
  "title": "HDF Amendment Primitives",
1877
1870
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
1878
1871
  "$defs": {
@@ -1983,7 +1976,7 @@
1983
1976
  "externalReferences": {
1984
1977
  "type": "array",
1985
1978
  "items": {
1986
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1979
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/External_Reference"
1987
1980
  },
1988
1981
  "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."
1989
1982
  },
@@ -2000,7 +1993,7 @@
2000
1993
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
2001
1994
  },
2002
1995
  "status": {
2003
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1996
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0#/$defs/Result_Status",
2004
1997
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
2005
1998
  },
2006
1999
  "impact": {
@@ -2012,7 +2005,7 @@
2012
2005
  "description": "Justification for this amendment."
2013
2006
  },
2014
2007
  "appliedBy": {
2015
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
2008
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Identity",
2016
2009
  "description": "Identity of who applied this amendment."
2017
2010
  },
2018
2011
  "appliedAt": {
@@ -2028,20 +2021,20 @@
2028
2021
  "evidence": {
2029
2022
  "type": "array",
2030
2023
  "items": {
2031
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
2024
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Evidence"
2032
2025
  },
2033
2026
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
2034
2027
  },
2035
2028
  "signature": {
2036
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
2029
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Signature",
2037
2030
  "description": "Digital signature for non-repudiation."
2038
2031
  },
2039
2032
  "previousChecksum": {
2040
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
2033
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Checksum",
2041
2034
  "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."
2042
2035
  },
2043
2036
  "cvss": {
2044
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
2037
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0#/$defs/Cvss",
2045
2038
  "$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.",
2046
2039
  "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."
2047
2040
  },
@@ -2052,7 +2045,7 @@
2052
2045
  "milestones": {
2053
2046
  "type": "array",
2054
2047
  "items": {
2055
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
2048
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.6.0#/$defs/Milestone"
2056
2049
  },
2057
2050
  "description": "Remediation milestones (primarily for POA&M type amendments)."
2058
2051
  },
@@ -2069,11 +2062,12 @@
2069
2062
  "affectedPackages": {
2070
2063
  "type": "array",
2071
2064
  "items": {
2072
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
2065
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0#/$defs/Affected_Package"
2073
2066
  },
2074
2067
  "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)."
2075
2068
  }
2076
2069
  },
2070
+ "$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.",
2077
2071
  "examples": [
2078
2072
  {
2079
2073
  "type": "waiver",
@@ -2175,7 +2169,6 @@
2175
2169
  "expiresAt": "2026-09-26T00:00:00Z"
2176
2170
  },
2177
2171
  {
2178
- "$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.",
2179
2172
  "type": "falsePositive",
2180
2173
  "requirementId": "CVE-2026-12345",
2181
2174
  "status": "notApplicable",
@@ -2202,9 +2195,9 @@
2202
2195
  }
2203
2196
  }
2204
2197
  },
2205
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
2198
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0": {
2206
2199
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2207
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
2200
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.6.0",
2208
2201
  "title": "HDF Result Primitives",
2209
2202
  "description": "Types for representing assessment results and statuses.",
2210
2203
  "$defs": {
@@ -2335,9 +2328,9 @@
2335
2328
  }
2336
2329
  }
2337
2330
  },
2338
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
2331
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0": {
2339
2332
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2340
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
2333
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.6.0",
2341
2334
  "title": "HDF CVSS Primitives",
2342
2335
  "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).",
2343
2336
  "$defs": {
@@ -2401,7 +2394,7 @@
2401
2394
  ]
2402
2395
  }
2403
2396
  ],
2404
- "$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.",
2397
+ "$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.",
2405
2398
  "properties": {
2406
2399
  "version": {
2407
2400
  "type": "string",
@@ -2481,7 +2474,6 @@
2481
2474
  },
2482
2475
  "examples": [
2483
2476
  {
2484
- "$comment": "Base-only: vendor-supplied CVSS 3.1 data exactly as a scanner (e.g., Nessus, Grype) would emit it. No consumer enrichment yet.",
2485
2477
  "version": "3.1",
2486
2478
  "source": "CVE-2024-12345",
2487
2479
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
@@ -2489,7 +2481,6 @@
2489
2481
  "baseSeverity": "critical"
2490
2482
  },
2491
2483
  {
2492
- "$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.",
2493
2484
  "version": "3.1",
2494
2485
  "source": "CVE-2023-44487",
2495
2486
  "baseVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
@@ -2499,7 +2490,6 @@
2499
2490
  "threatScore": 5.5
2500
2491
  },
2501
2492
  {
2502
- "$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.",
2503
2493
  "version": "3.1",
2504
2494
  "source": "CVE-2024-3094",
2505
2495
  "baseVector": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H",
@@ -2511,7 +2501,6 @@
2511
2501
  "computedSeverity": "critical"
2512
2502
  },
2513
2503
  {
2514
- "$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.",
2515
2504
  "version": "4.0",
2516
2505
  "source": "CVE-2024-21762",
2517
2506
  "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",
@@ -2526,7 +2515,6 @@
2526
2515
  "computedSeverity": "medium"
2527
2516
  },
2528
2517
  {
2529
- "$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.",
2530
2518
  "version": "2.0",
2531
2519
  "source": "CVE-2014-0160",
2532
2520
  "baseVector": "AV:N/AC:L/Au:N/C:P/I:N/A:N",
@@ -2539,9 +2527,9 @@
2539
2527
  }
2540
2528
  }
2541
2529
  },
2542
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
2530
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0": {
2543
2531
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2544
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
2532
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.6.0",
2545
2533
  "title": "HDF Affected Package Primitives",
2546
2534
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
2547
2535
  "$defs": {
@@ -2607,9 +2595,9 @@
2607
2595
  "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'."
2608
2596
  }
2609
2597
  },
2598
+ "$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.",
2610
2599
  "examples": [
2611
2600
  {
2612
- "$comment": "RPM ecosystem with full CPE + PURL — typical Grype/Trivy output for a RHEL host scan.",
2613
2601
  "name": "openssl",
2614
2602
  "version": "1.1.1k-7.el8_4",
2615
2603
  "ecosystem": "rpm",
@@ -2618,7 +2606,6 @@
2618
2606
  "fixedInVersion": "1.1.1l"
2619
2607
  },
2620
2608
  {
2621
- "$comment": "NPM ecosystem with PURL only — the JavaScript world rarely emits CPEs; PURL is the canonical identifier.",
2622
2609
  "name": "lodash",
2623
2610
  "version": "4.17.20",
2624
2611
  "ecosystem": "npm",
@@ -2626,13 +2613,11 @@
2626
2613
  "fixedInVersion": "4.17.21"
2627
2614
  },
2628
2615
  {
2629
- "$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.",
2630
2616
  "name": "requests",
2631
2617
  "version": "2.28.1",
2632
2618
  "ecosystem": "pypi"
2633
2619
  },
2634
2620
  {
2635
- "$comment": "Maven ecosystem with full identifiers + fixedInVersion — log4j Log4Shell-style finding showing the patch path from vulnerable to fixed.",
2636
2621
  "name": "org.apache.logging.log4j:log4j-core",
2637
2622
  "version": "2.14.1",
2638
2623
  "ecosystem": "maven",
@@ -2641,11 +2626,9 @@
2641
2626
  "fixedInVersion": "2.17.1"
2642
2627
  },
2643
2628
  {
2644
- "$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.",
2645
2629
  "purl": "pkg:npm/lodash@4.17.20"
2646
2630
  },
2647
2631
  {
2648
- "$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.",
2649
2632
  "cpe": "cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*"
2650
2633
  }
2651
2634
  ],