@mitre/hdf-schema 3.7.2 → 3.8.0-next.42533588944.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/go/hdf.go +1470 -1276
- package/dist/helpers.d.ts +7 -5
- package/dist/helpers.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +28 -28
- package/dist/schemas/hdf-amendments.schema.json +562 -112
- package/dist/schemas/hdf-baseline.schema.json +570 -118
- package/dist/schemas/hdf-comparison.schema.json +997 -242
- package/dist/schemas/hdf-evidence-package.schema.json +566 -115
- package/dist/schemas/hdf-plan.schema.json +568 -118
- package/dist/schemas/hdf-requirement-change-event.schema.json +658 -211
- package/dist/schemas/hdf-results.schema.json +644 -197
- package/dist/schemas/hdf-system.schema.json +604 -147
- package/dist/ts/hdf.d.ts +284 -56
- package/dist/ts/hdf.js +24 -9
- package/dist/ts/hdf.ts +285 -50
- package/package.json +3 -3
|
@@ -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-results/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0",
|
|
4
4
|
"type": "object",
|
|
5
5
|
"unevaluatedProperties": false,
|
|
6
6
|
"required": [
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"externalReferences": {
|
|
11
11
|
"type": "array",
|
|
12
12
|
"items": {
|
|
13
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
13
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
14
14
|
},
|
|
15
15
|
"description": "Optional references to external artifacts (CTI/STIX, BOMs, advisories, runbooks, or any URI-addressable artifact) relevant to this assessment as a whole. Inert context; see External_Reference."
|
|
16
16
|
},
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"components": {
|
|
28
28
|
"type": "array",
|
|
29
29
|
"items": {
|
|
30
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
30
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
31
31
|
},
|
|
32
32
|
"description": "The components that were assessed. Each component describes a system element (host, container, cloud resource, application, etc.) with optional identity, SBOM, and external references."
|
|
33
33
|
},
|
|
@@ -39,23 +39,23 @@
|
|
|
39
39
|
"description": "Information on the baselines that were evaluated, including findings."
|
|
40
40
|
},
|
|
41
41
|
"statistics": {
|
|
42
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
42
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0#/$defs/Statistics",
|
|
43
43
|
"description": "Statistics for the assessment run, including duration and result counts."
|
|
44
44
|
},
|
|
45
45
|
"generator": {
|
|
46
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
46
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
47
47
|
"description": "Information about the tool that generated this file."
|
|
48
48
|
},
|
|
49
49
|
"tool": {
|
|
50
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
50
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
|
|
51
51
|
"description": "The security tool that produced the assessment data in this file."
|
|
52
52
|
},
|
|
53
53
|
"integrity": {
|
|
54
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
54
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
55
55
|
"description": "Cryptographic integrity information for verifying this file."
|
|
56
56
|
},
|
|
57
57
|
"preAmendmentChecksum": {
|
|
58
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
58
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
59
59
|
"description": "Hash of this results document as it stood immediately before the most recent amendment application. Written by `hdf amend apply` when it applies at least one override; an apply that matches nothing leaves the document untouched. The hash covers the results file's RAW BYTES as read, not a canonical form, so reproducing it requires the byte-identical original — reformatting or re-serializing the source changes the value. Only the most recent pre-application state is recorded: applying amendments to an already-amended document REPLACES this value, so it is a single link back one step, not a growing chain. Distinct from the `previousChecksum` inside an override, which chains amendments to each other and is computed over a canonical JSON form.",
|
|
60
60
|
"$comment": "Example 1: the real SHA-256 of hdf-converters/converters/nessus-to-hdf/fixtures/expected/sample.nessus.hdf.json, reproducible with `shasum -a 256` on that file — chosen over a synthetic digest so a reader can verify the hash basis is the raw file bytes.",
|
|
61
61
|
"examples": [
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"runner": {
|
|
69
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
69
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0#/$defs/Runner",
|
|
70
70
|
"description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
|
|
71
71
|
},
|
|
72
72
|
"remediation": {
|
|
73
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
73
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Remediation",
|
|
74
74
|
"description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
|
|
75
75
|
},
|
|
76
76
|
"systemRef": {
|
|
@@ -84,13 +84,12 @@
|
|
|
84
84
|
"description": "Reference to an hdf-plan document describing the assessment plan that produced these results. May be a relative path, absolute URI, or fragment identifier."
|
|
85
85
|
},
|
|
86
86
|
"derivation": {
|
|
87
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
87
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Derivation",
|
|
88
88
|
"description": "Present ONLY on reconciled result sets: lineage recording the seed snapshot and event watermark this document was reassembled from (ADR-0005). Documents produced directly by a scan omit this field. When present, generator names the reconciling tool."
|
|
89
89
|
},
|
|
90
90
|
"extensions": {
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"description": "Reserved for tool-specific data not defined in the HDF standard. Use this to preserve original tool output, auxiliary data, or custom metadata."
|
|
91
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
92
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these results were converted from."
|
|
94
93
|
}
|
|
95
94
|
},
|
|
96
95
|
"examples": [
|
|
@@ -182,14 +181,14 @@
|
|
|
182
181
|
],
|
|
183
182
|
"allOf": [
|
|
184
183
|
{
|
|
185
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
184
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Baseline_Metadata"
|
|
186
185
|
}
|
|
187
186
|
],
|
|
188
187
|
"properties": {
|
|
189
188
|
"depends": {
|
|
190
189
|
"type": "array",
|
|
191
190
|
"items": {
|
|
192
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
191
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Dependency"
|
|
193
192
|
},
|
|
194
193
|
"description": "The set of dependencies this baseline depends on."
|
|
195
194
|
},
|
|
@@ -197,21 +196,17 @@
|
|
|
197
196
|
"type": "string",
|
|
198
197
|
"description": "The name of the parent baseline if this is a dependency of another."
|
|
199
198
|
},
|
|
200
|
-
"description": {
|
|
201
|
-
"type": "string",
|
|
202
|
-
"description": "The description - should be more detailed than the summary."
|
|
203
|
-
},
|
|
204
199
|
"integrity": {
|
|
205
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
200
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
206
201
|
"description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
|
|
207
202
|
},
|
|
208
203
|
"originalChecksum": {
|
|
209
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
204
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
210
205
|
"description": "SHA-256 checksum of the original baseline definition file (before execution). This is an immutable reference to the baseline as defined, used to detect tampering with baseline requirements or metadata."
|
|
211
206
|
},
|
|
212
207
|
"resultsChecksum": {
|
|
213
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
214
|
-
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results.
|
|
208
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
209
|
+
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results. Amendment integrity is checked against the document-level preAmendmentChecksum at the root, not this per-baseline value: hdf amend apply writes it as the hash of the raw document bytes immediately before the most recent amendment application, one step back only."
|
|
215
210
|
},
|
|
216
211
|
"statusMessage": {
|
|
217
212
|
"type": "string",
|
|
@@ -228,21 +223,20 @@
|
|
|
228
223
|
"groups": {
|
|
229
224
|
"type": "array",
|
|
230
225
|
"items": {
|
|
231
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
226
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Group"
|
|
232
227
|
},
|
|
233
228
|
"description": "A set of descriptions for the requirement groups."
|
|
234
229
|
},
|
|
235
230
|
"inputs": {
|
|
236
231
|
"type": "array",
|
|
237
232
|
"items": {
|
|
238
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
233
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0#/$defs/Input"
|
|
239
234
|
},
|
|
240
235
|
"description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
|
|
241
236
|
},
|
|
242
237
|
"extensions": {
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"description": "Reserved for tool-specific baseline metadata not defined in the HDF standard."
|
|
238
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
239
|
+
"description": "Producer data outside the HDF model that belongs to this baseline rather than to the document, and the pre-converted source artifact(s) this baseline was built from."
|
|
246
240
|
}
|
|
247
241
|
},
|
|
248
242
|
"description": "Information on a baseline that was evaluated, including any findings.",
|
|
@@ -260,7 +254,7 @@
|
|
|
260
254
|
],
|
|
261
255
|
"allOf": [
|
|
262
256
|
{
|
|
263
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
257
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Core"
|
|
264
258
|
}
|
|
265
259
|
],
|
|
266
260
|
"properties": {
|
|
@@ -268,7 +262,7 @@
|
|
|
268
262
|
"type": "array",
|
|
269
263
|
"minItems": 1,
|
|
270
264
|
"items": {
|
|
271
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
265
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Description"
|
|
272
266
|
},
|
|
273
267
|
"contains": {
|
|
274
268
|
"type": "object",
|
|
@@ -284,37 +278,37 @@
|
|
|
284
278
|
"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'."
|
|
285
279
|
},
|
|
286
280
|
"severity": {
|
|
287
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
281
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Severity",
|
|
288
282
|
"description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
|
|
289
283
|
},
|
|
290
284
|
"sourceLocation": {
|
|
291
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
285
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Source_Location",
|
|
292
286
|
"description": "The explicit location of the requirement within the source code."
|
|
293
287
|
},
|
|
294
288
|
"results": {
|
|
295
289
|
"type": "array",
|
|
296
290
|
"minItems": 1,
|
|
297
291
|
"items": {
|
|
298
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
292
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Result"
|
|
299
293
|
},
|
|
300
294
|
"description": "The set of all tests within the requirement and their results."
|
|
301
295
|
},
|
|
302
296
|
"statusOverrides": {
|
|
303
297
|
"type": "array",
|
|
304
298
|
"items": {
|
|
305
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
299
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Status_Override"
|
|
306
300
|
},
|
|
307
301
|
"description": "Chronological history of all overrides applied to this requirement. Overrides are intentional changes to the compliance status and/or impact score (waivers, attestations, false positives, risk adjustments). Array order is NOT significant: consumers resolve the governing override by appliedAt (the most recently applied non-expired one), never by position. Earlier revisions of this description asked for most-recent-first, but nothing enforces it and producers commonly append, so position is frequently the opposite of recency. Preserves full audit trail."
|
|
308
302
|
},
|
|
309
303
|
"poams": {
|
|
310
304
|
"type": "array",
|
|
311
305
|
"items": {
|
|
312
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
306
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/POAM"
|
|
313
307
|
},
|
|
314
308
|
"description": "Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance. POAMs do NOT change effectiveStatus - they track the work being done to address a failure. Separate from statusOverrides which DO change status."
|
|
315
309
|
},
|
|
316
310
|
"effectiveStatus": {
|
|
317
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
311
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
318
312
|
"description": "The current effective compliance status of this requirement after applying the most recent non-expired override with a status field, or computed from results (worst-wins) if no status-bearing overrides exist."
|
|
319
313
|
},
|
|
320
314
|
"effectiveImpact": {
|
|
@@ -324,33 +318,33 @@
|
|
|
324
318
|
"description": "The current effective impact score (0.0–1.0) after applying the most recent non-expired override with an impact field. Absent when no impact overrides apply; consumers should use the requirement's impact field in that case."
|
|
325
319
|
},
|
|
326
320
|
"disposition": {
|
|
327
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
321
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
328
322
|
"description": "The type of the most recent non-expired override or POAM governing this requirement. Indicates why the requirement is in its current state (e.g., waiver, falsePositive, riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or POAMs apply."
|
|
329
323
|
},
|
|
330
324
|
"effectiveChecksum": {
|
|
331
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
325
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
332
326
|
"description": "Checksum of this requirement's resolved effective posture, for per-control change detection in continuous monitoring.\n\nsha256 over the canonical JSON object with keys status, impact, disposition (in that order), holding the resolved effective status, resolved effective impact, and governing override type (null when nothing governs), with override expiry anchored to the document timestamp.\n\nFlips exactly when the operative status, impact, or disposition changes; stable under all other churn (result details, timestamps, tags).\n\nOptional; stamped by tooling (hdf convert, hdf amend apply)."
|
|
333
327
|
},
|
|
334
328
|
"evidence": {
|
|
335
329
|
"type": "array",
|
|
336
330
|
"items": {
|
|
337
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
331
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
338
332
|
},
|
|
339
333
|
"description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
|
|
340
334
|
},
|
|
341
335
|
"cvss": {
|
|
342
336
|
"type": "array",
|
|
343
337
|
"items": {
|
|
344
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
338
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss"
|
|
345
339
|
},
|
|
346
340
|
"description": "Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for risk adjustment. See cvss.schema.json."
|
|
347
341
|
},
|
|
348
342
|
"epss": {
|
|
349
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
343
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0#/$defs/Epss",
|
|
350
344
|
"description": "FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used alongside CVSS for prioritization — captures the probability the vulnerability will be exploited."
|
|
351
345
|
},
|
|
352
346
|
"kev": {
|
|
353
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
347
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0#/$defs/Kev",
|
|
354
348
|
"description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
|
|
355
349
|
},
|
|
356
350
|
"cwe": {
|
|
@@ -364,7 +358,7 @@
|
|
|
364
358
|
"affectedPackages": {
|
|
365
359
|
"type": "array",
|
|
366
360
|
"items": {
|
|
367
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
361
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
368
362
|
},
|
|
369
363
|
"description": "Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see components[] on hdf-system for component-level package inventories. One entry per matched package signature (scanners often report multiple CPE variations per CVE)."
|
|
370
364
|
}
|
|
@@ -584,7 +578,6 @@
|
|
|
584
578
|
"statusOverrides": [
|
|
585
579
|
{
|
|
586
580
|
"type": "operationalRequirement",
|
|
587
|
-
"status": "failed",
|
|
588
581
|
"reason": "Air-gapped system requires USB transfer for classified data ingestion per operational procedure OP-2026-003. Compensating controls: USB ports are physically secured, all transfers are logged and require two-person integrity.",
|
|
589
582
|
"appliedBy": {
|
|
590
583
|
"type": "email",
|
|
@@ -651,16 +644,29 @@
|
|
|
651
644
|
"description": "A requirement that has been evaluated, including any findings.",
|
|
652
645
|
"title": "Evaluated Requirement"
|
|
653
646
|
},
|
|
654
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
647
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
|
|
655
648
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
656
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
649
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
|
|
657
650
|
"title": "HDF Common Primitives",
|
|
658
651
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
659
652
|
"$defs": {
|
|
653
|
+
"External_Reference_Encoding": {
|
|
654
|
+
"type": "string",
|
|
655
|
+
"enum": [
|
|
656
|
+
"utf-8",
|
|
657
|
+
"base64"
|
|
658
|
+
],
|
|
659
|
+
"description": "How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not valid UTF-8 text.",
|
|
660
|
+
"title": "External Reference Encoding",
|
|
661
|
+
"examples": [
|
|
662
|
+
"base64"
|
|
663
|
+
],
|
|
664
|
+
"$comment": "Examples, in order: 1) a binary artifact, embedded base64-encoded."
|
|
665
|
+
},
|
|
660
666
|
"External_Reference": {
|
|
661
667
|
"type": "object",
|
|
662
668
|
"title": "External Reference",
|
|
663
|
-
"description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-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.\n\n`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.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
|
|
669
|
+
"description": "A generalized reference to any external artifact by identity and/or location, modeled on the STIX 2.1 `external_references` common property.\n\nPurpose-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.\n\n`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.\n\nAn entry may also carry the artifact itself rather than point at it: `document` for a JSON object, `content` + `encoding` for anything else. Embedding satisfies the at-least-one rule on its own, so an artifact with no meaningful public location needs no synthetic `href`.\n\nA reference is inert context: it overrides nothing, so it carries only lightweight optional `addedBy`/`addedAt` attribution, never override machinery.",
|
|
664
670
|
"required": [
|
|
665
671
|
"sourceName"
|
|
666
672
|
],
|
|
@@ -679,6 +685,42 @@
|
|
|
679
685
|
"required": [
|
|
680
686
|
"description"
|
|
681
687
|
]
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
"required": [
|
|
691
|
+
"content"
|
|
692
|
+
]
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
"required": [
|
|
696
|
+
"document"
|
|
697
|
+
]
|
|
698
|
+
}
|
|
699
|
+
],
|
|
700
|
+
"allOf": [
|
|
701
|
+
{
|
|
702
|
+
"if": {
|
|
703
|
+
"required": [
|
|
704
|
+
"content"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
"then": {
|
|
708
|
+
"required": [
|
|
709
|
+
"encoding"
|
|
710
|
+
]
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
"if": {
|
|
715
|
+
"required": [
|
|
716
|
+
"encoding"
|
|
717
|
+
]
|
|
718
|
+
},
|
|
719
|
+
"then": {
|
|
720
|
+
"required": [
|
|
721
|
+
"content"
|
|
722
|
+
]
|
|
723
|
+
}
|
|
682
724
|
}
|
|
683
725
|
],
|
|
684
726
|
"properties": {
|
|
@@ -694,7 +736,7 @@
|
|
|
694
736
|
"href": {
|
|
695
737
|
"type": "string",
|
|
696
738
|
"format": "uri-reference",
|
|
697
|
-
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs.
|
|
739
|
+
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs. Set it only when the location is meaningful to a reader — never a producer's local filesystem path."
|
|
698
740
|
},
|
|
699
741
|
"description": {
|
|
700
742
|
"type": "string",
|
|
@@ -706,11 +748,11 @@
|
|
|
706
748
|
},
|
|
707
749
|
"mediaType": {
|
|
708
750
|
"type": "string",
|
|
709
|
-
"description": "IANA media type of the
|
|
751
|
+
"description": "IANA media type of the artifact (RFC 6838), e.g., 'application/json', 'application/xml', 'text/csv'. Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document`."
|
|
710
752
|
},
|
|
711
753
|
"checksum": {
|
|
712
754
|
"$ref": "#/$defs/Checksum",
|
|
713
|
-
"description": "Integrity hash of the
|
|
755
|
+
"description": "Integrity hash of the artifact. Reuses the HDF `Checksum` primitive (not STIX `hashes`). Applies both to an artifact retrievable at `href` and to one embedded here in `content` or `document` — beside embedded bytes it is what makes the copy verifiable rather than merely present."
|
|
714
756
|
},
|
|
715
757
|
"addedBy": {
|
|
716
758
|
"$ref": "#/$defs/Identity",
|
|
@@ -729,11 +771,19 @@
|
|
|
729
771
|
"document": {
|
|
730
772
|
"type": "object",
|
|
731
773
|
"additionalProperties": true,
|
|
732
|
-
"description": "Optional lossless embedded copy of the referenced artifact — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nComposes 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.\n\nHDF 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)."
|
|
774
|
+
"description": "Optional lossless embedded copy of the referenced artifact as a JSON object — the raw STIX object, EPSS record, advisory, or annotation payload — preserved verbatim.\n\nJSON objects only. An artifact that is not a JSON object (XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not text at all) embeds through `content` + `encoding` instead.\n\nComposes 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.\n\nHDF 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)."
|
|
775
|
+
},
|
|
776
|
+
"content": {
|
|
777
|
+
"type": "string",
|
|
778
|
+
"description": "Optional lossless embedded copy of the artifact's bytes as a string, for artifacts `document` cannot hold: XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not valid UTF-8 text at all.\n\n`encoding` states how to read it back and is required alongside it. Set `mediaType` so a consumer knows what the bytes are, and `checksum` so the copy can be verified against the source.\n\nCarried verbatim — never reformatted, re-indented, or re-serialized."
|
|
779
|
+
},
|
|
780
|
+
"encoding": {
|
|
781
|
+
"$ref": "#/$defs/External_Reference_Encoding",
|
|
782
|
+
"description": "How to read `content` back into the artifact's bytes. 'utf-8' for text (XML, CSV, NDJSON, plain text, JavaScript-wrapped JSON); 'base64' for anything that is not valid UTF-8 text.\n\nRequired whenever `content` is present, and meaningless without it — an embedded copy whose encoding a consumer has to guess is not lossless."
|
|
733
783
|
}
|
|
734
784
|
},
|
|
735
785
|
"unevaluatedProperties": false,
|
|
736
|
-
"$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.",
|
|
786
|
+
"$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; 5) Embed-only, text: an XCCDF results file carried in `content` as utf-8 with its media type and checksum, and no `href` at all — the artifact was read from a local file whose path means nothing to a reader; 6) Embed-only, non-text: a Fortify FPR (a zip) carried in `content` as base64, the case `document` and utf-8 both fail.",
|
|
737
787
|
"examples": [
|
|
738
788
|
{
|
|
739
789
|
"sourceName": "cve",
|
|
@@ -779,6 +829,28 @@
|
|
|
779
829
|
}
|
|
780
830
|
]
|
|
781
831
|
}
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
"sourceName": "openscap",
|
|
835
|
+
"rel": "raw-source",
|
|
836
|
+
"mediaType": "application/xml",
|
|
837
|
+
"encoding": "utf-8",
|
|
838
|
+
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
|
|
839
|
+
"checksum": {
|
|
840
|
+
"algorithm": "sha256",
|
|
841
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
842
|
+
}
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
"sourceName": "fortify",
|
|
846
|
+
"rel": "raw-source",
|
|
847
|
+
"mediaType": "application/zip",
|
|
848
|
+
"encoding": "base64",
|
|
849
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
850
|
+
"checksum": {
|
|
851
|
+
"algorithm": "sha256",
|
|
852
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
853
|
+
}
|
|
782
854
|
}
|
|
783
855
|
]
|
|
784
856
|
},
|
|
@@ -790,7 +862,7 @@
|
|
|
790
862
|
"sha512",
|
|
791
863
|
"blake3"
|
|
792
864
|
],
|
|
793
|
-
"description": "
|
|
865
|
+
"description": "Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers container-image and other artifact digests that use it. HDF tooling verifies every algorithm in this enum, so any of them may be recorded where the checksum needs to be verifiable. md5 and sha1 are excluded deliberately: a checksum or integrity record exists to detect tampering, and both are collision-broken, so a digest in either would look verifiable while proving nothing. A source tool digest in an excluded algorithm is not recorded as a checksum. Admitting weak hashes as an application-level accept/reject decision was considered and rejected; widening this enum is a schema decision, not an oversight.",
|
|
794
866
|
"title": "Hash Algorithm"
|
|
795
867
|
},
|
|
796
868
|
"Requirement_Group": {
|
|
@@ -948,7 +1020,33 @@
|
|
|
948
1020
|
}
|
|
949
1021
|
],
|
|
950
1022
|
"description": "A reference to an external document.",
|
|
951
|
-
"title": "Reference"
|
|
1023
|
+
"title": "Reference",
|
|
1024
|
+
"unevaluatedProperties": false,
|
|
1025
|
+
"$comment": "Examples, in order: 1) By-locator: a plain URL, the commonest form by far in practice; 2) By-name: a human-meaningful citation with no locator, as InSpec's `ref 'title'` emits; 3) Both together, since this is an anyOf rather than a oneOf; 4) The ref-as-array form, whose items are deliberately open so a source format's own reference record can be carried verbatim — XCCDF's DPMS target identifiers reach HDF this way; 5) uri, accepted as a synonym of url for documents that spell it that way. The object itself is CLOSED: a member none of the three branches declares is rejected. The openness that matters here is one level down, on the items of the ref array, and it is declared there explicitly. This primitive predates External_Reference, which is the STIX-aligned type a new converter should reach for; refs survives because it is InSpec-inherited and HDF consumes InSpec output.",
|
|
1026
|
+
"examples": [
|
|
1027
|
+
{
|
|
1028
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"ref": "NIST SP 800-53 Rev 5, AC-6"
|
|
1032
|
+
},
|
|
1033
|
+
{
|
|
1034
|
+
"ref": "CIS Benchmark for RHEL 9, 1.1.1",
|
|
1035
|
+
"url": "https://www.cisecurity.org/benchmark/red_hat_linux"
|
|
1036
|
+
},
|
|
1037
|
+
{
|
|
1038
|
+
"ref": [
|
|
1039
|
+
{
|
|
1040
|
+
"identifier": "2921",
|
|
1041
|
+
"publisher": "DISA",
|
|
1042
|
+
"type": "DPMS Target"
|
|
1043
|
+
}
|
|
1044
|
+
]
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"uri": "https://attack.mitre.org/techniques/T1059/"
|
|
1048
|
+
}
|
|
1049
|
+
]
|
|
952
1050
|
},
|
|
953
1051
|
"Source_Location": {
|
|
954
1052
|
"type": "object",
|
|
@@ -1466,6 +1564,10 @@
|
|
|
1466
1564
|
"type": "string",
|
|
1467
1565
|
"description": "The title - should be human readable."
|
|
1468
1566
|
},
|
|
1567
|
+
"description": {
|
|
1568
|
+
"type": "string",
|
|
1569
|
+
"description": "Prose description of the baseline, more detailed than summary. Carried verbatim, like every HDF prose field."
|
|
1570
|
+
},
|
|
1469
1571
|
"maintainer": {
|
|
1470
1572
|
"type": "string",
|
|
1471
1573
|
"description": "The maintainer(s)."
|
|
@@ -1544,7 +1646,7 @@
|
|
|
1544
1646
|
},
|
|
1545
1647
|
"id": {
|
|
1546
1648
|
"type": "string",
|
|
1547
|
-
"description": "The requirement identifier. Example: 'SV-238196'."
|
|
1649
|
+
"description": "The requirement identifier, naming the requirement itself rather than one finding of it. Example: 'SV-238196'. Several entries in one baseline may legitimately carry the same id (one scanner reporting one CVE against several packages, or an overlay restating what it inherits), so an id is not an instance key: index requirements as id to list, never id to one, and an amendment addressing an id applies to every entry carrying it."
|
|
1548
1650
|
},
|
|
1549
1651
|
"title": {
|
|
1550
1652
|
"type": "string",
|
|
@@ -1762,9 +1864,9 @@
|
|
|
1762
1864
|
}
|
|
1763
1865
|
}
|
|
1764
1866
|
},
|
|
1765
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1867
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
|
|
1766
1868
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1767
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1869
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
|
|
1768
1870
|
"title": "HDF Component Primitives",
|
|
1769
1871
|
"description": "First-class system component with identity, polymorphic type, generalized BOM attachment (boms[]), and system-binding properties. Components are the successor to Targets, adding stable identity (componentId), external system cross-references, and manifest inventory (SBOM, AI model/dataset, and reserved future BOM kinds).",
|
|
1770
1872
|
"$defs": {
|
|
@@ -1810,7 +1912,7 @@
|
|
|
1810
1912
|
"description": "Description of this component's role or purpose."
|
|
1811
1913
|
},
|
|
1812
1914
|
"owner": {
|
|
1813
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1915
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
1814
1916
|
"description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
|
|
1815
1917
|
},
|
|
1816
1918
|
"externalIds": {
|
|
@@ -1830,14 +1932,14 @@
|
|
|
1830
1932
|
"boms": {
|
|
1831
1933
|
"type": "array",
|
|
1832
1934
|
"items": {
|
|
1833
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
1935
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
|
|
1834
1936
|
},
|
|
1835
1937
|
"description": "Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType), each carried by passthrough (ref/document) or normalized. Replaces the former sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an ai-model BOM). See primitives/bom.schema.json."
|
|
1836
1938
|
},
|
|
1837
1939
|
"integrity": {
|
|
1838
1940
|
"type": "array",
|
|
1839
1941
|
"items": {
|
|
1840
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1942
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
1841
1943
|
},
|
|
1842
1944
|
"description": "Cryptographic integrity of this component's underlying artifact — model weights or shards, dataset archive, container image, or package bytes.\n\nAn array supports multi-file/sharded artifacts.\n\nThis is the single, generic home for artifact/subject integrity across all component types (it replaced the former per-type Container_Image digest and Artifact checksum fields).\n\nDistinct from BOM-document integrity (Bom.hashes[]) and from the document tamper-evidence Integrity type."
|
|
1843
1945
|
},
|
|
@@ -1851,12 +1953,12 @@
|
|
|
1851
1953
|
"inputOverrides": {
|
|
1852
1954
|
"type": "array",
|
|
1853
1955
|
"items": {
|
|
1854
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1956
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
|
|
1855
1957
|
},
|
|
1856
1958
|
"description": "System-specific overrides for baseline input values."
|
|
1857
1959
|
},
|
|
1858
1960
|
"targetSelector": {
|
|
1859
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1961
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
|
|
1860
1962
|
"description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
|
|
1861
1963
|
}
|
|
1862
1964
|
},
|
|
@@ -2139,7 +2241,7 @@
|
|
|
2139
2241
|
"const": "cloudAccount"
|
|
2140
2242
|
},
|
|
2141
2243
|
"provider": {
|
|
2142
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2244
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
2143
2245
|
"description": "Cloud provider."
|
|
2144
2246
|
},
|
|
2145
2247
|
"accountId": {
|
|
@@ -2178,7 +2280,7 @@
|
|
|
2178
2280
|
"const": "cloudResource"
|
|
2179
2281
|
},
|
|
2180
2282
|
"provider": {
|
|
2181
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2283
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
2182
2284
|
"description": "Cloud provider."
|
|
2183
2285
|
},
|
|
2184
2286
|
"resourceType": {
|
|
@@ -2477,9 +2579,9 @@
|
|
|
2477
2579
|
}
|
|
2478
2580
|
}
|
|
2479
2581
|
},
|
|
2480
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2582
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
|
|
2481
2583
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2482
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2584
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
|
|
2483
2585
|
"title": "HDF BOM Primitives",
|
|
2484
2586
|
"description": "Generalized Bill-of-Materials / manifest representation.\n\nOne extensible Bom shape, discriminated by bomType, carries any manifest kind (SBOM, AI model/dataset, and reserved future kinds) either by passthrough (opaque ref/embed of the native document) or normalized (converted into HDF's queryable shape).\n\nSubject identity (name, version, componentId) is inherited from the host component or system — the BOM never re-owns it.\n\nSee ADR-0001.",
|
|
2485
2587
|
"$defs": {
|
|
@@ -2535,7 +2637,7 @@
|
|
|
2535
2637
|
"hashes": {
|
|
2536
2638
|
"type": "array",
|
|
2537
2639
|
"items": {
|
|
2538
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2640
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
2539
2641
|
},
|
|
2540
2642
|
"description": "Integrity of the carried BOM *document* itself (the referenced/embedded manifest file), NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model weights, dataset archive) is a component-level concern, not carried here. Subject identity is inherited from the host component/system; per-node identity lives in the type-extension."
|
|
2541
2643
|
},
|
|
@@ -2731,6 +2833,25 @@
|
|
|
2731
2833
|
}
|
|
2732
2834
|
]
|
|
2733
2835
|
},
|
|
2836
|
+
"Modality": {
|
|
2837
|
+
"type": [
|
|
2838
|
+
"string",
|
|
2839
|
+
"array"
|
|
2840
|
+
],
|
|
2841
|
+
"items": {
|
|
2842
|
+
"type": "string"
|
|
2843
|
+
},
|
|
2844
|
+
"description": "A content modality such as text, image, audio, tabular or timeseries: one string, or a list when the content spans several.",
|
|
2845
|
+
"title": "Modality",
|
|
2846
|
+
"examples": [
|
|
2847
|
+
"text",
|
|
2848
|
+
[
|
|
2849
|
+
"text",
|
|
2850
|
+
"image"
|
|
2851
|
+
]
|
|
2852
|
+
],
|
|
2853
|
+
"$comment": "Examples, in order: 1) a single modality; 2) multimodal content listed in full."
|
|
2854
|
+
},
|
|
2734
2855
|
"AI_Model_Extension": {
|
|
2735
2856
|
"type": "object",
|
|
2736
2857
|
"additionalProperties": true,
|
|
@@ -2832,13 +2953,7 @@
|
|
|
2832
2953
|
"description": "Input/output data types. Examples: string, byte[], float32, image."
|
|
2833
2954
|
},
|
|
2834
2955
|
"modality": {
|
|
2835
|
-
"
|
|
2836
|
-
"string",
|
|
2837
|
-
"array"
|
|
2838
|
-
],
|
|
2839
|
-
"items": {
|
|
2840
|
-
"type": "string"
|
|
2841
|
-
},
|
|
2956
|
+
"$ref": "#/$defs/Modality",
|
|
2842
2957
|
"description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
|
|
2843
2958
|
},
|
|
2844
2959
|
"contextLength": {
|
|
@@ -2878,13 +2993,7 @@
|
|
|
2878
2993
|
"description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
|
|
2879
2994
|
},
|
|
2880
2995
|
"modality": {
|
|
2881
|
-
"
|
|
2882
|
-
"string",
|
|
2883
|
-
"array"
|
|
2884
|
-
],
|
|
2885
|
-
"items": {
|
|
2886
|
-
"type": "string"
|
|
2887
|
-
},
|
|
2996
|
+
"$ref": "#/$defs/Modality",
|
|
2888
2997
|
"description": "Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text, image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not physical format. String or array of strings."
|
|
2889
2998
|
},
|
|
2890
2999
|
"provenance": {
|
|
@@ -2947,9 +3056,9 @@
|
|
|
2947
3056
|
}
|
|
2948
3057
|
}
|
|
2949
3058
|
},
|
|
2950
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
3059
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
|
|
2951
3060
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2952
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
3061
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
|
|
2953
3062
|
"title": "HDF System Primitives",
|
|
2954
3063
|
"description": "Types for describing system architecture, authorization boundaries, and components.",
|
|
2955
3064
|
"$defs": {
|
|
@@ -3000,7 +3109,7 @@
|
|
|
3000
3109
|
"description": "Rationale for why this override is needed."
|
|
3001
3110
|
},
|
|
3002
3111
|
"approvedBy": {
|
|
3003
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3112
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3004
3113
|
"description": "Identity of the person or system that approved this override."
|
|
3005
3114
|
}
|
|
3006
3115
|
},
|
|
@@ -3082,9 +3191,9 @@
|
|
|
3082
3191
|
}
|
|
3083
3192
|
}
|
|
3084
3193
|
},
|
|
3085
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
3194
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0": {
|
|
3086
3195
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3087
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
3196
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0",
|
|
3088
3197
|
"title": "HDF Statistics Primitives",
|
|
3089
3198
|
"description": "Statistics types for tracking assessment run metrics.",
|
|
3090
3199
|
"$defs": {
|
|
@@ -3153,12 +3262,183 @@
|
|
|
3153
3262
|
}
|
|
3154
3263
|
}
|
|
3155
3264
|
},
|
|
3156
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
3265
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
|
|
3157
3266
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3158
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
3267
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
|
|
3159
3268
|
"title": "HDF Extension Primitives",
|
|
3160
|
-
"description": "Extension types for waivers, attestations, generators, and
|
|
3269
|
+
"description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
|
|
3161
3270
|
"$defs": {
|
|
3271
|
+
"Raw_Source_Artifact": {
|
|
3272
|
+
"allOf": [
|
|
3273
|
+
{
|
|
3274
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
3275
|
+
},
|
|
3276
|
+
{
|
|
3277
|
+
"not": {
|
|
3278
|
+
"required": [
|
|
3279
|
+
"document"
|
|
3280
|
+
]
|
|
3281
|
+
}
|
|
3282
|
+
},
|
|
3283
|
+
{
|
|
3284
|
+
"if": {
|
|
3285
|
+
"required": [
|
|
3286
|
+
"content"
|
|
3287
|
+
]
|
|
3288
|
+
},
|
|
3289
|
+
"then": {
|
|
3290
|
+
"required": [
|
|
3291
|
+
"encoding",
|
|
3292
|
+
"mediaType"
|
|
3293
|
+
]
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
],
|
|
3297
|
+
"description": "One artifact exactly as a converter received it, before conversion.\n\nAn External_Reference used for a single purpose, so the same primitive both points and embeds: `sourceName` names the producing tool; `content` + `encoding` carry the bytes; `checksum` is of the exact bytes the converter read; `rel` is 'raw-source'; `href` appears only when the caller supplied a location that means something to a reader, never a producer's local filesystem path.\n\nBYTES, NOT A PARSED COPY. `document` is forbidden here, enforced by the schema rather than described: it holds a parsed JSON object, so embedding through it discards the original whitespace, key order, duplicate keys and trailing bytes — which makes the artifact unreconstructable and the checksum unverifiable against what is stored. A JSON input carries as a `content` string like every other input. This is deliberately stricter than HDF v2, whose `passthrough.raw` held a parsed structure in every converter but one, and which for XML inputs stored a reshaped object whose keys could collide.\n\n`mediaType` is REQUIRED on an entry that embeds — bytes whose type a consumer has to infer are not carriage. It is derived from the converter's declared input family (json → application/json, xml → application/xml, text → text/plain) and overridden by converters that know their bytes more precisely (CSV, NDJSON, JavaScript-wrapped JSON).\n\nAn entry that only points at a location may omit `mediaType`, `content` and `encoding`.",
|
|
3298
|
+
"$comment": "Examples, in order: 1) JSON input embedded as a utf-8 `content` string — the common case, and note it is NOT a parsed object; 2) XML input, which `document` never could have held; 3) CSV input, where `mediaType` overrides the 'text' input family's derived text/plain; 4) non-text input (a Fortify FPR zip) embedded as base64; 5) by-reference only: a scan retrievable at a meaningful URL, with no embedded copy and therefore no required mediaType, encoding or content.",
|
|
3299
|
+
"examples": [
|
|
3300
|
+
{
|
|
3301
|
+
"sourceName": "grype",
|
|
3302
|
+
"rel": "raw-source",
|
|
3303
|
+
"mediaType": "application/json",
|
|
3304
|
+
"encoding": "utf-8",
|
|
3305
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
3306
|
+
"checksum": {
|
|
3307
|
+
"algorithm": "sha256",
|
|
3308
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
3309
|
+
}
|
|
3310
|
+
},
|
|
3311
|
+
{
|
|
3312
|
+
"sourceName": "openscap",
|
|
3313
|
+
"rel": "raw-source",
|
|
3314
|
+
"mediaType": "application/xml",
|
|
3315
|
+
"encoding": "utf-8",
|
|
3316
|
+
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Benchmark xmlns=\"http://checklists.nist.gov/xccdf/1.2\" id=\"xccdf_org.ssgproject.content_benchmark_RHEL-9\">\n <TestResult id=\"xccdf_org.open-scap_testresult_default-profile\" start-time=\"2026-09-27T12:00:00+00:00\" end-time=\"2026-09-27T12:04:11+00:00\">\n <rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n </rule-result>\n </TestResult>\n</Benchmark>",
|
|
3317
|
+
"checksum": {
|
|
3318
|
+
"algorithm": "sha256",
|
|
3319
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
3320
|
+
}
|
|
3321
|
+
},
|
|
3322
|
+
{
|
|
3323
|
+
"sourceName": "prisma",
|
|
3324
|
+
"rel": "raw-source",
|
|
3325
|
+
"mediaType": "text/csv",
|
|
3326
|
+
"encoding": "utf-8",
|
|
3327
|
+
"content": "Hostname,Distro,CVE ID,Compliance ID,Type,Severity,Packages,Source Package,Package Version\nhost-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1\n",
|
|
3328
|
+
"checksum": {
|
|
3329
|
+
"algorithm": "sha256",
|
|
3330
|
+
"value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
|
|
3331
|
+
}
|
|
3332
|
+
},
|
|
3333
|
+
{
|
|
3334
|
+
"sourceName": "fortify",
|
|
3335
|
+
"rel": "raw-source",
|
|
3336
|
+
"mediaType": "application/zip",
|
|
3337
|
+
"encoding": "base64",
|
|
3338
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
3339
|
+
"checksum": {
|
|
3340
|
+
"algorithm": "sha256",
|
|
3341
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
3342
|
+
}
|
|
3343
|
+
},
|
|
3344
|
+
{
|
|
3345
|
+
"sourceName": "nessus",
|
|
3346
|
+
"rel": "raw-source",
|
|
3347
|
+
"href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
|
|
3348
|
+
"mediaType": "application/xml",
|
|
3349
|
+
"checksum": {
|
|
3350
|
+
"algorithm": "sha256",
|
|
3351
|
+
"value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
]
|
|
3355
|
+
},
|
|
3356
|
+
"Extensions": {
|
|
3357
|
+
"type": "object",
|
|
3358
|
+
"additionalProperties": false,
|
|
3359
|
+
"properties": {
|
|
3360
|
+
"passthrough": {
|
|
3361
|
+
"type": "object",
|
|
3362
|
+
"additionalProperties": true,
|
|
3363
|
+
"description": "Catch-all for producer data that HDF does not model — the role heimdall2's `passthrough.auxiliary_data` played: fields a converter deliberately carried but had no home for.\n\nDeliberately permissive: unenumerated properties are accepted by design, with no shape imposed on them. HDF neither reads nor interprets what is here. It is the ONLY permissive surface in `extensions` — everything HDF does not define belongs here rather than beside it.\n\nThis is NOT where the pre-converted source artifact goes. v2 put it here only because nothing else had room; `rawSourceArtifacts` is its home now, and it gives the bytes a checksum, a media type and a reference contract that an untyped object cannot.\n\nFor data that belongs to one requirement rather than to the document, use that object's own fields — a document-level bag cannot say which requirement it describes.",
|
|
3364
|
+
"examples": [
|
|
3365
|
+
{
|
|
3366
|
+
"auxiliary_data": [
|
|
3367
|
+
{
|
|
3368
|
+
"name": "Scoutsuite",
|
|
3369
|
+
"data": {
|
|
3370
|
+
"last_run": {
|
|
3371
|
+
"ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
|
|
3372
|
+
}
|
|
3373
|
+
}
|
|
3374
|
+
}
|
|
3375
|
+
]
|
|
3376
|
+
},
|
|
3377
|
+
{
|
|
3378
|
+
"audit": {
|
|
3379
|
+
"runId": "r-123"
|
|
3380
|
+
}
|
|
3381
|
+
}
|
|
3382
|
+
],
|
|
3383
|
+
"$comment": "Examples, in order: 1) heimdall2's auxiliary_data shape, the data a v2 mapper carried with nowhere else to put it; 2) the legacy top-level `passthrough` an HDF document arrived with, relocated here verbatim by the SAF-supplement normalizer."
|
|
3384
|
+
},
|
|
3385
|
+
"rawSourceArtifacts": {
|
|
3386
|
+
"type": "array",
|
|
3387
|
+
"items": {
|
|
3388
|
+
"$ref": "#/$defs/Raw_Source_Artifact"
|
|
3389
|
+
},
|
|
3390
|
+
"description": "The input(s) this document was converted from, verbatim.\n\nAn array because a conversion can consume more than one artifact — the OSCAL profile path takes a profile and a catalog. Every other converter takes one input, and an array of one costs nothing.\n\nPopulating this is required of ingest converters by policy, enforced by the converter contract and test harness rather than by a schema `required`: a tool that emits HDF natively has no source artifact, and requiring the field would make valid native HDF invalid."
|
|
3391
|
+
}
|
|
3392
|
+
},
|
|
3393
|
+
"title": "Extensions",
|
|
3394
|
+
"description": "Carrier for data outside the HDF model: `passthrough` for producer data HDF does not model, `rawSourceArtifacts` for the pre-converted input(s).\n\nCLOSED: these two members are the whole of it. A key HDF does not define goes inside `passthrough` — that is what `passthrough` is for — so `extensions` never becomes a second, unnamed schema that consumers must reverse-engineer from the producers that happen to write it.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.\n\nDeclared on every HDF document type that carries a producer envelope (`generator` / `integrity`), and on `Evaluated_Baseline`, so one rule governs both sites.",
|
|
3395
|
+
"$comment": "Examples, in order: 1) the whole contract in one object — a converter's input embedded beside the producer data it could not map; 2) carriage alone, the shape a converter emits when it has nothing homeless to record.",
|
|
3396
|
+
"examples": [
|
|
3397
|
+
{
|
|
3398
|
+
"passthrough": {
|
|
3399
|
+
"auxiliary_data": [
|
|
3400
|
+
{
|
|
3401
|
+
"name": "Grype",
|
|
3402
|
+
"data": {
|
|
3403
|
+
"descriptor": {
|
|
3404
|
+
"name": "grype",
|
|
3405
|
+
"version": "0.74.0"
|
|
3406
|
+
}
|
|
3407
|
+
}
|
|
3408
|
+
}
|
|
3409
|
+
]
|
|
3410
|
+
},
|
|
3411
|
+
"rawSourceArtifacts": [
|
|
3412
|
+
{
|
|
3413
|
+
"sourceName": "grype",
|
|
3414
|
+
"rel": "raw-source",
|
|
3415
|
+
"mediaType": "application/json",
|
|
3416
|
+
"encoding": "utf-8",
|
|
3417
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
3418
|
+
"checksum": {
|
|
3419
|
+
"algorithm": "sha256",
|
|
3420
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
3421
|
+
}
|
|
3422
|
+
}
|
|
3423
|
+
]
|
|
3424
|
+
},
|
|
3425
|
+
{
|
|
3426
|
+
"rawSourceArtifacts": [
|
|
3427
|
+
{
|
|
3428
|
+
"sourceName": "fortify",
|
|
3429
|
+
"rel": "raw-source",
|
|
3430
|
+
"mediaType": "application/zip",
|
|
3431
|
+
"encoding": "base64",
|
|
3432
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
3433
|
+
"checksum": {
|
|
3434
|
+
"algorithm": "sha256",
|
|
3435
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
3436
|
+
}
|
|
3437
|
+
}
|
|
3438
|
+
]
|
|
3439
|
+
}
|
|
3440
|
+
]
|
|
3441
|
+
},
|
|
3162
3442
|
"Status_Override": {
|
|
3163
3443
|
"type": "object",
|
|
3164
3444
|
"unevaluatedProperties": false,
|
|
@@ -3169,44 +3449,99 @@
|
|
|
3169
3449
|
"appliedAt",
|
|
3170
3450
|
"expiresAt"
|
|
3171
3451
|
],
|
|
3172
|
-
"
|
|
3452
|
+
"allOf": [
|
|
3173
3453
|
{
|
|
3174
|
-
"
|
|
3175
|
-
"
|
|
3176
|
-
|
|
3454
|
+
"if": {
|
|
3455
|
+
"properties": {
|
|
3456
|
+
"type": {
|
|
3457
|
+
"enum": [
|
|
3458
|
+
"operationalRequirement"
|
|
3459
|
+
]
|
|
3460
|
+
}
|
|
3461
|
+
},
|
|
3462
|
+
"required": [
|
|
3463
|
+
"type"
|
|
3464
|
+
]
|
|
3465
|
+
},
|
|
3466
|
+
"then": {
|
|
3467
|
+
"not": {
|
|
3468
|
+
"anyOf": [
|
|
3469
|
+
{
|
|
3470
|
+
"required": [
|
|
3471
|
+
"status"
|
|
3472
|
+
]
|
|
3473
|
+
},
|
|
3474
|
+
{
|
|
3475
|
+
"required": [
|
|
3476
|
+
"impact"
|
|
3477
|
+
]
|
|
3478
|
+
}
|
|
3479
|
+
]
|
|
3480
|
+
}
|
|
3481
|
+
},
|
|
3482
|
+
"else": {
|
|
3483
|
+
"anyOf": [
|
|
3484
|
+
{
|
|
3485
|
+
"required": [
|
|
3486
|
+
"status"
|
|
3487
|
+
]
|
|
3488
|
+
},
|
|
3489
|
+
{
|
|
3490
|
+
"required": [
|
|
3491
|
+
"impact"
|
|
3492
|
+
]
|
|
3493
|
+
}
|
|
3494
|
+
]
|
|
3495
|
+
}
|
|
3177
3496
|
},
|
|
3178
3497
|
{
|
|
3179
|
-
"
|
|
3180
|
-
"
|
|
3181
|
-
|
|
3498
|
+
"if": {
|
|
3499
|
+
"properties": {
|
|
3500
|
+
"type": {
|
|
3501
|
+
"enum": [
|
|
3502
|
+
"riskAdjustment"
|
|
3503
|
+
]
|
|
3504
|
+
}
|
|
3505
|
+
},
|
|
3506
|
+
"required": [
|
|
3507
|
+
"type"
|
|
3508
|
+
]
|
|
3509
|
+
},
|
|
3510
|
+
"then": {
|
|
3511
|
+
"not": {
|
|
3512
|
+
"required": [
|
|
3513
|
+
"status"
|
|
3514
|
+
]
|
|
3515
|
+
}
|
|
3516
|
+
}
|
|
3182
3517
|
}
|
|
3183
3518
|
],
|
|
3184
3519
|
"properties": {
|
|
3185
3520
|
"externalReferences": {
|
|
3186
3521
|
"type": "array",
|
|
3187
3522
|
"items": {
|
|
3188
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3523
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
3189
3524
|
},
|
|
3190
3525
|
"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."
|
|
3191
3526
|
},
|
|
3192
3527
|
"type": {
|
|
3193
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3528
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
3194
3529
|
"description": "The type of override applied to this requirement."
|
|
3195
3530
|
},
|
|
3196
3531
|
"status": {
|
|
3197
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3198
|
-
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
3532
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
3533
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
3199
3534
|
},
|
|
3200
3535
|
"impact": {
|
|
3201
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3202
|
-
"description": "Override to the requirement's impact score.
|
|
3536
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
|
|
3537
|
+
"description": "Override to the requirement's impact score. For every type except operationalRequirement, at least one of status or impact must be set; an operationalRequirement carries neither."
|
|
3203
3538
|
},
|
|
3204
3539
|
"reason": {
|
|
3205
3540
|
"type": "string",
|
|
3206
3541
|
"description": "Explanation for why this override was applied."
|
|
3207
3542
|
},
|
|
3208
3543
|
"appliedBy": {
|
|
3209
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3544
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3210
3545
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
3211
3546
|
},
|
|
3212
3547
|
"appliedAt": {
|
|
@@ -3220,31 +3555,31 @@
|
|
|
3220
3555
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
3221
3556
|
},
|
|
3222
3557
|
"signature": {
|
|
3223
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3558
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
3224
3559
|
"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."
|
|
3225
3560
|
},
|
|
3226
3561
|
"evidence": {
|
|
3227
3562
|
"type": "array",
|
|
3228
3563
|
"items": {
|
|
3229
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3564
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3230
3565
|
},
|
|
3231
3566
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
3232
3567
|
},
|
|
3233
3568
|
"previousChecksum": {
|
|
3234
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3569
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3235
3570
|
"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."
|
|
3236
3571
|
},
|
|
3237
3572
|
"cvss": {
|
|
3238
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3573
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
3239
3574
|
"$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.",
|
|
3240
3575
|
"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."
|
|
3241
3576
|
},
|
|
3242
3577
|
"justification": {
|
|
3243
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3578
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
|
|
3244
3579
|
"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."
|
|
3245
3580
|
}
|
|
3246
3581
|
},
|
|
3247
|
-
"$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.",
|
|
3582
|
+
"$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. Example 7: operationalRequirement as it sits on the requirement after apply: no status, no impact; the finding stays failed and disposition reports operationalRequirement.",
|
|
3248
3583
|
"examples": [
|
|
3249
3584
|
{
|
|
3250
3585
|
"type": "waiver",
|
|
@@ -3344,9 +3679,19 @@
|
|
|
3344
3679
|
}
|
|
3345
3680
|
}
|
|
3346
3681
|
]
|
|
3682
|
+
},
|
|
3683
|
+
{
|
|
3684
|
+
"type": "operationalRequirement",
|
|
3685
|
+
"reason": "Air-gapped ingest requires USB transfer per operational procedure OP-2026-003. Ports are physically secured, transfers are logged and need two-person integrity.",
|
|
3686
|
+
"appliedBy": {
|
|
3687
|
+
"type": "email",
|
|
3688
|
+
"identifier": "system-owner@agency.gov"
|
|
3689
|
+
},
|
|
3690
|
+
"appliedAt": "2026-01-20T10:00:00Z",
|
|
3691
|
+
"expiresAt": "2099-12-31T00:00:00Z"
|
|
3347
3692
|
}
|
|
3348
3693
|
],
|
|
3349
|
-
"description": "An intentional change to a requirement's compliance status and/or impact score.
|
|
3694
|
+
"description": "An intentional change to a requirement's compliance status and/or impact score, as it sits on the requirement once applied. The same type-conditional rule as Standalone_Override: when type is 'operationalRequirement', neither status nor impact may be set, because the override records an accepted deviation without adjudicating the finding; it still governs disposition, and effectiveStatus stays what the results decided. When type is 'riskAdjustment', status may not be set: it re-rates the risk through impact and never changes pass/fail. For every other type, at least one of status or impact must be set. All overrides must have an expiration date to enforce periodic review.",
|
|
3350
3695
|
"title": "Status Override"
|
|
3351
3696
|
},
|
|
3352
3697
|
"POAM": {
|
|
@@ -3376,7 +3721,7 @@
|
|
|
3376
3721
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
3377
3722
|
},
|
|
3378
3723
|
"appliedBy": {
|
|
3379
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3724
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3380
3725
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
3381
3726
|
},
|
|
3382
3727
|
"appliedAt": {
|
|
@@ -3392,23 +3737,23 @@
|
|
|
3392
3737
|
"milestones": {
|
|
3393
3738
|
"type": "array",
|
|
3394
3739
|
"items": {
|
|
3395
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3740
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
3396
3741
|
},
|
|
3397
3742
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
3398
3743
|
},
|
|
3399
3744
|
"signature": {
|
|
3400
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3745
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
3401
3746
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
3402
3747
|
},
|
|
3403
3748
|
"evidence": {
|
|
3404
3749
|
"type": "array",
|
|
3405
3750
|
"items": {
|
|
3406
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3751
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3407
3752
|
},
|
|
3408
3753
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
3409
3754
|
},
|
|
3410
3755
|
"previousChecksum": {
|
|
3411
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3756
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3412
3757
|
"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."
|
|
3413
3758
|
}
|
|
3414
3759
|
},
|
|
@@ -3551,17 +3896,9 @@
|
|
|
3551
3896
|
"Integrity": {
|
|
3552
3897
|
"type": "object",
|
|
3553
3898
|
"unevaluatedProperties": false,
|
|
3554
|
-
"dependentRequired": {
|
|
3555
|
-
"algorithm": [
|
|
3556
|
-
"checksum"
|
|
3557
|
-
],
|
|
3558
|
-
"checksum": [
|
|
3559
|
-
"algorithm"
|
|
3560
|
-
]
|
|
3561
|
-
},
|
|
3562
3899
|
"properties": {
|
|
3563
3900
|
"algorithm": {
|
|
3564
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3901
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
|
|
3565
3902
|
"description": "The hash algorithm used for the checksum."
|
|
3566
3903
|
},
|
|
3567
3904
|
"checksum": {
|
|
@@ -3590,13 +3927,39 @@
|
|
|
3590
3927
|
}
|
|
3591
3928
|
],
|
|
3592
3929
|
"description": "Cryptographic integrity information for verifying the HDF file has not been tampered with. If algorithm is provided, checksum must also be provided, and vice versa.",
|
|
3593
|
-
"title": "Integrity"
|
|
3930
|
+
"title": "Integrity",
|
|
3931
|
+
"allOf": [
|
|
3932
|
+
{
|
|
3933
|
+
"if": {
|
|
3934
|
+
"required": [
|
|
3935
|
+
"algorithm"
|
|
3936
|
+
]
|
|
3937
|
+
},
|
|
3938
|
+
"then": {
|
|
3939
|
+
"required": [
|
|
3940
|
+
"checksum"
|
|
3941
|
+
]
|
|
3942
|
+
}
|
|
3943
|
+
},
|
|
3944
|
+
{
|
|
3945
|
+
"if": {
|
|
3946
|
+
"required": [
|
|
3947
|
+
"checksum"
|
|
3948
|
+
]
|
|
3949
|
+
},
|
|
3950
|
+
"then": {
|
|
3951
|
+
"required": [
|
|
3952
|
+
"algorithm"
|
|
3953
|
+
]
|
|
3954
|
+
}
|
|
3955
|
+
}
|
|
3956
|
+
]
|
|
3594
3957
|
}
|
|
3595
3958
|
}
|
|
3596
3959
|
},
|
|
3597
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3960
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
|
|
3598
3961
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3599
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3962
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
|
|
3600
3963
|
"title": "HDF Amendment Primitives",
|
|
3601
3964
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
3602
3965
|
"$defs": {
|
|
@@ -3611,7 +3974,7 @@
|
|
|
3611
3974
|
"riskAdjustment",
|
|
3612
3975
|
"operationalRequirement"
|
|
3613
3976
|
],
|
|
3614
|
-
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
3977
|
+
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field; a status on it is rejected by validation.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
3615
3978
|
"title": "Override Type"
|
|
3616
3979
|
},
|
|
3617
3980
|
"Justification": {
|
|
@@ -3651,7 +4014,7 @@
|
|
|
3651
4014
|
},
|
|
3652
4015
|
"Standalone_Override": {
|
|
3653
4016
|
"type": "object",
|
|
3654
|
-
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation
|
|
4017
|
+
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation is gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact' may be set — the override records accepted risk without changing the finding (documentation-only). When type is 'riskAdjustment', 'status' may not be set — it re-rates the risk through 'impact' and never changes the finding's pass/fail; an override that must change status is a waiver or falsePositive. For all other types, at least one of 'status' or 'impact' must be set.\n\nThis rule aligns with:\n- OSCAL Assessment Results — finding.target.status and finding.associated-risk[].facet[] are separate axes (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/)\n- FedRAMP deviation request types — Risk Adjustment changes impact only, Operational Requirement documents acceptance only, False Positive changes status (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/)\n- NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).",
|
|
3655
4018
|
"unevaluatedProperties": false,
|
|
3656
4019
|
"required": [
|
|
3657
4020
|
"type",
|
|
@@ -3661,53 +4024,78 @@
|
|
|
3661
4024
|
"appliedAt",
|
|
3662
4025
|
"expiresAt"
|
|
3663
4026
|
],
|
|
3664
|
-
"
|
|
3665
|
-
|
|
3666
|
-
"
|
|
3667
|
-
"
|
|
3668
|
-
"
|
|
4027
|
+
"allOf": [
|
|
4028
|
+
{
|
|
4029
|
+
"if": {
|
|
4030
|
+
"properties": {
|
|
4031
|
+
"type": {
|
|
4032
|
+
"enum": [
|
|
4033
|
+
"operationalRequirement"
|
|
4034
|
+
]
|
|
4035
|
+
}
|
|
4036
|
+
},
|
|
4037
|
+
"required": [
|
|
4038
|
+
"type"
|
|
4039
|
+
]
|
|
4040
|
+
},
|
|
4041
|
+
"then": {
|
|
4042
|
+
"not": {
|
|
4043
|
+
"anyOf": [
|
|
4044
|
+
{
|
|
4045
|
+
"required": [
|
|
4046
|
+
"status"
|
|
4047
|
+
]
|
|
4048
|
+
},
|
|
4049
|
+
{
|
|
4050
|
+
"required": [
|
|
4051
|
+
"impact"
|
|
4052
|
+
]
|
|
4053
|
+
}
|
|
4054
|
+
]
|
|
4055
|
+
}
|
|
4056
|
+
},
|
|
4057
|
+
"else": {
|
|
4058
|
+
"anyOf": [
|
|
4059
|
+
{
|
|
4060
|
+
"required": [
|
|
4061
|
+
"status"
|
|
4062
|
+
]
|
|
4063
|
+
},
|
|
4064
|
+
{
|
|
4065
|
+
"required": [
|
|
4066
|
+
"impact"
|
|
4067
|
+
]
|
|
4068
|
+
}
|
|
3669
4069
|
]
|
|
3670
4070
|
}
|
|
3671
4071
|
},
|
|
3672
|
-
|
|
3673
|
-
"
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
"required": [
|
|
3681
|
-
"status"
|
|
3682
|
-
]
|
|
4072
|
+
{
|
|
4073
|
+
"if": {
|
|
4074
|
+
"properties": {
|
|
4075
|
+
"type": {
|
|
4076
|
+
"enum": [
|
|
4077
|
+
"riskAdjustment"
|
|
4078
|
+
]
|
|
4079
|
+
}
|
|
3683
4080
|
},
|
|
3684
|
-
{
|
|
3685
|
-
"required": [
|
|
3686
|
-
"impact"
|
|
3687
|
-
]
|
|
3688
|
-
}
|
|
3689
|
-
]
|
|
3690
|
-
}
|
|
3691
|
-
},
|
|
3692
|
-
"else": {
|
|
3693
|
-
"anyOf": [
|
|
3694
|
-
{
|
|
3695
4081
|
"required": [
|
|
3696
|
-
"
|
|
4082
|
+
"type"
|
|
3697
4083
|
]
|
|
3698
4084
|
},
|
|
3699
|
-
{
|
|
3700
|
-
"
|
|
3701
|
-
"
|
|
3702
|
-
|
|
4085
|
+
"then": {
|
|
4086
|
+
"not": {
|
|
4087
|
+
"required": [
|
|
4088
|
+
"status"
|
|
4089
|
+
]
|
|
4090
|
+
}
|
|
3703
4091
|
}
|
|
3704
|
-
|
|
3705
|
-
|
|
4092
|
+
}
|
|
4093
|
+
],
|
|
3706
4094
|
"properties": {
|
|
3707
4095
|
"externalReferences": {
|
|
3708
4096
|
"type": "array",
|
|
3709
4097
|
"items": {
|
|
3710
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4098
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
3711
4099
|
},
|
|
3712
4100
|
"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."
|
|
3713
4101
|
},
|
|
@@ -3718,15 +4106,15 @@
|
|
|
3718
4106
|
"requirementId": {
|
|
3719
4107
|
"type": "string",
|
|
3720
4108
|
"minLength": 1,
|
|
3721
|
-
"description": "The
|
|
4109
|
+
"description": "The id of the requirement being amended. An id names the requirement, not one finding, so the override applies to every requirement entry carrying that id in the baseline(s) it targets."
|
|
3722
4110
|
},
|
|
3723
4111
|
"baselineRef": {
|
|
3724
4112
|
"type": "string",
|
|
3725
4113
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
3726
4114
|
},
|
|
3727
4115
|
"status": {
|
|
3728
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3729
|
-
"description": "The new status this
|
|
4116
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
4117
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
3730
4118
|
},
|
|
3731
4119
|
"impact": {
|
|
3732
4120
|
"$ref": "#/$defs/Impact_Override",
|
|
@@ -3737,7 +4125,7 @@
|
|
|
3737
4125
|
"description": "Justification for this amendment."
|
|
3738
4126
|
},
|
|
3739
4127
|
"appliedBy": {
|
|
3740
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4128
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3741
4129
|
"description": "Identity of who applied this amendment."
|
|
3742
4130
|
},
|
|
3743
4131
|
"appliedAt": {
|
|
@@ -3753,20 +4141,20 @@
|
|
|
3753
4141
|
"evidence": {
|
|
3754
4142
|
"type": "array",
|
|
3755
4143
|
"items": {
|
|
3756
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4144
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3757
4145
|
},
|
|
3758
4146
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
3759
4147
|
},
|
|
3760
4148
|
"signature": {
|
|
3761
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4149
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
3762
4150
|
"description": "Digital signature for non-repudiation."
|
|
3763
4151
|
},
|
|
3764
4152
|
"previousChecksum": {
|
|
3765
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4153
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3766
4154
|
"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."
|
|
3767
4155
|
},
|
|
3768
4156
|
"cvss": {
|
|
3769
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4157
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
3770
4158
|
"$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.",
|
|
3771
4159
|
"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."
|
|
3772
4160
|
},
|
|
@@ -3777,7 +4165,7 @@
|
|
|
3777
4165
|
"milestones": {
|
|
3778
4166
|
"type": "array",
|
|
3779
4167
|
"items": {
|
|
3780
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4168
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
3781
4169
|
},
|
|
3782
4170
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
3783
4171
|
},
|
|
@@ -3794,7 +4182,7 @@
|
|
|
3794
4182
|
"affectedPackages": {
|
|
3795
4183
|
"type": "array",
|
|
3796
4184
|
"items": {
|
|
3797
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4185
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
3798
4186
|
},
|
|
3799
4187
|
"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)."
|
|
3800
4188
|
}
|
|
@@ -3927,9 +4315,9 @@
|
|
|
3927
4315
|
}
|
|
3928
4316
|
}
|
|
3929
4317
|
},
|
|
3930
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
4318
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
|
|
3931
4319
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3932
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
4320
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
|
|
3933
4321
|
"title": "HDF Result Primitives",
|
|
3934
4322
|
"description": "Types for representing assessment results and statuses.",
|
|
3935
4323
|
"$defs": {
|
|
@@ -3994,6 +4382,10 @@
|
|
|
3994
4382
|
"type": "string"
|
|
3995
4383
|
},
|
|
3996
4384
|
"description": "The stacktrace/backtrace of the exception if one occurred."
|
|
4385
|
+
},
|
|
4386
|
+
"rawSourceRecord": {
|
|
4387
|
+
"$ref": "#/$defs/Raw_Source_Record",
|
|
4388
|
+
"description": "The source tool's own record for this result, carrying every field the record had. Complete, not necessarily byte-exact: see Raw_Source_Record.content for the producer and consumer obligations, and extensions.rawSourceArtifacts[] when byte-exact carriage is required."
|
|
3997
4389
|
}
|
|
3998
4390
|
},
|
|
3999
4391
|
"examples": [
|
|
@@ -4024,6 +4416,60 @@
|
|
|
4024
4416
|
"description": "A test within a requirement and its results and findings such as how long it took to run.",
|
|
4025
4417
|
"title": "Requirement Result"
|
|
4026
4418
|
},
|
|
4419
|
+
"Raw_Source_Record": {
|
|
4420
|
+
"type": "object",
|
|
4421
|
+
"additionalProperties": false,
|
|
4422
|
+
"required": [
|
|
4423
|
+
"content",
|
|
4424
|
+
"encoding",
|
|
4425
|
+
"mediaType"
|
|
4426
|
+
],
|
|
4427
|
+
"properties": {
|
|
4428
|
+
"content": {
|
|
4429
|
+
"type": "string",
|
|
4430
|
+
"description": "The source tool's own record for this result, carrying every field the record had.\n\nCOMPLETE, NOT NECESSARILY BYTE-EXACT. A producer SHOULD write the record's bytes unchanged where it can. A producer that cannot — notably one implemented in two languages whose JSON serializers disagree on key order, HTML escaping and number rendering, and which therefore MUST canonicalize to stay byte-identical with its twin — MAY write a canonically serialized form instead. Such a form preserves every field and value but not the original key order, insignificant whitespace, or duplicate keys. A consumer MUST therefore compare records by parsing them, not by comparing bytes, and MUST NOT checksum this field and expect the result to match a checksum of the input.\n\nFor carriage that IS byte-exact, use `extensions.rawSourceArtifacts[]`, which forbids a parsed `document` precisely so the bytes and their checksum survive; `pointer` ties this record to its position within that artifact."
|
|
4431
|
+
},
|
|
4432
|
+
"encoding": {
|
|
4433
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference_Encoding",
|
|
4434
|
+
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
4435
|
+
},
|
|
4436
|
+
"mediaType": {
|
|
4437
|
+
"type": "string",
|
|
4438
|
+
"description": "The record's IANA media type — the type of this record, which for a fragment of a larger artifact may be narrower than the artifact's own. Example: 'application/json' for one match object out of a JSON report."
|
|
4439
|
+
},
|
|
4440
|
+
"pointer": {
|
|
4441
|
+
"type": "string",
|
|
4442
|
+
"description": "Where this record sits inside the artifact it came from, as a JSON Pointer (RFC 6901) for JSON sources or an XPath for XML ones. Example: '/matches/3'.\n\nOptional, and the link that makes carriage verifiable rather than merely present: with it a consumer can confirm the record really is the subtree of `extensions.rawSourceArtifacts[]` it claims to be. Omit it when the source's shape gives a record no addressable location."
|
|
4443
|
+
}
|
|
4444
|
+
},
|
|
4445
|
+
"description": "The source tool's own record for this result — the one entry in the converter's input that produced it, complete though not necessarily byte-for-byte (see `content`).\n\nSCOPED TO THE RESULT DELIBERATELY. For a vulnerability scanner the native record is one (vulnerability, package) pair, which is exactly one result: a CVE reported against two packages yields two entries whose records differ only in the package they matched. Held on the requirement instead, those two records would collide, and merging entries that share an id would have to discard one — so the result is not merely an available home but the correct one.\n\nDistinct from `extensions.rawSourceArtifacts[]`, which carries whole input artifacts: this carries the one record inside one of them, and `pointer` ties the two together. A consumer that wants the whole input reads the artifact; one that wants provenance for a single finding reads this.\n\nDistinct from `code`, which means the code that ran to evaluate the requirement — an InSpec control's source, or a check reference. A serialized finding is not code, and putting one there overloaded a field whose meaning came from InSpec.\n\nCLOSED, and deliberately not a passthrough bag: three required members and an optional pointer are the whole of it. Producer data that HDF does not model belongs in `extensions.passthrough`, which is document-scoped and permissive by design; this field is neither.\n\nClosed with `additionalProperties` rather than the house `unevaluatedProperties` because this definition composes nothing, and the shipped Go validator is a draft-07 engine that does not implement `unevaluatedProperties` — a closure only one of the two validators enforces is not a closure.",
|
|
4446
|
+
"$comment": "Examples, in order: 1) one grype match — the shape that moves out of `code` — located in the carried artifact by pointer; 2) an XCCDF rule-result, where the record is XML although the document embedding it is JSON, so mediaType is per record and not per document; 3) a record whose bytes are not text, carried as base64; 4) the minimum: a record whose source shape gives it no addressable location, so pointer is omitted.",
|
|
4447
|
+
"examples": [
|
|
4448
|
+
{
|
|
4449
|
+
"content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
|
|
4450
|
+
"encoding": "utf-8",
|
|
4451
|
+
"mediaType": "application/json",
|
|
4452
|
+
"pointer": "/matches/3"
|
|
4453
|
+
},
|
|
4454
|
+
{
|
|
4455
|
+
"content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
|
|
4456
|
+
"encoding": "utf-8",
|
|
4457
|
+
"mediaType": "application/xml",
|
|
4458
|
+
"pointer": "/Benchmark/TestResult/rule-result[4]"
|
|
4459
|
+
},
|
|
4460
|
+
{
|
|
4461
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
|
|
4462
|
+
"encoding": "base64",
|
|
4463
|
+
"mediaType": "application/octet-stream"
|
|
4464
|
+
},
|
|
4465
|
+
{
|
|
4466
|
+
"content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
|
|
4467
|
+
"encoding": "utf-8",
|
|
4468
|
+
"mediaType": "text/csv"
|
|
4469
|
+
}
|
|
4470
|
+
],
|
|
4471
|
+
"title": "Raw Source Record"
|
|
4472
|
+
},
|
|
4027
4473
|
"Requirement_Description": {
|
|
4028
4474
|
"type": "object",
|
|
4029
4475
|
"unevaluatedProperties": false,
|
|
@@ -4060,9 +4506,9 @@
|
|
|
4060
4506
|
}
|
|
4061
4507
|
}
|
|
4062
4508
|
},
|
|
4063
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4509
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
|
|
4064
4510
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4065
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4511
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
|
|
4066
4512
|
"title": "HDF CVSS Primitives",
|
|
4067
4513
|
"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).",
|
|
4068
4514
|
"$defs": {
|
|
@@ -4259,9 +4705,9 @@
|
|
|
4259
4705
|
}
|
|
4260
4706
|
}
|
|
4261
4707
|
},
|
|
4262
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4708
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
|
|
4263
4709
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4264
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4710
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
|
|
4265
4711
|
"title": "HDF Affected Package Primitives",
|
|
4266
4712
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
4267
4713
|
"$defs": {
|
|
@@ -4369,9 +4815,9 @@
|
|
|
4369
4815
|
}
|
|
4370
4816
|
}
|
|
4371
4817
|
},
|
|
4372
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
4818
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0": {
|
|
4373
4819
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4374
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
4820
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0",
|
|
4375
4821
|
"title": "HDF Runner Primitive",
|
|
4376
4822
|
"description": "Information about the test execution environment where the security tool/scanner was executed.",
|
|
4377
4823
|
"$defs": {
|
|
@@ -4415,7 +4861,7 @@
|
|
|
4415
4861
|
"description": "The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'. Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier."
|
|
4416
4862
|
},
|
|
4417
4863
|
"operator": {
|
|
4418
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4864
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
4419
4865
|
"description": "The identity of the person or system responsible for executing the test. This could be a human auditor manually completing a checklist, an automated CI/CD system, or a security tool. Optional field to support both automated and manual HDF generation."
|
|
4420
4866
|
}
|
|
4421
4867
|
},
|
|
@@ -4464,9 +4910,9 @@
|
|
|
4464
4910
|
}
|
|
4465
4911
|
}
|
|
4466
4912
|
},
|
|
4467
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
4913
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0": {
|
|
4468
4914
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4469
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
4915
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0",
|
|
4470
4916
|
"title": "HDF Change Event Primitives",
|
|
4471
4917
|
"description": "Shared building blocks for HDF change-event wire documents. The envelope is entity-agnostic: hdf-requirement-change-event composes it today, and any future sibling event type (e.g. component change events — hdf-comparison already models componentDiffs alongside requirementDiffs) reuses it verbatim.",
|
|
4472
4918
|
"$defs": {
|
|
@@ -4520,7 +4966,7 @@
|
|
|
4520
4966
|
"priorChecksum": {
|
|
4521
4967
|
"oneOf": [
|
|
4522
4968
|
{
|
|
4523
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4969
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
4524
4970
|
},
|
|
4525
4971
|
{
|
|
4526
4972
|
"type": "null"
|
|
@@ -4538,7 +4984,7 @@
|
|
|
4538
4984
|
"systemRef": "apptier.hdf-system.json",
|
|
4539
4985
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
4540
4986
|
"timestamp": "2026-07-22T14:03:11Z",
|
|
4541
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
4987
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
4542
4988
|
"priorChecksum": {
|
|
4543
4989
|
"algorithm": "sha256",
|
|
4544
4990
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -4592,7 +5038,7 @@
|
|
|
4592
5038
|
],
|
|
4593
5039
|
"properties": {
|
|
4594
5040
|
"effectiveStatus": {
|
|
4595
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
5041
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
4596
5042
|
"description": "The resolved effective compliance status at this point in the chain."
|
|
4597
5043
|
},
|
|
4598
5044
|
"effectiveImpact": {
|
|
@@ -4641,7 +5087,7 @@
|
|
|
4641
5087
|
"description": "URI to the seed snapshot document (relative path or absolute URL)."
|
|
4642
5088
|
},
|
|
4643
5089
|
"checksum": {
|
|
4644
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5090
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4645
5091
|
"description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
|
|
4646
5092
|
}
|
|
4647
5093
|
},
|
|
@@ -4690,9 +5136,9 @@
|
|
|
4690
5136
|
}
|
|
4691
5137
|
}
|
|
4692
5138
|
},
|
|
4693
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
5139
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0": {
|
|
4694
5140
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4695
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
5141
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0",
|
|
4696
5142
|
"title": "HDF Parameter Primitives",
|
|
4697
5143
|
"description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
|
|
4698
5144
|
"$defs": {
|
|
@@ -4744,7 +5190,8 @@
|
|
|
4744
5190
|
},
|
|
4745
5191
|
"allowedValues": {
|
|
4746
5192
|
"type": "array",
|
|
4747
|
-
"
|
|
5193
|
+
"items": true,
|
|
5194
|
+
"description": "Enumeration of permitted values. Each entry may be any JSON value, the same freedom Input.value has: an Array or Hash input enumerates container values, so no element type is imposed."
|
|
4748
5195
|
}
|
|
4749
5196
|
},
|
|
4750
5197
|
"description": "Validation constraints for an input value.",
|
|
@@ -4823,9 +5270,9 @@
|
|
|
4823
5270
|
}
|
|
4824
5271
|
}
|
|
4825
5272
|
},
|
|
4826
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
5273
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0": {
|
|
4827
5274
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4828
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
5275
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0",
|
|
4829
5276
|
"title": "HDF EPSS Primitive",
|
|
4830
5277
|
"description": "Type for representing FIRST.org's Exploit Prediction Scoring System (EPSS) data for a vulnerability. EPSS estimates the probability that a CVE will be exploited in the wild in the next 30 days. See https://www.first.org/epss/ for the underlying model and methodology.",
|
|
4831
5278
|
"$defs": {
|
|
@@ -4880,9 +5327,9 @@
|
|
|
4880
5327
|
}
|
|
4881
5328
|
}
|
|
4882
5329
|
},
|
|
4883
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
5330
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0": {
|
|
4884
5331
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4885
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
5332
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0",
|
|
4886
5333
|
"title": "HDF Kev Primitives",
|
|
4887
5334
|
"description": "Types for representing CISA Known Exploited Vulnerabilities (KEV) catalog membership. The KEV catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog) flags CVEs that are confirmed actively exploited in the wild and drives federal patching urgency under CISA Binding Operational Directive 22-01.",
|
|
4888
5335
|
"$defs": {
|