@mitre/hdf-schema 3.4.4 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.4.0",
3
+ "$id": "https://mitre.github.io/hdf-libs/schemas/hdf-baseline/v3.5.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.4.0#/$defs/Baseline_Metadata"
12
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.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.4.0#/$defs/Requirement_Group"
27
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.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.4.0#/$defs/Input"
34
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.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.4.0#/$defs/Integrity",
39
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.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.4.0#/$defs/Remediation",
43
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.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.4.0#/$defs/Dependency"
49
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.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.4.0#/$defs/Generator",
54
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.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.4.0#/$defs/Requirement_Core"
145
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.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.4.0#/$defs/Severity",
154
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Severity",
155
155
  "description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
156
156
  }
157
157
  },
@@ -193,12 +193,140 @@
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.4.0": {
196
+ "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0": {
197
197
  "$schema": "https://json-schema.org/draft/2020-12/schema",
198
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0",
198
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0",
199
199
  "title": "HDF Common Primitives",
200
200
  "description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
201
201
  "$defs": {
202
+ "External_Reference": {
203
+ "type": "object",
204
+ "title": "External Reference",
205
+ "description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property. Purpose-agnostic: cite a CVE, an ATT&CK technique, a STIX bundle/object, a BOM, a runbook, or any vendor artifact — including kinds with no dedicated HDF reference category. `sourceName` names the system; `externalId` cites by id within that system; `href` locates it. `sourceName` + `externalId` is equivalently a URN (`urn:<sourceName>:<externalId>`, RFC 8141), so the by-identity and by-location forms stay interconvertible. A reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
206
+ "required": [
207
+ "sourceName"
208
+ ],
209
+ "anyOf": [
210
+ {
211
+ "required": [
212
+ "externalId"
213
+ ]
214
+ },
215
+ {
216
+ "required": [
217
+ "href"
218
+ ]
219
+ },
220
+ {
221
+ "required": [
222
+ "description"
223
+ ]
224
+ }
225
+ ],
226
+ "properties": {
227
+ "sourceName": {
228
+ "type": "string",
229
+ "minLength": 1,
230
+ "description": "Name of the external system/source being referenced (e.g., 'cve', 'mitre-att&ck', 'stix', 'taxii', or any vendor label). Open string — not a closed enum. Use the `x-` prefix convention for custom/experimental sources, mirroring `bomType`."
231
+ },
232
+ "externalId": {
233
+ "type": "string",
234
+ "description": "Identifier of the artifact within `sourceName` (e.g., 'CVE-2021-44228' for source 'cve', 'T1059' for 'mitre-att&ck'). Cite by id without needing a URL. Together with `sourceName` this is a URN."
235
+ },
236
+ "href": {
237
+ "type": "string",
238
+ "format": "uri-reference",
239
+ "description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. `checksum`/`mediaType` apply only to a retrievable `href`."
240
+ },
241
+ "description": {
242
+ "type": "string",
243
+ "description": "Human-readable description of what is referenced. Satisfies the at-least-one rule on its own when neither id nor href is available."
244
+ },
245
+ "rel": {
246
+ "type": "string",
247
+ "description": "Open relationship token describing how this reference relates to the referencing object. Deliberately open (cf. OSCAL `rel` allow-other, RFC 8288 extension relations). Documented starter vocabulary: 'reference' (generic), 'definition' (defines the concept), 'evidence' (supporting evidence), 'investigate' (a live pivot to investigate), 'canonical' (the authoritative source)."
248
+ },
249
+ "mediaType": {
250
+ "type": "string",
251
+ "description": "IANA media type of the referenced artifact when retrievable (RFC 6838), e.g., 'application/json'. Meaningful only with `href`."
252
+ },
253
+ "checksum": {
254
+ "$ref": "#/$defs/Checksum",
255
+ "description": "Integrity hash of the referenced artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Meaningful only with a retrievable `href`."
256
+ },
257
+ "addedBy": {
258
+ "$ref": "#/$defs/Identity",
259
+ "description": "Who attached this reference. Lightweight, flat attribution — a reference overrides nothing, so it has no chaining/superseding/disposition."
260
+ },
261
+ "addedAt": {
262
+ "type": "string",
263
+ "format": "date-time",
264
+ "description": "When this reference was attached (RFC 3339 / trimmed-UTC per HDF timestamp convention)."
265
+ },
266
+ "kind": {
267
+ "type": "string",
268
+ "minLength": 1,
269
+ "description": "Open token classifying the referenced/embedded payload, turning a bare reference into an enrichment envelope. Deliberately open (like `sourceName`/`rel`), not a closed enum. Documented starter vocabulary: 'threat-intel' (STIX/CTI object), 'annotation' (human triage note), 'exploitation' (EPSS/KEV signal carried as context), 'advisory' (vendor/security advisory). Use the `x-` prefix for custom kinds."
270
+ },
271
+ "document": {
272
+ "type": "object",
273
+ "additionalProperties": true,
274
+ "description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim. Composes with `href`/`externalId` (which point at the artifact) and `checksum` (which ties the copy to the source): a single entry can both point and embed. HDF stays payload-agnostic — the content is carried untouched, never normalized into HDF fields — so this does not duplicate the source ontology (e.g. STIX rides here unchanged)."
275
+ }
276
+ },
277
+ "unevaluatedProperties": false,
278
+ "examples": [
279
+ {
280
+ "$comment": "By-identity: cite a CVE by its id in the 'cve' system without a URL — equivalently urn:cve:CVE-2021-44228.",
281
+ "sourceName": "cve",
282
+ "externalId": "CVE-2021-44228",
283
+ "rel": "definition"
284
+ },
285
+ {
286
+ "$comment": "By-identity AND by-locator together (anyOf, not oneOf) — an ATT&CK technique cited by id with its canonical URL.",
287
+ "sourceName": "mitre-att&ck",
288
+ "externalId": "T1059",
289
+ "href": "https://attack.mitre.org/techniques/T1059/",
290
+ "rel": "canonical"
291
+ },
292
+ {
293
+ "$comment": "By-locator to a retrievable STIX bundle, with integrity hash, media type, and attribution.",
294
+ "sourceName": "stix",
295
+ "href": "https://cti.example.org/bundles/log4shell.json",
296
+ "rel": "investigate",
297
+ "mediaType": "application/json",
298
+ "checksum": {
299
+ "algorithm": "sha256",
300
+ "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
301
+ },
302
+ "addedBy": {
303
+ "type": "email",
304
+ "identifier": "analyst@agency.gov"
305
+ },
306
+ "addedAt": "2026-07-26T00:00:00Z"
307
+ },
308
+ {
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
+ "sourceName": "stix",
311
+ "externalId": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
312
+ "href": "https://cti.example.org/bundles/log4shell.json#vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
313
+ "rel": "investigate",
314
+ "kind": "threat-intel",
315
+ "document": {
316
+ "type": "vulnerability",
317
+ "spec_version": "2.1",
318
+ "id": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001",
319
+ "name": "CVE-2021-44228",
320
+ "external_references": [
321
+ {
322
+ "source_name": "cve",
323
+ "external_id": "CVE-2021-44228"
324
+ }
325
+ ]
326
+ }
327
+ }
328
+ ]
329
+ },
202
330
  "Hash_Algorithm": {
203
331
  "type": "string",
204
332
  "enum": [
@@ -822,6 +950,13 @@
822
950
  "Baseline_Metadata": {
823
951
  "type": "object",
824
952
  "properties": {
953
+ "externalReferences": {
954
+ "type": "array",
955
+ "items": {
956
+ "$ref": "#/$defs/External_Reference"
957
+ },
958
+ "description": "Optional references to external artifacts relevant to this baseline (CTI/STIX, advisories, source catalogs, or any URI-addressable artifact). Travels with the baseline definition. Inert context; see External_Reference."
959
+ },
825
960
  "name": {
826
961
  "type": "string",
827
962
  "description": "The name - must be unique."
@@ -899,6 +1034,13 @@
899
1034
  "Requirement_Core": {
900
1035
  "type": "object",
901
1036
  "properties": {
1037
+ "externalReferences": {
1038
+ "type": "array",
1039
+ "items": {
1040
+ "$ref": "#/$defs/External_Reference"
1041
+ },
1042
+ "description": "Optional references to external artifacts relevant to this requirement (CTI/STIX correlation, advisories, control/definition sources, or any URI-addressable artifact). Applies to both baseline requirement definitions and evaluated requirements. Inert context; see External_Reference."
1043
+ },
902
1044
  "id": {
903
1045
  "type": "string",
904
1046
  "description": "The requirement identifier. Example: 'SV-238196'."
@@ -985,7 +1127,7 @@
985
1127
  },
986
1128
  "examples": [
987
1129
  {
988
- "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.4.0 (backward compatibility).",
1130
+ "$comment": "v3.1.x-style requirement: classification fields omitted. Consumers must continue to handle this shape under v3.5.0 (backward compatibility).",
989
1131
  "id": "SV-238196",
990
1132
  "title": "The Ubuntu operating system must enforce password complexity",
991
1133
  "impact": 0.5,
@@ -1122,9 +1264,9 @@
1122
1264
  }
1123
1265
  }
1124
1266
  },
1125
- "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.4.0": {
1267
+ "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0": {
1126
1268
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1127
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.4.0",
1269
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.5.0",
1128
1270
  "title": "HDF Parameter Primitives",
1129
1271
  "description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
1130
1272
  "$defs": {
@@ -1255,9 +1397,9 @@
1255
1397
  }
1256
1398
  }
1257
1399
  },
1258
- "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0": {
1400
+ "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0": {
1259
1401
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1260
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.4.0",
1402
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.5.0",
1261
1403
  "title": "HDF Extension Primitives",
1262
1404
  "description": "Extension types for waivers, attestations, generators, and integrity.",
1263
1405
  "$defs": {
@@ -1284,16 +1426,23 @@
1284
1426
  }
1285
1427
  ],
1286
1428
  "properties": {
1429
+ "externalReferences": {
1430
+ "type": "array",
1431
+ "items": {
1432
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1433
+ },
1434
+ "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
+ },
1287
1436
  "type": {
1288
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Override_Type",
1437
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Override_Type",
1289
1438
  "description": "The type of override applied to this requirement."
1290
1439
  },
1291
1440
  "status": {
1292
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
1441
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1293
1442
  "description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
1294
1443
  },
1295
1444
  "impact": {
1296
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Impact_Override",
1445
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Impact_Override",
1297
1446
  "description": "Override to the requirement's impact score. At least one of status or impact must be set."
1298
1447
  },
1299
1448
  "reason": {
@@ -1301,7 +1450,7 @@
1301
1450
  "description": "Explanation for why this override was applied."
1302
1451
  },
1303
1452
  "appliedBy": {
1304
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1453
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1305
1454
  "description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
1306
1455
  },
1307
1456
  "appliedAt": {
@@ -1315,27 +1464,27 @@
1315
1464
  "description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
1316
1465
  },
1317
1466
  "signature": {
1318
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
1467
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1319
1468
  "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."
1320
1469
  },
1321
1470
  "evidence": {
1322
1471
  "type": "array",
1323
1472
  "items": {
1324
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
1473
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1325
1474
  },
1326
1475
  "description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
1327
1476
  },
1328
1477
  "previousChecksum": {
1329
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
1478
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1330
1479
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
1331
1480
  },
1332
1481
  "cvss": {
1333
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
1482
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1334
1483
  "$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.",
1335
1484
  "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."
1336
1485
  },
1337
1486
  "justification": {
1338
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0#/$defs/Justification",
1487
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0#/$defs/Justification",
1339
1488
  "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."
1340
1489
  }
1341
1490
  },
@@ -1364,6 +1513,34 @@
1364
1513
  "appliedAt": "2026-04-14T10:00:00Z",
1365
1514
  "expiresAt": "2026-10-14T00:00:00Z"
1366
1515
  },
1516
+ {
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
+ "type": "riskAdjustment",
1519
+ "impact": {
1520
+ "value": 0.9
1521
+ },
1522
+ "reason": "CVE-2021-44228 actively exploited in the wild per STIX threat intelligence",
1523
+ "appliedBy": {
1524
+ "identifier": "secops@agency.gov",
1525
+ "type": "email"
1526
+ },
1527
+ "appliedAt": "2026-07-27T00:00:00Z",
1528
+ "expiresAt": "2026-10-25T00:00:00Z",
1529
+ "externalReferences": [
1530
+ {
1531
+ "sourceName": "stix",
1532
+ "externalId": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
1533
+ "kind": "threat-intel",
1534
+ "rel": "evidence",
1535
+ "document": {
1536
+ "type": "sighting",
1537
+ "spec_version": "2.1",
1538
+ "id": "sighting--a1b2c3d4-0000-4a2b-9c3d-000000000002",
1539
+ "sighting_of_ref": "vulnerability--f7c1b8e0-1234-4a2b-9c3d-000000000001"
1540
+ }
1541
+ }
1542
+ ]
1543
+ },
1367
1544
  {
1368
1545
  "type": "falsePositive",
1369
1546
  "status": "passed",
@@ -1423,7 +1600,8 @@
1423
1600
  "type",
1424
1601
  "explanation",
1425
1602
  "appliedBy",
1426
- "appliedAt"
1603
+ "appliedAt",
1604
+ "expiresAt"
1427
1605
  ],
1428
1606
  "properties": {
1429
1607
  "type": {
@@ -1442,7 +1620,7 @@
1442
1620
  "description": "Detailed explanation of the plan, including what actions will be taken."
1443
1621
  },
1444
1622
  "appliedBy": {
1445
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1623
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1446
1624
  "description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
1447
1625
  },
1448
1626
  "appliedAt": {
@@ -1453,28 +1631,28 @@
1453
1631
  "expiresAt": {
1454
1632
  "type": "string",
1455
1633
  "format": "date-time",
1456
- "description": "Optional expiration date for this POA&M requiring review/renewal. ISO 8601 format."
1634
+ "description": "Required deadline for this POA&M. A POA&M is a time-boxed acceptance of an open finding; without a deadline it lets a failing requirement duck remediation indefinitely. Source a real date (e.g. a remediation target or vendor-fix date) — never a wall-clock default. ISO 8601 format."
1457
1635
  },
1458
1636
  "milestones": {
1459
1637
  "type": "array",
1460
1638
  "items": {
1461
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
1639
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1462
1640
  },
1463
1641
  "description": "Optional array of milestones tracking progress toward completion."
1464
1642
  },
1465
1643
  "signature": {
1466
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
1644
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1467
1645
  "description": "Optional digital signature for enhanced trust and non-repudiation."
1468
1646
  },
1469
1647
  "evidence": {
1470
1648
  "type": "array",
1471
1649
  "items": {
1472
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
1650
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1473
1651
  },
1474
1652
  "description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
1475
1653
  },
1476
1654
  "previousChecksum": {
1477
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
1655
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1478
1656
  "description": "SHA-256 checksum of the previous amendment in chronological order. Creates a tamper-evident chain of amendments (similar to blockchain). Null for the first amendment on a requirement."
1479
1657
  }
1480
1658
  },
@@ -1487,6 +1665,7 @@
1487
1665
  "type": "email"
1488
1666
  },
1489
1667
  "appliedAt": "2025-12-01T09:00:00Z",
1668
+ "expiresAt": "2099-12-31T00:00:00Z",
1490
1669
  "milestones": [
1491
1670
  {
1492
1671
  "description": "Update base Docker image to use OpenSSL 3.0.x",
@@ -1519,7 +1698,7 @@
1519
1698
  "description": "Automated POA&M creation from vulnerability scan"
1520
1699
  },
1521
1700
  "appliedAt": "2025-11-28T14:00:00Z",
1522
- "expiresAt": "2026-02-28T00:00:00Z",
1701
+ "expiresAt": "2099-12-31T00:00:00Z",
1523
1702
  "milestones": [
1524
1703
  {
1525
1704
  "description": "Configure firewall rules to restrict database access to management VLAN",
@@ -1554,7 +1733,7 @@
1554
1733
  "type": "email"
1555
1734
  },
1556
1735
  "appliedAt": "2025-12-05T10:00:00Z",
1557
- "expiresAt": "2026-04-01T00:00:00Z",
1736
+ "expiresAt": "2099-12-31T00:00:00Z",
1558
1737
  "milestones": [
1559
1738
  {
1560
1739
  "description": "Complete migration to replacement system",
@@ -1606,7 +1785,8 @@
1606
1785
  },
1607
1786
  "format": {
1608
1787
  "type": "string",
1609
- "description": "The file format, if it is a recognized named format shared by multiple tools. Examples: 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the format (Nessus XML, gosec JSON)."
1788
+ "description": "The named format of the source data, when it follows a recognized format specification with its own identity: an interchange format emitted by many tools ('SARIF', 'XCCDF', 'OSCAL') or one of several named output formats a single tool produces ('FVDL', 'exec-json', 'FPF'). Never a serialization structure — 'JSON', 'XML', and 'CSV' are encodings, not formats. Omit for a tool's native output: an absent format means the tool's own shape, and data arriving as a named format is converted by that format's converter, which sets this field alongside the producing tool's name.",
1789
+ "$comment": "Format-not-serialization rule decided 2026-08-01; bare JSON/XML/CSV labels were swept from the converters at the same time."
1610
1790
  }
1611
1791
  },
1612
1792
  "description": "The security tool that produced the assessment data represented in this HDF file. Aligns with SARIF, OSCAL, and CycloneDX terminology.",
@@ -1625,7 +1805,7 @@
1625
1805
  },
1626
1806
  "properties": {
1627
1807
  "algorithm": {
1628
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Hash_Algorithm",
1808
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Hash_Algorithm",
1629
1809
  "description": "The hash algorithm used for the checksum."
1630
1810
  },
1631
1811
  "checksum": {
@@ -1658,9 +1838,9 @@
1658
1838
  }
1659
1839
  }
1660
1840
  },
1661
- "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0": {
1841
+ "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0": {
1662
1842
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1663
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.4.0",
1843
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.5.0",
1664
1844
  "title": "HDF Amendment Primitives",
1665
1845
  "description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
1666
1846
  "$defs": {
@@ -1768,6 +1948,13 @@
1768
1948
  ]
1769
1949
  },
1770
1950
  "properties": {
1951
+ "externalReferences": {
1952
+ "type": "array",
1953
+ "items": {
1954
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/External_Reference"
1955
+ },
1956
+ "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
+ },
1771
1958
  "type": {
1772
1959
  "$ref": "#/$defs/Override_Type",
1773
1960
  "description": "The type of amendment."
@@ -1781,7 +1968,7 @@
1781
1968
  "description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
1782
1969
  },
1783
1970
  "status": {
1784
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0#/$defs/Result_Status",
1971
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0#/$defs/Result_Status",
1785
1972
  "description": "The new status this amendment sets. Optional when only impact is being overridden."
1786
1973
  },
1787
1974
  "impact": {
@@ -1793,7 +1980,7 @@
1793
1980
  "description": "Justification for this amendment."
1794
1981
  },
1795
1982
  "appliedBy": {
1796
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Identity",
1983
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Identity",
1797
1984
  "description": "Identity of who applied this amendment."
1798
1985
  },
1799
1986
  "appliedAt": {
@@ -1809,20 +1996,20 @@
1809
1996
  "evidence": {
1810
1997
  "type": "array",
1811
1998
  "items": {
1812
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Evidence"
1999
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Evidence"
1813
2000
  },
1814
2001
  "description": "Supporting evidence (screenshots, logs, URLs, documents)."
1815
2002
  },
1816
2003
  "signature": {
1817
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Signature",
2004
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Signature",
1818
2005
  "description": "Digital signature for non-repudiation."
1819
2006
  },
1820
2007
  "previousChecksum": {
1821
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Checksum",
2008
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Checksum",
1822
2009
  "description": "Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null for the first amendment."
1823
2010
  },
1824
2011
  "cvss": {
1825
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0#/$defs/Cvss",
2012
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0#/$defs/Cvss",
1826
2013
  "$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.",
1827
2014
  "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."
1828
2015
  },
@@ -1833,7 +2020,7 @@
1833
2020
  "milestones": {
1834
2021
  "type": "array",
1835
2022
  "items": {
1836
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.4.0#/$defs/Milestone"
2023
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.5.0#/$defs/Milestone"
1837
2024
  },
1838
2025
  "description": "Remediation milestones (primarily for POA&M type amendments)."
1839
2026
  },
@@ -1850,7 +2037,7 @@
1850
2037
  "affectedPackages": {
1851
2038
  "type": "array",
1852
2039
  "items": {
1853
- "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0#/$defs/Affected_Package"
2040
+ "$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0#/$defs/Affected_Package"
1854
2041
  },
1855
2042
  "description": "Software packages this amendment is scoped to, distinct from componentRef (which scopes to an HDF-internal Component by UUID). Use 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. Symmetric with Evaluated_Requirement.affectedPackages, which scopes findings to the same package vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when that is set)."
1856
2043
  }
@@ -1983,9 +2170,9 @@
1983
2170
  }
1984
2171
  }
1985
2172
  },
1986
- "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0": {
2173
+ "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0": {
1987
2174
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1988
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.4.0",
2175
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.5.0",
1989
2176
  "title": "HDF Result Primitives",
1990
2177
  "description": "Types for representing assessment results and statuses.",
1991
2178
  "$defs": {
@@ -2116,9 +2303,9 @@
2116
2303
  }
2117
2304
  }
2118
2305
  },
2119
- "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0": {
2306
+ "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0": {
2120
2307
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2121
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.4.0",
2308
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.5.0",
2122
2309
  "title": "HDF CVSS Primitives",
2123
2310
  "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).",
2124
2311
  "$defs": {
@@ -2320,9 +2507,9 @@
2320
2507
  }
2321
2508
  }
2322
2509
  },
2323
- "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0": {
2510
+ "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0": {
2324
2511
  "$schema": "https://json-schema.org/draft/2020-12/schema",
2325
- "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.4.0",
2512
+ "$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.5.0",
2326
2513
  "title": "HDF Affected Package Primitives",
2327
2514
  "description": "Types for representing the software package(s) affected by a vulnerability finding.",
2328
2515
  "$defs": {