@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,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-comparison/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-comparison/v3.8.0",
|
|
4
4
|
"type": "object",
|
|
5
|
+
"$comment": "Examples, in order: 1) a temporal comparison of two runs of the same scan, showing one fixed, one regressed and one new requirement. Produced by `hdf diff` over hdf-diff/test/fixtures/scan-before.json and scan-after.json with whole requirements dropped from the inputs, so `summary` is computed by the engine and matches the diffs it reports. The engine also writes a `baseline` key on each diff that this definition does not declare; it is omitted here, so regenerating this example needs that key stripped until the schema and the engine agree.",
|
|
5
6
|
"unevaluatedProperties": false,
|
|
6
7
|
"required": [
|
|
7
8
|
"formatVersion",
|
|
@@ -14,7 +15,7 @@
|
|
|
14
15
|
"externalReferences": {
|
|
15
16
|
"type": "array",
|
|
16
17
|
"items": {
|
|
17
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
18
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
18
19
|
},
|
|
19
20
|
"description": "Optional references to external artifacts relevant to this comparison (CTI/STIX, advisories, or any URI-addressable artifact). Inert context; see External_Reference."
|
|
20
21
|
},
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"description": "Schema version for this comparison format."
|
|
25
26
|
},
|
|
26
27
|
"comparisonMode": {
|
|
27
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
28
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Comparison_Mode",
|
|
28
29
|
"description": "The mode of comparison being performed."
|
|
29
30
|
},
|
|
30
31
|
"timestamp": {
|
|
@@ -33,50 +34,50 @@
|
|
|
33
34
|
"description": "When this comparison was performed."
|
|
34
35
|
},
|
|
35
36
|
"generator": {
|
|
36
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
37
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
37
38
|
"description": "Information about the tool that generated this comparison."
|
|
38
39
|
},
|
|
39
40
|
"sources": {
|
|
40
41
|
"type": "array",
|
|
41
42
|
"minItems": 2,
|
|
42
43
|
"items": {
|
|
43
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
44
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Source"
|
|
44
45
|
},
|
|
45
46
|
"description": "The source documents being compared. At least two sources are required."
|
|
46
47
|
},
|
|
47
48
|
"matching": {
|
|
48
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
49
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Matching_Config",
|
|
49
50
|
"description": "Configuration for how requirements were matched across sources."
|
|
50
51
|
},
|
|
51
52
|
"summary": {
|
|
52
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
53
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Comparison_Summary",
|
|
53
54
|
"description": "Summary statistics for the overall comparison."
|
|
54
55
|
},
|
|
55
56
|
"baselineDiffs": {
|
|
56
57
|
"type": "array",
|
|
57
58
|
"items": {
|
|
58
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
59
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Baseline_Diff"
|
|
59
60
|
},
|
|
60
61
|
"description": "Comparison of baselines between sources."
|
|
61
62
|
},
|
|
62
63
|
"requirementDiffs": {
|
|
63
64
|
"type": "array",
|
|
64
65
|
"items": {
|
|
65
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
66
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Requirement_Diff"
|
|
66
67
|
},
|
|
67
68
|
"description": "Detailed comparison of individual requirements between sources."
|
|
68
69
|
},
|
|
69
70
|
"componentDiffs": {
|
|
70
71
|
"type": "array",
|
|
71
72
|
"items": {
|
|
72
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
73
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Component_Diff"
|
|
73
74
|
},
|
|
74
75
|
"description": "Comparison of components between two system documents. Used in systemDrift mode. A component's BOM changes surface as a field change on its boms[] here."
|
|
75
76
|
},
|
|
76
77
|
"packageDiffs": {
|
|
77
78
|
"type": "array",
|
|
78
79
|
"items": {
|
|
79
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
80
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Package_Diff"
|
|
80
81
|
},
|
|
81
82
|
"description": "RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a component's BOM changes as a field change on its boms[] (see componentDiffs), and standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This field is retained for a future normalized package-level diff; consumers must not expect it from today's systemDrift output."
|
|
82
83
|
},
|
|
@@ -88,40 +89,283 @@
|
|
|
88
89
|
"drift": {
|
|
89
90
|
"type": "array",
|
|
90
91
|
"items": {
|
|
91
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
92
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Requirement_Diff"
|
|
92
93
|
},
|
|
93
94
|
"description": "External/metadata changes separate from status changes (Terraform pattern)."
|
|
94
95
|
},
|
|
95
96
|
"annotations": {
|
|
96
97
|
"type": "object",
|
|
97
98
|
"additionalProperties": {
|
|
98
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
99
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0#/$defs/Annotation"
|
|
99
100
|
},
|
|
100
101
|
"description": "Map of annotation IDs to annotation objects, providing context or action items for requirement diffs."
|
|
101
102
|
},
|
|
102
103
|
"integrity": {
|
|
103
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
104
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
104
105
|
"description": "Cryptographic integrity information for verifying this comparison document."
|
|
105
106
|
},
|
|
106
107
|
"extensions": {
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"description": "Reserved for tool-specific data not defined in the HDF standard."
|
|
108
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
109
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) this comparison was derived from."
|
|
110
110
|
}
|
|
111
111
|
},
|
|
112
|
+
"examples": [
|
|
113
|
+
{
|
|
114
|
+
"formatVersion": "1.0.0",
|
|
115
|
+
"comparisonMode": "temporal",
|
|
116
|
+
"sources": [
|
|
117
|
+
{
|
|
118
|
+
"role": "old",
|
|
119
|
+
"label": "trim-before.json"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"role": "new",
|
|
123
|
+
"label": "trim-after.json"
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"summary": {
|
|
127
|
+
"fixed": 1,
|
|
128
|
+
"regressed": 1,
|
|
129
|
+
"new": 1,
|
|
130
|
+
"absent": 0,
|
|
131
|
+
"unchanged": 0,
|
|
132
|
+
"updated": 0,
|
|
133
|
+
"total": 3,
|
|
134
|
+
"matchedCount": 2,
|
|
135
|
+
"unmatchedOldCount": 0,
|
|
136
|
+
"unmatchedNewCount": 1
|
|
137
|
+
},
|
|
138
|
+
"requirementDiffs": [
|
|
139
|
+
{
|
|
140
|
+
"id": "SV-001",
|
|
141
|
+
"state": "fixed",
|
|
142
|
+
"changeReasons": [
|
|
143
|
+
"resultChanged"
|
|
144
|
+
],
|
|
145
|
+
"before": {
|
|
146
|
+
"descriptions": [
|
|
147
|
+
{
|
|
148
|
+
"data": "The system must disable root SSH login",
|
|
149
|
+
"label": "default"
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"id": "SV-001",
|
|
153
|
+
"impact": 0.7,
|
|
154
|
+
"results": [
|
|
155
|
+
{
|
|
156
|
+
"codeDesc": "SSH config PermitRootLogin should eq 'no'",
|
|
157
|
+
"message": "expected 'yes' to eq 'no'",
|
|
158
|
+
"runTime": 0.1,
|
|
159
|
+
"startTime": "2024-01-01T00:00:00Z",
|
|
160
|
+
"status": "failed"
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"sourceLocation": {
|
|
164
|
+
"line": 1,
|
|
165
|
+
"ref": "controls/stig.rb"
|
|
166
|
+
},
|
|
167
|
+
"tags": {
|
|
168
|
+
"cci": [
|
|
169
|
+
"CCI-000366"
|
|
170
|
+
],
|
|
171
|
+
"nist": [
|
|
172
|
+
"AC-6"
|
|
173
|
+
],
|
|
174
|
+
"severity": "high"
|
|
175
|
+
},
|
|
176
|
+
"title": "Ensure SSH root login is disabled"
|
|
177
|
+
},
|
|
178
|
+
"after": {
|
|
179
|
+
"descriptions": [
|
|
180
|
+
{
|
|
181
|
+
"data": "The system must disable root SSH login",
|
|
182
|
+
"label": "default"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"id": "SV-001",
|
|
186
|
+
"impact": 0.7,
|
|
187
|
+
"results": [
|
|
188
|
+
{
|
|
189
|
+
"codeDesc": "SSH config PermitRootLogin should eq 'no'",
|
|
190
|
+
"runTime": 0.1,
|
|
191
|
+
"startTime": "2024-02-01T00:00:00Z",
|
|
192
|
+
"status": "passed"
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
"sourceLocation": {
|
|
196
|
+
"line": 1,
|
|
197
|
+
"ref": "controls/stig.rb"
|
|
198
|
+
},
|
|
199
|
+
"tags": {
|
|
200
|
+
"cci": [
|
|
201
|
+
"CCI-000366"
|
|
202
|
+
],
|
|
203
|
+
"nist": [
|
|
204
|
+
"AC-6"
|
|
205
|
+
],
|
|
206
|
+
"severity": "high"
|
|
207
|
+
},
|
|
208
|
+
"title": "Ensure SSH root login is disabled"
|
|
209
|
+
},
|
|
210
|
+
"fieldChanges": [],
|
|
211
|
+
"oldEffectiveStatus": "failed",
|
|
212
|
+
"newEffectiveStatus": "passed",
|
|
213
|
+
"title": "Ensure SSH root login is disabled"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"id": "SV-003",
|
|
217
|
+
"state": "regressed",
|
|
218
|
+
"changeReasons": [
|
|
219
|
+
"resultChanged"
|
|
220
|
+
],
|
|
221
|
+
"before": {
|
|
222
|
+
"descriptions": [
|
|
223
|
+
{
|
|
224
|
+
"data": "The audit subsystem must be active",
|
|
225
|
+
"label": "default"
|
|
226
|
+
}
|
|
227
|
+
],
|
|
228
|
+
"id": "SV-003",
|
|
229
|
+
"impact": 0.7,
|
|
230
|
+
"results": [
|
|
231
|
+
{
|
|
232
|
+
"codeDesc": "auditd service should be enabled",
|
|
233
|
+
"runTime": 0.08,
|
|
234
|
+
"startTime": "2024-01-01T00:00:02Z",
|
|
235
|
+
"status": "passed"
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"sourceLocation": {
|
|
239
|
+
"line": 40,
|
|
240
|
+
"ref": "controls/stig.rb"
|
|
241
|
+
},
|
|
242
|
+
"tags": {
|
|
243
|
+
"cci": [
|
|
244
|
+
"CCI-000130"
|
|
245
|
+
],
|
|
246
|
+
"nist": [
|
|
247
|
+
"AU-3"
|
|
248
|
+
],
|
|
249
|
+
"severity": "high"
|
|
250
|
+
},
|
|
251
|
+
"title": "Ensure audit logging is enabled"
|
|
252
|
+
},
|
|
253
|
+
"after": {
|
|
254
|
+
"descriptions": [
|
|
255
|
+
{
|
|
256
|
+
"data": "The audit subsystem must be active",
|
|
257
|
+
"label": "default"
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
"id": "SV-003",
|
|
261
|
+
"impact": 0.7,
|
|
262
|
+
"results": [
|
|
263
|
+
{
|
|
264
|
+
"codeDesc": "auditd service should be enabled",
|
|
265
|
+
"message": "expected service to be enabled, got disabled",
|
|
266
|
+
"runTime": 0.07,
|
|
267
|
+
"startTime": "2024-02-01T00:00:02Z",
|
|
268
|
+
"status": "failed"
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"sourceLocation": {
|
|
272
|
+
"line": 40,
|
|
273
|
+
"ref": "controls/stig.rb"
|
|
274
|
+
},
|
|
275
|
+
"tags": {
|
|
276
|
+
"cci": [
|
|
277
|
+
"CCI-000130"
|
|
278
|
+
],
|
|
279
|
+
"nist": [
|
|
280
|
+
"AU-3"
|
|
281
|
+
],
|
|
282
|
+
"severity": "high"
|
|
283
|
+
},
|
|
284
|
+
"title": "Ensure audit logging is enabled"
|
|
285
|
+
},
|
|
286
|
+
"fieldChanges": [],
|
|
287
|
+
"oldEffectiveStatus": "passed",
|
|
288
|
+
"newEffectiveStatus": "failed",
|
|
289
|
+
"title": "Ensure audit logging is enabled"
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"id": "SV-006",
|
|
293
|
+
"state": "new",
|
|
294
|
+
"changeReasons": [],
|
|
295
|
+
"before": null,
|
|
296
|
+
"after": {
|
|
297
|
+
"descriptions": [
|
|
298
|
+
{
|
|
299
|
+
"data": "SELinux must be in enforcing mode",
|
|
300
|
+
"label": "default"
|
|
301
|
+
}
|
|
302
|
+
],
|
|
303
|
+
"id": "SV-006",
|
|
304
|
+
"impact": 0.7,
|
|
305
|
+
"results": [
|
|
306
|
+
{
|
|
307
|
+
"codeDesc": "getenforce should return Enforcing",
|
|
308
|
+
"runTime": 0.01,
|
|
309
|
+
"startTime": "2024-02-01T00:00:05Z",
|
|
310
|
+
"status": "passed"
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"sourceLocation": {
|
|
314
|
+
"line": 100,
|
|
315
|
+
"ref": "controls/stig.rb"
|
|
316
|
+
},
|
|
317
|
+
"tags": {
|
|
318
|
+
"cci": [
|
|
319
|
+
"CCI-002165"
|
|
320
|
+
],
|
|
321
|
+
"nist": [
|
|
322
|
+
"AC-3 (4)"
|
|
323
|
+
],
|
|
324
|
+
"severity": "high"
|
|
325
|
+
},
|
|
326
|
+
"title": "Ensure SELinux is enforcing"
|
|
327
|
+
},
|
|
328
|
+
"fieldChanges": [],
|
|
329
|
+
"newEffectiveStatus": "passed",
|
|
330
|
+
"title": "Ensure SELinux is enforcing"
|
|
331
|
+
}
|
|
332
|
+
],
|
|
333
|
+
"baselineDiffs": [
|
|
334
|
+
{
|
|
335
|
+
"name": "rhel9-stig-baseline",
|
|
336
|
+
"oldVersion": "1.0.0",
|
|
337
|
+
"newVersion": "1.1.0",
|
|
338
|
+
"state": "updated"
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
],
|
|
112
343
|
"description": "Structured comparison between two or more HDF security assessment documents. Supports temporal, baseline, fleet, and multi-source comparison modes.",
|
|
113
344
|
"title": "HDF Comparison",
|
|
114
345
|
"$defs": {
|
|
115
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
346
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
|
|
116
347
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
117
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
348
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
|
|
118
349
|
"title": "HDF Common Primitives",
|
|
119
350
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
120
351
|
"$defs": {
|
|
352
|
+
"External_Reference_Encoding": {
|
|
353
|
+
"type": "string",
|
|
354
|
+
"enum": [
|
|
355
|
+
"utf-8",
|
|
356
|
+
"base64"
|
|
357
|
+
],
|
|
358
|
+
"description": "How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not valid UTF-8 text.",
|
|
359
|
+
"title": "External Reference Encoding",
|
|
360
|
+
"examples": [
|
|
361
|
+
"base64"
|
|
362
|
+
],
|
|
363
|
+
"$comment": "Examples, in order: 1) a binary artifact, embedded base64-encoded."
|
|
364
|
+
},
|
|
121
365
|
"External_Reference": {
|
|
122
366
|
"type": "object",
|
|
123
367
|
"title": "External Reference",
|
|
124
|
-
"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.",
|
|
368
|
+
"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.",
|
|
125
369
|
"required": [
|
|
126
370
|
"sourceName"
|
|
127
371
|
],
|
|
@@ -140,6 +384,42 @@
|
|
|
140
384
|
"required": [
|
|
141
385
|
"description"
|
|
142
386
|
]
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"required": [
|
|
390
|
+
"content"
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"required": [
|
|
395
|
+
"document"
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
],
|
|
399
|
+
"allOf": [
|
|
400
|
+
{
|
|
401
|
+
"if": {
|
|
402
|
+
"required": [
|
|
403
|
+
"content"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
"then": {
|
|
407
|
+
"required": [
|
|
408
|
+
"encoding"
|
|
409
|
+
]
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"if": {
|
|
414
|
+
"required": [
|
|
415
|
+
"encoding"
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
"then": {
|
|
419
|
+
"required": [
|
|
420
|
+
"content"
|
|
421
|
+
]
|
|
422
|
+
}
|
|
143
423
|
}
|
|
144
424
|
],
|
|
145
425
|
"properties": {
|
|
@@ -155,7 +435,7 @@
|
|
|
155
435
|
"href": {
|
|
156
436
|
"type": "string",
|
|
157
437
|
"format": "uri-reference",
|
|
158
|
-
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs.
|
|
438
|
+
"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."
|
|
159
439
|
},
|
|
160
440
|
"description": {
|
|
161
441
|
"type": "string",
|
|
@@ -167,11 +447,11 @@
|
|
|
167
447
|
},
|
|
168
448
|
"mediaType": {
|
|
169
449
|
"type": "string",
|
|
170
|
-
"description": "IANA media type of the
|
|
450
|
+
"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`."
|
|
171
451
|
},
|
|
172
452
|
"checksum": {
|
|
173
453
|
"$ref": "#/$defs/Checksum",
|
|
174
|
-
"description": "Integrity hash of the
|
|
454
|
+
"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."
|
|
175
455
|
},
|
|
176
456
|
"addedBy": {
|
|
177
457
|
"$ref": "#/$defs/Identity",
|
|
@@ -190,11 +470,19 @@
|
|
|
190
470
|
"document": {
|
|
191
471
|
"type": "object",
|
|
192
472
|
"additionalProperties": true,
|
|
193
|
-
"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)."
|
|
473
|
+
"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)."
|
|
474
|
+
},
|
|
475
|
+
"content": {
|
|
476
|
+
"type": "string",
|
|
477
|
+
"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."
|
|
478
|
+
},
|
|
479
|
+
"encoding": {
|
|
480
|
+
"$ref": "#/$defs/External_Reference_Encoding",
|
|
481
|
+
"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."
|
|
194
482
|
}
|
|
195
483
|
},
|
|
196
484
|
"unevaluatedProperties": false,
|
|
197
|
-
"$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.",
|
|
485
|
+
"$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.",
|
|
198
486
|
"examples": [
|
|
199
487
|
{
|
|
200
488
|
"sourceName": "cve",
|
|
@@ -240,6 +528,28 @@
|
|
|
240
528
|
}
|
|
241
529
|
]
|
|
242
530
|
}
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"sourceName": "openscap",
|
|
534
|
+
"rel": "raw-source",
|
|
535
|
+
"mediaType": "application/xml",
|
|
536
|
+
"encoding": "utf-8",
|
|
537
|
+
"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>",
|
|
538
|
+
"checksum": {
|
|
539
|
+
"algorithm": "sha256",
|
|
540
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"sourceName": "fortify",
|
|
545
|
+
"rel": "raw-source",
|
|
546
|
+
"mediaType": "application/zip",
|
|
547
|
+
"encoding": "base64",
|
|
548
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
549
|
+
"checksum": {
|
|
550
|
+
"algorithm": "sha256",
|
|
551
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
552
|
+
}
|
|
243
553
|
}
|
|
244
554
|
]
|
|
245
555
|
},
|
|
@@ -251,7 +561,7 @@
|
|
|
251
561
|
"sha512",
|
|
252
562
|
"blake3"
|
|
253
563
|
],
|
|
254
|
-
"description": "
|
|
564
|
+
"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.",
|
|
255
565
|
"title": "Hash Algorithm"
|
|
256
566
|
},
|
|
257
567
|
"Requirement_Group": {
|
|
@@ -409,7 +719,33 @@
|
|
|
409
719
|
}
|
|
410
720
|
],
|
|
411
721
|
"description": "A reference to an external document.",
|
|
412
|
-
"title": "Reference"
|
|
722
|
+
"title": "Reference",
|
|
723
|
+
"unevaluatedProperties": false,
|
|
724
|
+
"$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.",
|
|
725
|
+
"examples": [
|
|
726
|
+
{
|
|
727
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"ref": "NIST SP 800-53 Rev 5, AC-6"
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
"ref": "CIS Benchmark for RHEL 9, 1.1.1",
|
|
734
|
+
"url": "https://www.cisecurity.org/benchmark/red_hat_linux"
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
"ref": [
|
|
738
|
+
{
|
|
739
|
+
"identifier": "2921",
|
|
740
|
+
"publisher": "DISA",
|
|
741
|
+
"type": "DPMS Target"
|
|
742
|
+
}
|
|
743
|
+
]
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
"uri": "https://attack.mitre.org/techniques/T1059/"
|
|
747
|
+
}
|
|
748
|
+
]
|
|
413
749
|
},
|
|
414
750
|
"Source_Location": {
|
|
415
751
|
"type": "object",
|
|
@@ -927,6 +1263,10 @@
|
|
|
927
1263
|
"type": "string",
|
|
928
1264
|
"description": "The title - should be human readable."
|
|
929
1265
|
},
|
|
1266
|
+
"description": {
|
|
1267
|
+
"type": "string",
|
|
1268
|
+
"description": "Prose description of the baseline, more detailed than summary. Carried verbatim, like every HDF prose field."
|
|
1269
|
+
},
|
|
930
1270
|
"maintainer": {
|
|
931
1271
|
"type": "string",
|
|
932
1272
|
"description": "The maintainer(s)."
|
|
@@ -1005,7 +1345,7 @@
|
|
|
1005
1345
|
},
|
|
1006
1346
|
"id": {
|
|
1007
1347
|
"type": "string",
|
|
1008
|
-
"description": "The requirement identifier. Example: 'SV-238196'."
|
|
1348
|
+
"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."
|
|
1009
1349
|
},
|
|
1010
1350
|
"title": {
|
|
1011
1351
|
"type": "string",
|
|
@@ -1223,9 +1563,9 @@
|
|
|
1223
1563
|
}
|
|
1224
1564
|
}
|
|
1225
1565
|
},
|
|
1226
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
1566
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0": {
|
|
1227
1567
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1228
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.
|
|
1568
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/comparison/v3.8.0",
|
|
1229
1569
|
"title": "HDF Comparison Primitives",
|
|
1230
1570
|
"description": "Types for representing structured comparisons between HDF security assessment documents.",
|
|
1231
1571
|
"$defs": {
|
|
@@ -1397,7 +1737,7 @@
|
|
|
1397
1737
|
"description": "The original format of the source document before conversion to HDF."
|
|
1398
1738
|
},
|
|
1399
1739
|
"checksum": {
|
|
1400
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1740
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
1401
1741
|
"description": "Cryptographic checksum of the source document for integrity verification."
|
|
1402
1742
|
},
|
|
1403
1743
|
"assessmentTimestamp": {
|
|
@@ -1406,13 +1746,13 @@
|
|
|
1406
1746
|
"description": "When the source assessment was performed. ISO 8601 format."
|
|
1407
1747
|
},
|
|
1408
1748
|
"tool": {
|
|
1409
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
1749
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
|
|
1410
1750
|
"description": "The security tool that produced the assessment data in this source."
|
|
1411
1751
|
},
|
|
1412
1752
|
"components": {
|
|
1413
1753
|
"type": "array",
|
|
1414
1754
|
"items": {
|
|
1415
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1755
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
1416
1756
|
},
|
|
1417
1757
|
"description": "The components assessed in this source."
|
|
1418
1758
|
},
|
|
@@ -1614,7 +1954,7 @@
|
|
|
1614
1954
|
"total": {
|
|
1615
1955
|
"type": "integer",
|
|
1616
1956
|
"minimum": 0,
|
|
1617
|
-
"description": "Total number of
|
|
1957
|
+
"description": "Total number of distinct requirement ids across all sources; an id carried by several entries counts once."
|
|
1618
1958
|
},
|
|
1619
1959
|
"matchedCount": {
|
|
1620
1960
|
"type": "integer",
|
|
@@ -1699,6 +2039,21 @@
|
|
|
1699
2039
|
"description": "Summary statistics for the overall comparison.",
|
|
1700
2040
|
"title": "Comparison Summary"
|
|
1701
2041
|
},
|
|
2042
|
+
"Baseline_Diff_State": {
|
|
2043
|
+
"type": "string",
|
|
2044
|
+
"enum": [
|
|
2045
|
+
"new",
|
|
2046
|
+
"absent",
|
|
2047
|
+
"unchanged",
|
|
2048
|
+
"updated"
|
|
2049
|
+
],
|
|
2050
|
+
"description": "How a baseline or component fared across the compared documents: new (only in the newer), absent (only in the older), unchanged, or updated (present in both with a changed version).",
|
|
2051
|
+
"title": "Baseline Diff State",
|
|
2052
|
+
"examples": [
|
|
2053
|
+
"updated"
|
|
2054
|
+
],
|
|
2055
|
+
"$comment": "Examples, in order: 1) a baseline present in both documents whose version moved."
|
|
2056
|
+
},
|
|
1702
2057
|
"Baseline_Diff": {
|
|
1703
2058
|
"type": "object",
|
|
1704
2059
|
"unevaluatedProperties": false,
|
|
@@ -1712,14 +2067,7 @@
|
|
|
1712
2067
|
"description": "Name of the baseline being compared."
|
|
1713
2068
|
},
|
|
1714
2069
|
"state": {
|
|
1715
|
-
"
|
|
1716
|
-
"title": "Baseline Diff State",
|
|
1717
|
-
"enum": [
|
|
1718
|
-
"new",
|
|
1719
|
-
"absent",
|
|
1720
|
-
"unchanged",
|
|
1721
|
-
"updated"
|
|
1722
|
-
],
|
|
2070
|
+
"$ref": "#/$defs/Baseline_Diff_State",
|
|
1723
2071
|
"description": "The state of this baseline in the comparison."
|
|
1724
2072
|
},
|
|
1725
2073
|
"oldVersion": {
|
|
@@ -1751,20 +2099,13 @@
|
|
|
1751
2099
|
"description": "Component name used for matching across system versions."
|
|
1752
2100
|
},
|
|
1753
2101
|
"state": {
|
|
1754
|
-
"
|
|
1755
|
-
"title": "Baseline Diff State",
|
|
1756
|
-
"enum": [
|
|
1757
|
-
"new",
|
|
1758
|
-
"absent",
|
|
1759
|
-
"unchanged",
|
|
1760
|
-
"updated"
|
|
1761
|
-
],
|
|
2102
|
+
"$ref": "#/$defs/Baseline_Diff_State",
|
|
1762
2103
|
"description": "The state of this component in the comparison."
|
|
1763
2104
|
},
|
|
1764
2105
|
"before": {
|
|
1765
2106
|
"oneOf": [
|
|
1766
2107
|
{
|
|
1767
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
2108
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
1768
2109
|
},
|
|
1769
2110
|
{
|
|
1770
2111
|
"type": "null"
|
|
@@ -1775,7 +2116,7 @@
|
|
|
1775
2116
|
"after": {
|
|
1776
2117
|
"oneOf": [
|
|
1777
2118
|
{
|
|
1778
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
2119
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
1779
2120
|
},
|
|
1780
2121
|
{
|
|
1781
2122
|
"type": "null"
|
|
@@ -1980,7 +2321,7 @@
|
|
|
1980
2321
|
"before": {
|
|
1981
2322
|
"oneOf": [
|
|
1982
2323
|
{
|
|
1983
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
2324
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
|
|
1984
2325
|
},
|
|
1985
2326
|
{
|
|
1986
2327
|
"type": "null"
|
|
@@ -1991,7 +2332,7 @@
|
|
|
1991
2332
|
"after": {
|
|
1992
2333
|
"oneOf": [
|
|
1993
2334
|
{
|
|
1994
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
2335
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0#/$defs/Evaluated_Requirement"
|
|
1995
2336
|
},
|
|
1996
2337
|
{
|
|
1997
2338
|
"type": "null"
|
|
@@ -2018,6 +2359,10 @@
|
|
|
2018
2359
|
"type": "string",
|
|
2019
2360
|
"description": "The requirement title for human readability."
|
|
2020
2361
|
},
|
|
2362
|
+
"baseline": {
|
|
2363
|
+
"type": "string",
|
|
2364
|
+
"description": "Name of the baseline the requirement belongs to, so a consumer can group diffs the way hdf diff --group-by baseline does. '(multiple)' when the id appears in more than one baseline of the same document."
|
|
2365
|
+
},
|
|
2021
2366
|
"oldEffectiveStatus": {
|
|
2022
2367
|
"type": "string",
|
|
2023
2368
|
"description": "The effective status of the requirement in the old source."
|
|
@@ -2083,16 +2428,259 @@
|
|
|
2083
2428
|
}
|
|
2084
2429
|
},
|
|
2085
2430
|
"description": "A comparison of a single requirement between sources, including state, changes, and full before/after snapshots.",
|
|
2086
|
-
"title": "Requirement Diff"
|
|
2431
|
+
"title": "Requirement Diff",
|
|
2432
|
+
"examples": [
|
|
2433
|
+
{
|
|
2434
|
+
"id": "SV-257777",
|
|
2435
|
+
"baseline": "rhel9-stig-baseline",
|
|
2436
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
2437
|
+
"state": "fixed",
|
|
2438
|
+
"changeReasons": [
|
|
2439
|
+
"resultChanged"
|
|
2440
|
+
],
|
|
2441
|
+
"before": {
|
|
2442
|
+
"id": "SV-257777",
|
|
2443
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
2444
|
+
"impact": 0.5,
|
|
2445
|
+
"tags": {
|
|
2446
|
+
"nist": [
|
|
2447
|
+
"CM-7"
|
|
2448
|
+
]
|
|
2449
|
+
},
|
|
2450
|
+
"sourceLocation": {},
|
|
2451
|
+
"descriptions": [
|
|
2452
|
+
{
|
|
2453
|
+
"label": "default",
|
|
2454
|
+
"data": "USB mass storage must be disabled unless an operational need is documented."
|
|
2455
|
+
}
|
|
2456
|
+
],
|
|
2457
|
+
"results": [
|
|
2458
|
+
{
|
|
2459
|
+
"status": "failed",
|
|
2460
|
+
"codeDesc": "Kernel module usb-storage is loadable",
|
|
2461
|
+
"startTime": "2026-03-01T10:00:00Z"
|
|
2462
|
+
}
|
|
2463
|
+
]
|
|
2464
|
+
},
|
|
2465
|
+
"after": {
|
|
2466
|
+
"id": "SV-257777",
|
|
2467
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
2468
|
+
"impact": 0.5,
|
|
2469
|
+
"tags": {
|
|
2470
|
+
"nist": [
|
|
2471
|
+
"CM-7"
|
|
2472
|
+
]
|
|
2473
|
+
},
|
|
2474
|
+
"sourceLocation": {},
|
|
2475
|
+
"descriptions": [
|
|
2476
|
+
{
|
|
2477
|
+
"label": "default",
|
|
2478
|
+
"data": "USB mass storage must be disabled unless an operational need is documented."
|
|
2479
|
+
}
|
|
2480
|
+
],
|
|
2481
|
+
"results": [
|
|
2482
|
+
{
|
|
2483
|
+
"status": "passed",
|
|
2484
|
+
"codeDesc": "Kernel module usb-storage is blacklisted",
|
|
2485
|
+
"startTime": "2026-03-30T10:00:00Z"
|
|
2486
|
+
}
|
|
2487
|
+
]
|
|
2488
|
+
},
|
|
2489
|
+
"oldEffectiveStatus": "failed",
|
|
2490
|
+
"newEffectiveStatus": "passed",
|
|
2491
|
+
"fieldChanges": [
|
|
2492
|
+
{
|
|
2493
|
+
"op": "replace",
|
|
2494
|
+
"path": "/results/0/status",
|
|
2495
|
+
"oldValue": "failed",
|
|
2496
|
+
"newValue": "passed"
|
|
2497
|
+
}
|
|
2498
|
+
],
|
|
2499
|
+
"matchStrategy": "exactId",
|
|
2500
|
+
"matchConfidence": 1
|
|
2501
|
+
}
|
|
2502
|
+
],
|
|
2503
|
+
"$comment": "Examples, in order: 1) a requirement fixed between two scans of the same baseline, carrying the owning baseline name and the exact-id match that paired it."
|
|
2087
2504
|
}
|
|
2088
2505
|
}
|
|
2089
2506
|
},
|
|
2090
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2507
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
|
|
2091
2508
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2092
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2509
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
|
|
2093
2510
|
"title": "HDF Extension Primitives",
|
|
2094
|
-
"description": "Extension types for waivers, attestations, generators, and
|
|
2511
|
+
"description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
|
|
2095
2512
|
"$defs": {
|
|
2513
|
+
"Raw_Source_Artifact": {
|
|
2514
|
+
"allOf": [
|
|
2515
|
+
{
|
|
2516
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2517
|
+
},
|
|
2518
|
+
{
|
|
2519
|
+
"not": {
|
|
2520
|
+
"required": [
|
|
2521
|
+
"document"
|
|
2522
|
+
]
|
|
2523
|
+
}
|
|
2524
|
+
},
|
|
2525
|
+
{
|
|
2526
|
+
"if": {
|
|
2527
|
+
"required": [
|
|
2528
|
+
"content"
|
|
2529
|
+
]
|
|
2530
|
+
},
|
|
2531
|
+
"then": {
|
|
2532
|
+
"required": [
|
|
2533
|
+
"encoding",
|
|
2534
|
+
"mediaType"
|
|
2535
|
+
]
|
|
2536
|
+
}
|
|
2537
|
+
}
|
|
2538
|
+
],
|
|
2539
|
+
"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`.",
|
|
2540
|
+
"$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.",
|
|
2541
|
+
"examples": [
|
|
2542
|
+
{
|
|
2543
|
+
"sourceName": "grype",
|
|
2544
|
+
"rel": "raw-source",
|
|
2545
|
+
"mediaType": "application/json",
|
|
2546
|
+
"encoding": "utf-8",
|
|
2547
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
2548
|
+
"checksum": {
|
|
2549
|
+
"algorithm": "sha256",
|
|
2550
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
2551
|
+
}
|
|
2552
|
+
},
|
|
2553
|
+
{
|
|
2554
|
+
"sourceName": "openscap",
|
|
2555
|
+
"rel": "raw-source",
|
|
2556
|
+
"mediaType": "application/xml",
|
|
2557
|
+
"encoding": "utf-8",
|
|
2558
|
+
"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>",
|
|
2559
|
+
"checksum": {
|
|
2560
|
+
"algorithm": "sha256",
|
|
2561
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
2562
|
+
}
|
|
2563
|
+
},
|
|
2564
|
+
{
|
|
2565
|
+
"sourceName": "prisma",
|
|
2566
|
+
"rel": "raw-source",
|
|
2567
|
+
"mediaType": "text/csv",
|
|
2568
|
+
"encoding": "utf-8",
|
|
2569
|
+
"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",
|
|
2570
|
+
"checksum": {
|
|
2571
|
+
"algorithm": "sha256",
|
|
2572
|
+
"value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
|
|
2573
|
+
}
|
|
2574
|
+
},
|
|
2575
|
+
{
|
|
2576
|
+
"sourceName": "fortify",
|
|
2577
|
+
"rel": "raw-source",
|
|
2578
|
+
"mediaType": "application/zip",
|
|
2579
|
+
"encoding": "base64",
|
|
2580
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
2581
|
+
"checksum": {
|
|
2582
|
+
"algorithm": "sha256",
|
|
2583
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
2584
|
+
}
|
|
2585
|
+
},
|
|
2586
|
+
{
|
|
2587
|
+
"sourceName": "nessus",
|
|
2588
|
+
"rel": "raw-source",
|
|
2589
|
+
"href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
|
|
2590
|
+
"mediaType": "application/xml",
|
|
2591
|
+
"checksum": {
|
|
2592
|
+
"algorithm": "sha256",
|
|
2593
|
+
"value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
|
|
2594
|
+
}
|
|
2595
|
+
}
|
|
2596
|
+
]
|
|
2597
|
+
},
|
|
2598
|
+
"Extensions": {
|
|
2599
|
+
"type": "object",
|
|
2600
|
+
"additionalProperties": false,
|
|
2601
|
+
"properties": {
|
|
2602
|
+
"passthrough": {
|
|
2603
|
+
"type": "object",
|
|
2604
|
+
"additionalProperties": true,
|
|
2605
|
+
"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.",
|
|
2606
|
+
"examples": [
|
|
2607
|
+
{
|
|
2608
|
+
"auxiliary_data": [
|
|
2609
|
+
{
|
|
2610
|
+
"name": "Scoutsuite",
|
|
2611
|
+
"data": {
|
|
2612
|
+
"last_run": {
|
|
2613
|
+
"ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
|
|
2614
|
+
}
|
|
2615
|
+
}
|
|
2616
|
+
}
|
|
2617
|
+
]
|
|
2618
|
+
},
|
|
2619
|
+
{
|
|
2620
|
+
"audit": {
|
|
2621
|
+
"runId": "r-123"
|
|
2622
|
+
}
|
|
2623
|
+
}
|
|
2624
|
+
],
|
|
2625
|
+
"$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."
|
|
2626
|
+
},
|
|
2627
|
+
"rawSourceArtifacts": {
|
|
2628
|
+
"type": "array",
|
|
2629
|
+
"items": {
|
|
2630
|
+
"$ref": "#/$defs/Raw_Source_Artifact"
|
|
2631
|
+
},
|
|
2632
|
+
"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."
|
|
2633
|
+
}
|
|
2634
|
+
},
|
|
2635
|
+
"title": "Extensions",
|
|
2636
|
+
"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.",
|
|
2637
|
+
"$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.",
|
|
2638
|
+
"examples": [
|
|
2639
|
+
{
|
|
2640
|
+
"passthrough": {
|
|
2641
|
+
"auxiliary_data": [
|
|
2642
|
+
{
|
|
2643
|
+
"name": "Grype",
|
|
2644
|
+
"data": {
|
|
2645
|
+
"descriptor": {
|
|
2646
|
+
"name": "grype",
|
|
2647
|
+
"version": "0.74.0"
|
|
2648
|
+
}
|
|
2649
|
+
}
|
|
2650
|
+
}
|
|
2651
|
+
]
|
|
2652
|
+
},
|
|
2653
|
+
"rawSourceArtifacts": [
|
|
2654
|
+
{
|
|
2655
|
+
"sourceName": "grype",
|
|
2656
|
+
"rel": "raw-source",
|
|
2657
|
+
"mediaType": "application/json",
|
|
2658
|
+
"encoding": "utf-8",
|
|
2659
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
2660
|
+
"checksum": {
|
|
2661
|
+
"algorithm": "sha256",
|
|
2662
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
2663
|
+
}
|
|
2664
|
+
}
|
|
2665
|
+
]
|
|
2666
|
+
},
|
|
2667
|
+
{
|
|
2668
|
+
"rawSourceArtifacts": [
|
|
2669
|
+
{
|
|
2670
|
+
"sourceName": "fortify",
|
|
2671
|
+
"rel": "raw-source",
|
|
2672
|
+
"mediaType": "application/zip",
|
|
2673
|
+
"encoding": "base64",
|
|
2674
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
2675
|
+
"checksum": {
|
|
2676
|
+
"algorithm": "sha256",
|
|
2677
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
]
|
|
2681
|
+
}
|
|
2682
|
+
]
|
|
2683
|
+
},
|
|
2096
2684
|
"Status_Override": {
|
|
2097
2685
|
"type": "object",
|
|
2098
2686
|
"unevaluatedProperties": false,
|
|
@@ -2103,44 +2691,99 @@
|
|
|
2103
2691
|
"appliedAt",
|
|
2104
2692
|
"expiresAt"
|
|
2105
2693
|
],
|
|
2106
|
-
"
|
|
2694
|
+
"allOf": [
|
|
2107
2695
|
{
|
|
2108
|
-
"
|
|
2109
|
-
"
|
|
2110
|
-
|
|
2696
|
+
"if": {
|
|
2697
|
+
"properties": {
|
|
2698
|
+
"type": {
|
|
2699
|
+
"enum": [
|
|
2700
|
+
"operationalRequirement"
|
|
2701
|
+
]
|
|
2702
|
+
}
|
|
2703
|
+
},
|
|
2704
|
+
"required": [
|
|
2705
|
+
"type"
|
|
2706
|
+
]
|
|
2707
|
+
},
|
|
2708
|
+
"then": {
|
|
2709
|
+
"not": {
|
|
2710
|
+
"anyOf": [
|
|
2711
|
+
{
|
|
2712
|
+
"required": [
|
|
2713
|
+
"status"
|
|
2714
|
+
]
|
|
2715
|
+
},
|
|
2716
|
+
{
|
|
2717
|
+
"required": [
|
|
2718
|
+
"impact"
|
|
2719
|
+
]
|
|
2720
|
+
}
|
|
2721
|
+
]
|
|
2722
|
+
}
|
|
2723
|
+
},
|
|
2724
|
+
"else": {
|
|
2725
|
+
"anyOf": [
|
|
2726
|
+
{
|
|
2727
|
+
"required": [
|
|
2728
|
+
"status"
|
|
2729
|
+
]
|
|
2730
|
+
},
|
|
2731
|
+
{
|
|
2732
|
+
"required": [
|
|
2733
|
+
"impact"
|
|
2734
|
+
]
|
|
2735
|
+
}
|
|
2736
|
+
]
|
|
2737
|
+
}
|
|
2111
2738
|
},
|
|
2112
2739
|
{
|
|
2113
|
-
"
|
|
2114
|
-
"
|
|
2115
|
-
|
|
2740
|
+
"if": {
|
|
2741
|
+
"properties": {
|
|
2742
|
+
"type": {
|
|
2743
|
+
"enum": [
|
|
2744
|
+
"riskAdjustment"
|
|
2745
|
+
]
|
|
2746
|
+
}
|
|
2747
|
+
},
|
|
2748
|
+
"required": [
|
|
2749
|
+
"type"
|
|
2750
|
+
]
|
|
2751
|
+
},
|
|
2752
|
+
"then": {
|
|
2753
|
+
"not": {
|
|
2754
|
+
"required": [
|
|
2755
|
+
"status"
|
|
2756
|
+
]
|
|
2757
|
+
}
|
|
2758
|
+
}
|
|
2116
2759
|
}
|
|
2117
2760
|
],
|
|
2118
2761
|
"properties": {
|
|
2119
2762
|
"externalReferences": {
|
|
2120
2763
|
"type": "array",
|
|
2121
2764
|
"items": {
|
|
2122
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2765
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2123
2766
|
},
|
|
2124
2767
|
"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."
|
|
2125
2768
|
},
|
|
2126
2769
|
"type": {
|
|
2127
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2770
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
2128
2771
|
"description": "The type of override applied to this requirement."
|
|
2129
2772
|
},
|
|
2130
2773
|
"status": {
|
|
2131
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2132
|
-
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
2774
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
2775
|
+
"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."
|
|
2133
2776
|
},
|
|
2134
2777
|
"impact": {
|
|
2135
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2136
|
-
"description": "Override to the requirement's impact score.
|
|
2778
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
|
|
2779
|
+
"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."
|
|
2137
2780
|
},
|
|
2138
2781
|
"reason": {
|
|
2139
2782
|
"type": "string",
|
|
2140
2783
|
"description": "Explanation for why this override was applied."
|
|
2141
2784
|
},
|
|
2142
2785
|
"appliedBy": {
|
|
2143
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2786
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2144
2787
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
2145
2788
|
},
|
|
2146
2789
|
"appliedAt": {
|
|
@@ -2154,31 +2797,31 @@
|
|
|
2154
2797
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
2155
2798
|
},
|
|
2156
2799
|
"signature": {
|
|
2157
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2800
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2158
2801
|
"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."
|
|
2159
2802
|
},
|
|
2160
2803
|
"evidence": {
|
|
2161
2804
|
"type": "array",
|
|
2162
2805
|
"items": {
|
|
2163
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2806
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2164
2807
|
},
|
|
2165
2808
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
2166
2809
|
},
|
|
2167
2810
|
"previousChecksum": {
|
|
2168
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2811
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2169
2812
|
"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."
|
|
2170
2813
|
},
|
|
2171
2814
|
"cvss": {
|
|
2172
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
2815
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
2173
2816
|
"$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.",
|
|
2174
2817
|
"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."
|
|
2175
2818
|
},
|
|
2176
2819
|
"justification": {
|
|
2177
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2820
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
|
|
2178
2821
|
"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."
|
|
2179
2822
|
}
|
|
2180
2823
|
},
|
|
2181
|
-
"$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.",
|
|
2824
|
+
"$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.",
|
|
2182
2825
|
"examples": [
|
|
2183
2826
|
{
|
|
2184
2827
|
"type": "waiver",
|
|
@@ -2278,9 +2921,19 @@
|
|
|
2278
2921
|
}
|
|
2279
2922
|
}
|
|
2280
2923
|
]
|
|
2924
|
+
},
|
|
2925
|
+
{
|
|
2926
|
+
"type": "operationalRequirement",
|
|
2927
|
+
"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.",
|
|
2928
|
+
"appliedBy": {
|
|
2929
|
+
"type": "email",
|
|
2930
|
+
"identifier": "system-owner@agency.gov"
|
|
2931
|
+
},
|
|
2932
|
+
"appliedAt": "2026-01-20T10:00:00Z",
|
|
2933
|
+
"expiresAt": "2099-12-31T00:00:00Z"
|
|
2281
2934
|
}
|
|
2282
2935
|
],
|
|
2283
|
-
"description": "An intentional change to a requirement's compliance status and/or impact score.
|
|
2936
|
+
"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.",
|
|
2284
2937
|
"title": "Status Override"
|
|
2285
2938
|
},
|
|
2286
2939
|
"POAM": {
|
|
@@ -2310,7 +2963,7 @@
|
|
|
2310
2963
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
2311
2964
|
},
|
|
2312
2965
|
"appliedBy": {
|
|
2313
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2966
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2314
2967
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
2315
2968
|
},
|
|
2316
2969
|
"appliedAt": {
|
|
@@ -2326,23 +2979,23 @@
|
|
|
2326
2979
|
"milestones": {
|
|
2327
2980
|
"type": "array",
|
|
2328
2981
|
"items": {
|
|
2329
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2982
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
2330
2983
|
},
|
|
2331
2984
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
2332
2985
|
},
|
|
2333
2986
|
"signature": {
|
|
2334
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2987
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2335
2988
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
2336
2989
|
},
|
|
2337
2990
|
"evidence": {
|
|
2338
2991
|
"type": "array",
|
|
2339
2992
|
"items": {
|
|
2340
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2993
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2341
2994
|
},
|
|
2342
2995
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
2343
2996
|
},
|
|
2344
2997
|
"previousChecksum": {
|
|
2345
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2998
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2346
2999
|
"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."
|
|
2347
3000
|
}
|
|
2348
3001
|
},
|
|
@@ -2485,17 +3138,9 @@
|
|
|
2485
3138
|
"Integrity": {
|
|
2486
3139
|
"type": "object",
|
|
2487
3140
|
"unevaluatedProperties": false,
|
|
2488
|
-
"dependentRequired": {
|
|
2489
|
-
"algorithm": [
|
|
2490
|
-
"checksum"
|
|
2491
|
-
],
|
|
2492
|
-
"checksum": [
|
|
2493
|
-
"algorithm"
|
|
2494
|
-
]
|
|
2495
|
-
},
|
|
2496
3141
|
"properties": {
|
|
2497
3142
|
"algorithm": {
|
|
2498
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3143
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
|
|
2499
3144
|
"description": "The hash algorithm used for the checksum."
|
|
2500
3145
|
},
|
|
2501
3146
|
"checksum": {
|
|
@@ -2524,13 +3169,39 @@
|
|
|
2524
3169
|
}
|
|
2525
3170
|
],
|
|
2526
3171
|
"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.",
|
|
2527
|
-
"title": "Integrity"
|
|
3172
|
+
"title": "Integrity",
|
|
3173
|
+
"allOf": [
|
|
3174
|
+
{
|
|
3175
|
+
"if": {
|
|
3176
|
+
"required": [
|
|
3177
|
+
"algorithm"
|
|
3178
|
+
]
|
|
3179
|
+
},
|
|
3180
|
+
"then": {
|
|
3181
|
+
"required": [
|
|
3182
|
+
"checksum"
|
|
3183
|
+
]
|
|
3184
|
+
}
|
|
3185
|
+
},
|
|
3186
|
+
{
|
|
3187
|
+
"if": {
|
|
3188
|
+
"required": [
|
|
3189
|
+
"checksum"
|
|
3190
|
+
]
|
|
3191
|
+
},
|
|
3192
|
+
"then": {
|
|
3193
|
+
"required": [
|
|
3194
|
+
"algorithm"
|
|
3195
|
+
]
|
|
3196
|
+
}
|
|
3197
|
+
}
|
|
3198
|
+
]
|
|
2528
3199
|
}
|
|
2529
3200
|
}
|
|
2530
3201
|
},
|
|
2531
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3202
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
|
|
2532
3203
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2533
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3204
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
|
|
2534
3205
|
"title": "HDF Amendment Primitives",
|
|
2535
3206
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
2536
3207
|
"$defs": {
|
|
@@ -2545,7 +3216,7 @@
|
|
|
2545
3216
|
"riskAdjustment",
|
|
2546
3217
|
"operationalRequirement"
|
|
2547
3218
|
],
|
|
2548
|
-
"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.",
|
|
3219
|
+
"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.",
|
|
2549
3220
|
"title": "Override Type"
|
|
2550
3221
|
},
|
|
2551
3222
|
"Justification": {
|
|
@@ -2585,7 +3256,7 @@
|
|
|
2585
3256
|
},
|
|
2586
3257
|
"Standalone_Override": {
|
|
2587
3258
|
"type": "object",
|
|
2588
|
-
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation
|
|
3259
|
+
"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).",
|
|
2589
3260
|
"unevaluatedProperties": false,
|
|
2590
3261
|
"required": [
|
|
2591
3262
|
"type",
|
|
@@ -2595,53 +3266,78 @@
|
|
|
2595
3266
|
"appliedAt",
|
|
2596
3267
|
"expiresAt"
|
|
2597
3268
|
],
|
|
2598
|
-
"
|
|
2599
|
-
|
|
2600
|
-
"
|
|
2601
|
-
"
|
|
2602
|
-
"
|
|
3269
|
+
"allOf": [
|
|
3270
|
+
{
|
|
3271
|
+
"if": {
|
|
3272
|
+
"properties": {
|
|
3273
|
+
"type": {
|
|
3274
|
+
"enum": [
|
|
3275
|
+
"operationalRequirement"
|
|
3276
|
+
]
|
|
3277
|
+
}
|
|
3278
|
+
},
|
|
3279
|
+
"required": [
|
|
3280
|
+
"type"
|
|
3281
|
+
]
|
|
3282
|
+
},
|
|
3283
|
+
"then": {
|
|
3284
|
+
"not": {
|
|
3285
|
+
"anyOf": [
|
|
3286
|
+
{
|
|
3287
|
+
"required": [
|
|
3288
|
+
"status"
|
|
3289
|
+
]
|
|
3290
|
+
},
|
|
3291
|
+
{
|
|
3292
|
+
"required": [
|
|
3293
|
+
"impact"
|
|
3294
|
+
]
|
|
3295
|
+
}
|
|
3296
|
+
]
|
|
3297
|
+
}
|
|
3298
|
+
},
|
|
3299
|
+
"else": {
|
|
3300
|
+
"anyOf": [
|
|
3301
|
+
{
|
|
3302
|
+
"required": [
|
|
3303
|
+
"status"
|
|
3304
|
+
]
|
|
3305
|
+
},
|
|
3306
|
+
{
|
|
3307
|
+
"required": [
|
|
3308
|
+
"impact"
|
|
3309
|
+
]
|
|
3310
|
+
}
|
|
2603
3311
|
]
|
|
2604
3312
|
}
|
|
2605
3313
|
},
|
|
2606
|
-
|
|
2607
|
-
"
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
"required": [
|
|
2615
|
-
"status"
|
|
2616
|
-
]
|
|
3314
|
+
{
|
|
3315
|
+
"if": {
|
|
3316
|
+
"properties": {
|
|
3317
|
+
"type": {
|
|
3318
|
+
"enum": [
|
|
3319
|
+
"riskAdjustment"
|
|
3320
|
+
]
|
|
3321
|
+
}
|
|
2617
3322
|
},
|
|
2618
|
-
{
|
|
2619
|
-
"required": [
|
|
2620
|
-
"impact"
|
|
2621
|
-
]
|
|
2622
|
-
}
|
|
2623
|
-
]
|
|
2624
|
-
}
|
|
2625
|
-
},
|
|
2626
|
-
"else": {
|
|
2627
|
-
"anyOf": [
|
|
2628
|
-
{
|
|
2629
3323
|
"required": [
|
|
2630
|
-
"
|
|
3324
|
+
"type"
|
|
2631
3325
|
]
|
|
2632
3326
|
},
|
|
2633
|
-
{
|
|
2634
|
-
"
|
|
2635
|
-
"
|
|
2636
|
-
|
|
3327
|
+
"then": {
|
|
3328
|
+
"not": {
|
|
3329
|
+
"required": [
|
|
3330
|
+
"status"
|
|
3331
|
+
]
|
|
3332
|
+
}
|
|
2637
3333
|
}
|
|
2638
|
-
|
|
2639
|
-
|
|
3334
|
+
}
|
|
3335
|
+
],
|
|
2640
3336
|
"properties": {
|
|
2641
3337
|
"externalReferences": {
|
|
2642
3338
|
"type": "array",
|
|
2643
3339
|
"items": {
|
|
2644
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3340
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2645
3341
|
},
|
|
2646
3342
|
"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."
|
|
2647
3343
|
},
|
|
@@ -2652,15 +3348,15 @@
|
|
|
2652
3348
|
"requirementId": {
|
|
2653
3349
|
"type": "string",
|
|
2654
3350
|
"minLength": 1,
|
|
2655
|
-
"description": "The
|
|
3351
|
+
"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."
|
|
2656
3352
|
},
|
|
2657
3353
|
"baselineRef": {
|
|
2658
3354
|
"type": "string",
|
|
2659
3355
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
2660
3356
|
},
|
|
2661
3357
|
"status": {
|
|
2662
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2663
|
-
"description": "The new status this
|
|
3358
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
3359
|
+
"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."
|
|
2664
3360
|
},
|
|
2665
3361
|
"impact": {
|
|
2666
3362
|
"$ref": "#/$defs/Impact_Override",
|
|
@@ -2671,7 +3367,7 @@
|
|
|
2671
3367
|
"description": "Justification for this amendment."
|
|
2672
3368
|
},
|
|
2673
3369
|
"appliedBy": {
|
|
2674
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3370
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2675
3371
|
"description": "Identity of who applied this amendment."
|
|
2676
3372
|
},
|
|
2677
3373
|
"appliedAt": {
|
|
@@ -2687,20 +3383,20 @@
|
|
|
2687
3383
|
"evidence": {
|
|
2688
3384
|
"type": "array",
|
|
2689
3385
|
"items": {
|
|
2690
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3386
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2691
3387
|
},
|
|
2692
3388
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
2693
3389
|
},
|
|
2694
3390
|
"signature": {
|
|
2695
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3391
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2696
3392
|
"description": "Digital signature for non-repudiation."
|
|
2697
3393
|
},
|
|
2698
3394
|
"previousChecksum": {
|
|
2699
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3395
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2700
3396
|
"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."
|
|
2701
3397
|
},
|
|
2702
3398
|
"cvss": {
|
|
2703
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3399
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
2704
3400
|
"$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.",
|
|
2705
3401
|
"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."
|
|
2706
3402
|
},
|
|
@@ -2711,7 +3407,7 @@
|
|
|
2711
3407
|
"milestones": {
|
|
2712
3408
|
"type": "array",
|
|
2713
3409
|
"items": {
|
|
2714
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3410
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
2715
3411
|
},
|
|
2716
3412
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
2717
3413
|
},
|
|
@@ -2728,7 +3424,7 @@
|
|
|
2728
3424
|
"affectedPackages": {
|
|
2729
3425
|
"type": "array",
|
|
2730
3426
|
"items": {
|
|
2731
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3427
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
2732
3428
|
},
|
|
2733
3429
|
"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)."
|
|
2734
3430
|
}
|
|
@@ -2861,9 +3557,9 @@
|
|
|
2861
3557
|
}
|
|
2862
3558
|
}
|
|
2863
3559
|
},
|
|
2864
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3560
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
|
|
2865
3561
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2866
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3562
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
|
|
2867
3563
|
"title": "HDF Result Primitives",
|
|
2868
3564
|
"description": "Types for representing assessment results and statuses.",
|
|
2869
3565
|
"$defs": {
|
|
@@ -2928,6 +3624,10 @@
|
|
|
2928
3624
|
"type": "string"
|
|
2929
3625
|
},
|
|
2930
3626
|
"description": "The stacktrace/backtrace of the exception if one occurred."
|
|
3627
|
+
},
|
|
3628
|
+
"rawSourceRecord": {
|
|
3629
|
+
"$ref": "#/$defs/Raw_Source_Record",
|
|
3630
|
+
"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."
|
|
2931
3631
|
}
|
|
2932
3632
|
},
|
|
2933
3633
|
"examples": [
|
|
@@ -2958,6 +3658,60 @@
|
|
|
2958
3658
|
"description": "A test within a requirement and its results and findings such as how long it took to run.",
|
|
2959
3659
|
"title": "Requirement Result"
|
|
2960
3660
|
},
|
|
3661
|
+
"Raw_Source_Record": {
|
|
3662
|
+
"type": "object",
|
|
3663
|
+
"additionalProperties": false,
|
|
3664
|
+
"required": [
|
|
3665
|
+
"content",
|
|
3666
|
+
"encoding",
|
|
3667
|
+
"mediaType"
|
|
3668
|
+
],
|
|
3669
|
+
"properties": {
|
|
3670
|
+
"content": {
|
|
3671
|
+
"type": "string",
|
|
3672
|
+
"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."
|
|
3673
|
+
},
|
|
3674
|
+
"encoding": {
|
|
3675
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference_Encoding",
|
|
3676
|
+
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
3677
|
+
},
|
|
3678
|
+
"mediaType": {
|
|
3679
|
+
"type": "string",
|
|
3680
|
+
"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."
|
|
3681
|
+
},
|
|
3682
|
+
"pointer": {
|
|
3683
|
+
"type": "string",
|
|
3684
|
+
"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."
|
|
3685
|
+
}
|
|
3686
|
+
},
|
|
3687
|
+
"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.",
|
|
3688
|
+
"$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.",
|
|
3689
|
+
"examples": [
|
|
3690
|
+
{
|
|
3691
|
+
"content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
|
|
3692
|
+
"encoding": "utf-8",
|
|
3693
|
+
"mediaType": "application/json",
|
|
3694
|
+
"pointer": "/matches/3"
|
|
3695
|
+
},
|
|
3696
|
+
{
|
|
3697
|
+
"content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
|
|
3698
|
+
"encoding": "utf-8",
|
|
3699
|
+
"mediaType": "application/xml",
|
|
3700
|
+
"pointer": "/Benchmark/TestResult/rule-result[4]"
|
|
3701
|
+
},
|
|
3702
|
+
{
|
|
3703
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
|
|
3704
|
+
"encoding": "base64",
|
|
3705
|
+
"mediaType": "application/octet-stream"
|
|
3706
|
+
},
|
|
3707
|
+
{
|
|
3708
|
+
"content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
|
|
3709
|
+
"encoding": "utf-8",
|
|
3710
|
+
"mediaType": "text/csv"
|
|
3711
|
+
}
|
|
3712
|
+
],
|
|
3713
|
+
"title": "Raw Source Record"
|
|
3714
|
+
},
|
|
2961
3715
|
"Requirement_Description": {
|
|
2962
3716
|
"type": "object",
|
|
2963
3717
|
"unevaluatedProperties": false,
|
|
@@ -2994,9 +3748,9 @@
|
|
|
2994
3748
|
}
|
|
2995
3749
|
}
|
|
2996
3750
|
},
|
|
2997
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3751
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
|
|
2998
3752
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2999
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3753
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
|
|
3000
3754
|
"title": "HDF CVSS Primitives",
|
|
3001
3755
|
"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).",
|
|
3002
3756
|
"$defs": {
|
|
@@ -3193,9 +3947,9 @@
|
|
|
3193
3947
|
}
|
|
3194
3948
|
}
|
|
3195
3949
|
},
|
|
3196
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3950
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
|
|
3197
3951
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3198
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3952
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
|
|
3199
3953
|
"title": "HDF Affected Package Primitives",
|
|
3200
3954
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
3201
3955
|
"$defs": {
|
|
@@ -3303,9 +4057,9 @@
|
|
|
3303
4057
|
}
|
|
3304
4058
|
}
|
|
3305
4059
|
},
|
|
3306
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
4060
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
|
|
3307
4061
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3308
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
4062
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
|
|
3309
4063
|
"title": "HDF Component Primitives",
|
|
3310
4064
|
"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).",
|
|
3311
4065
|
"$defs": {
|
|
@@ -3351,7 +4105,7 @@
|
|
|
3351
4105
|
"description": "Description of this component's role or purpose."
|
|
3352
4106
|
},
|
|
3353
4107
|
"owner": {
|
|
3354
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4108
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3355
4109
|
"description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
|
|
3356
4110
|
},
|
|
3357
4111
|
"externalIds": {
|
|
@@ -3371,14 +4125,14 @@
|
|
|
3371
4125
|
"boms": {
|
|
3372
4126
|
"type": "array",
|
|
3373
4127
|
"items": {
|
|
3374
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
4128
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
|
|
3375
4129
|
},
|
|
3376
4130
|
"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."
|
|
3377
4131
|
},
|
|
3378
4132
|
"integrity": {
|
|
3379
4133
|
"type": "array",
|
|
3380
4134
|
"items": {
|
|
3381
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4135
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
3382
4136
|
},
|
|
3383
4137
|
"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."
|
|
3384
4138
|
},
|
|
@@ -3392,12 +4146,12 @@
|
|
|
3392
4146
|
"inputOverrides": {
|
|
3393
4147
|
"type": "array",
|
|
3394
4148
|
"items": {
|
|
3395
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
4149
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
|
|
3396
4150
|
},
|
|
3397
4151
|
"description": "System-specific overrides for baseline input values."
|
|
3398
4152
|
},
|
|
3399
4153
|
"targetSelector": {
|
|
3400
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
4154
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
|
|
3401
4155
|
"description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
|
|
3402
4156
|
}
|
|
3403
4157
|
},
|
|
@@ -3680,7 +4434,7 @@
|
|
|
3680
4434
|
"const": "cloudAccount"
|
|
3681
4435
|
},
|
|
3682
4436
|
"provider": {
|
|
3683
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4437
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
3684
4438
|
"description": "Cloud provider."
|
|
3685
4439
|
},
|
|
3686
4440
|
"accountId": {
|
|
@@ -3719,7 +4473,7 @@
|
|
|
3719
4473
|
"const": "cloudResource"
|
|
3720
4474
|
},
|
|
3721
4475
|
"provider": {
|
|
3722
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4476
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
3723
4477
|
"description": "Cloud provider."
|
|
3724
4478
|
},
|
|
3725
4479
|
"resourceType": {
|
|
@@ -4018,9 +4772,9 @@
|
|
|
4018
4772
|
}
|
|
4019
4773
|
}
|
|
4020
4774
|
},
|
|
4021
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
4775
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
|
|
4022
4776
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4023
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
4777
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
|
|
4024
4778
|
"title": "HDF BOM Primitives",
|
|
4025
4779
|
"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.",
|
|
4026
4780
|
"$defs": {
|
|
@@ -4076,7 +4830,7 @@
|
|
|
4076
4830
|
"hashes": {
|
|
4077
4831
|
"type": "array",
|
|
4078
4832
|
"items": {
|
|
4079
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4833
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
4080
4834
|
},
|
|
4081
4835
|
"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."
|
|
4082
4836
|
},
|
|
@@ -4272,6 +5026,25 @@
|
|
|
4272
5026
|
}
|
|
4273
5027
|
]
|
|
4274
5028
|
},
|
|
5029
|
+
"Modality": {
|
|
5030
|
+
"type": [
|
|
5031
|
+
"string",
|
|
5032
|
+
"array"
|
|
5033
|
+
],
|
|
5034
|
+
"items": {
|
|
5035
|
+
"type": "string"
|
|
5036
|
+
},
|
|
5037
|
+
"description": "A content modality such as text, image, audio, tabular or timeseries: one string, or a list when the content spans several.",
|
|
5038
|
+
"title": "Modality",
|
|
5039
|
+
"examples": [
|
|
5040
|
+
"text",
|
|
5041
|
+
[
|
|
5042
|
+
"text",
|
|
5043
|
+
"image"
|
|
5044
|
+
]
|
|
5045
|
+
],
|
|
5046
|
+
"$comment": "Examples, in order: 1) a single modality; 2) multimodal content listed in full."
|
|
5047
|
+
},
|
|
4275
5048
|
"AI_Model_Extension": {
|
|
4276
5049
|
"type": "object",
|
|
4277
5050
|
"additionalProperties": true,
|
|
@@ -4373,13 +5146,7 @@
|
|
|
4373
5146
|
"description": "Input/output data types. Examples: string, byte[], float32, image."
|
|
4374
5147
|
},
|
|
4375
5148
|
"modality": {
|
|
4376
|
-
"
|
|
4377
|
-
"string",
|
|
4378
|
-
"array"
|
|
4379
|
-
],
|
|
4380
|
-
"items": {
|
|
4381
|
-
"type": "string"
|
|
4382
|
-
},
|
|
5149
|
+
"$ref": "#/$defs/Modality",
|
|
4383
5150
|
"description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
|
|
4384
5151
|
},
|
|
4385
5152
|
"contextLength": {
|
|
@@ -4419,13 +5186,7 @@
|
|
|
4419
5186
|
"description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
|
|
4420
5187
|
},
|
|
4421
5188
|
"modality": {
|
|
4422
|
-
"
|
|
4423
|
-
"string",
|
|
4424
|
-
"array"
|
|
4425
|
-
],
|
|
4426
|
-
"items": {
|
|
4427
|
-
"type": "string"
|
|
4428
|
-
},
|
|
5189
|
+
"$ref": "#/$defs/Modality",
|
|
4429
5190
|
"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."
|
|
4430
5191
|
},
|
|
4431
5192
|
"provenance": {
|
|
@@ -4488,9 +5249,9 @@
|
|
|
4488
5249
|
}
|
|
4489
5250
|
}
|
|
4490
5251
|
},
|
|
4491
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
5252
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
|
|
4492
5253
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4493
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
5254
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
|
|
4494
5255
|
"title": "HDF System Primitives",
|
|
4495
5256
|
"description": "Types for describing system architecture, authorization boundaries, and components.",
|
|
4496
5257
|
"$defs": {
|
|
@@ -4541,7 +5302,7 @@
|
|
|
4541
5302
|
"description": "Rationale for why this override is needed."
|
|
4542
5303
|
},
|
|
4543
5304
|
"approvedBy": {
|
|
4544
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5305
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
4545
5306
|
"description": "Identity of the person or system that approved this override."
|
|
4546
5307
|
}
|
|
4547
5308
|
},
|
|
@@ -4623,9 +5384,9 @@
|
|
|
4623
5384
|
}
|
|
4624
5385
|
}
|
|
4625
5386
|
},
|
|
4626
|
-
"https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
5387
|
+
"https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0": {
|
|
4627
5388
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4628
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
5389
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.8.0",
|
|
4629
5390
|
"type": "object",
|
|
4630
5391
|
"unevaluatedProperties": false,
|
|
4631
5392
|
"required": [
|
|
@@ -4635,7 +5396,7 @@
|
|
|
4635
5396
|
"externalReferences": {
|
|
4636
5397
|
"type": "array",
|
|
4637
5398
|
"items": {
|
|
4638
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5399
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
4639
5400
|
},
|
|
4640
5401
|
"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."
|
|
4641
5402
|
},
|
|
@@ -4652,7 +5413,7 @@
|
|
|
4652
5413
|
"components": {
|
|
4653
5414
|
"type": "array",
|
|
4654
5415
|
"items": {
|
|
4655
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
5416
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
4656
5417
|
},
|
|
4657
5418
|
"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."
|
|
4658
5419
|
},
|
|
@@ -4664,23 +5425,23 @@
|
|
|
4664
5425
|
"description": "Information on the baselines that were evaluated, including findings."
|
|
4665
5426
|
},
|
|
4666
5427
|
"statistics": {
|
|
4667
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
5428
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0#/$defs/Statistics",
|
|
4668
5429
|
"description": "Statistics for the assessment run, including duration and result counts."
|
|
4669
5430
|
},
|
|
4670
5431
|
"generator": {
|
|
4671
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5432
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
4672
5433
|
"description": "Information about the tool that generated this file."
|
|
4673
5434
|
},
|
|
4674
5435
|
"tool": {
|
|
4675
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5436
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Tool",
|
|
4676
5437
|
"description": "The security tool that produced the assessment data in this file."
|
|
4677
5438
|
},
|
|
4678
5439
|
"integrity": {
|
|
4679
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5440
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
4680
5441
|
"description": "Cryptographic integrity information for verifying this file."
|
|
4681
5442
|
},
|
|
4682
5443
|
"preAmendmentChecksum": {
|
|
4683
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5444
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4684
5445
|
"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.",
|
|
4685
5446
|
"$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.",
|
|
4686
5447
|
"examples": [
|
|
@@ -4691,11 +5452,11 @@
|
|
|
4691
5452
|
]
|
|
4692
5453
|
},
|
|
4693
5454
|
"runner": {
|
|
4694
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
5455
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0#/$defs/Runner",
|
|
4695
5456
|
"description": "Information about the test execution environment where the security tool was run. Distinct from targets (what is being tested)."
|
|
4696
5457
|
},
|
|
4697
5458
|
"remediation": {
|
|
4698
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5459
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Remediation",
|
|
4699
5460
|
"description": "Optional reference to automated remediation resources (Ansible playbooks, Terraform scripts, etc.) for fixing failing requirements found in this assessment."
|
|
4700
5461
|
},
|
|
4701
5462
|
"systemRef": {
|
|
@@ -4709,13 +5470,12 @@
|
|
|
4709
5470
|
"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."
|
|
4710
5471
|
},
|
|
4711
5472
|
"derivation": {
|
|
4712
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
5473
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0#/$defs/Derivation",
|
|
4713
5474
|
"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."
|
|
4714
5475
|
},
|
|
4715
5476
|
"extensions": {
|
|
4716
|
-
"
|
|
4717
|
-
"
|
|
4718
|
-
"description": "Reserved for tool-specific data not defined in the HDF standard. Use this to preserve original tool output, auxiliary data, or custom metadata."
|
|
5477
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
5478
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these results were converted from."
|
|
4719
5479
|
}
|
|
4720
5480
|
},
|
|
4721
5481
|
"examples": [
|
|
@@ -4807,14 +5567,14 @@
|
|
|
4807
5567
|
],
|
|
4808
5568
|
"allOf": [
|
|
4809
5569
|
{
|
|
4810
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5570
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Baseline_Metadata"
|
|
4811
5571
|
}
|
|
4812
5572
|
],
|
|
4813
5573
|
"properties": {
|
|
4814
5574
|
"depends": {
|
|
4815
5575
|
"type": "array",
|
|
4816
5576
|
"items": {
|
|
4817
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5577
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Dependency"
|
|
4818
5578
|
},
|
|
4819
5579
|
"description": "The set of dependencies this baseline depends on."
|
|
4820
5580
|
},
|
|
@@ -4822,21 +5582,17 @@
|
|
|
4822
5582
|
"type": "string",
|
|
4823
5583
|
"description": "The name of the parent baseline if this is a dependency of another."
|
|
4824
5584
|
},
|
|
4825
|
-
"description": {
|
|
4826
|
-
"type": "string",
|
|
4827
|
-
"description": "The description - should be more detailed than the summary."
|
|
4828
|
-
},
|
|
4829
5585
|
"integrity": {
|
|
4830
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5586
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
4831
5587
|
"description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
|
|
4832
5588
|
},
|
|
4833
5589
|
"originalChecksum": {
|
|
4834
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5590
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4835
5591
|
"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."
|
|
4836
5592
|
},
|
|
4837
5593
|
"resultsChecksum": {
|
|
4838
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
4839
|
-
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results.
|
|
5594
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
5595
|
+
"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."
|
|
4840
5596
|
},
|
|
4841
5597
|
"statusMessage": {
|
|
4842
5598
|
"type": "string",
|
|
@@ -4853,21 +5609,20 @@
|
|
|
4853
5609
|
"groups": {
|
|
4854
5610
|
"type": "array",
|
|
4855
5611
|
"items": {
|
|
4856
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5612
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Group"
|
|
4857
5613
|
},
|
|
4858
5614
|
"description": "A set of descriptions for the requirement groups."
|
|
4859
5615
|
},
|
|
4860
5616
|
"inputs": {
|
|
4861
5617
|
"type": "array",
|
|
4862
5618
|
"items": {
|
|
4863
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
5619
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0#/$defs/Input"
|
|
4864
5620
|
},
|
|
4865
5621
|
"description": "Typed inputs used to parameterize this baseline at execution time. See the Input primitive for the full schema."
|
|
4866
5622
|
},
|
|
4867
5623
|
"extensions": {
|
|
4868
|
-
"
|
|
4869
|
-
"
|
|
4870
|
-
"description": "Reserved for tool-specific baseline metadata not defined in the HDF standard."
|
|
5624
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
5625
|
+
"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."
|
|
4871
5626
|
}
|
|
4872
5627
|
},
|
|
4873
5628
|
"description": "Information on a baseline that was evaluated, including any findings.",
|
|
@@ -4885,7 +5640,7 @@
|
|
|
4885
5640
|
],
|
|
4886
5641
|
"allOf": [
|
|
4887
5642
|
{
|
|
4888
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5643
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Requirement_Core"
|
|
4889
5644
|
}
|
|
4890
5645
|
],
|
|
4891
5646
|
"properties": {
|
|
@@ -4893,7 +5648,7 @@
|
|
|
4893
5648
|
"type": "array",
|
|
4894
5649
|
"minItems": 1,
|
|
4895
5650
|
"items": {
|
|
4896
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
5651
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Description"
|
|
4897
5652
|
},
|
|
4898
5653
|
"contains": {
|
|
4899
5654
|
"type": "object",
|
|
@@ -4909,37 +5664,37 @@
|
|
|
4909
5664
|
"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'."
|
|
4910
5665
|
},
|
|
4911
5666
|
"severity": {
|
|
4912
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5667
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Severity",
|
|
4913
5668
|
"description": "Explicit severity rating. Typically derived from impact score but provided explicitly for clarity."
|
|
4914
5669
|
},
|
|
4915
5670
|
"sourceLocation": {
|
|
4916
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5671
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Source_Location",
|
|
4917
5672
|
"description": "The explicit location of the requirement within the source code."
|
|
4918
5673
|
},
|
|
4919
5674
|
"results": {
|
|
4920
5675
|
"type": "array",
|
|
4921
5676
|
"minItems": 1,
|
|
4922
5677
|
"items": {
|
|
4923
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
5678
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Requirement_Result"
|
|
4924
5679
|
},
|
|
4925
5680
|
"description": "The set of all tests within the requirement and their results."
|
|
4926
5681
|
},
|
|
4927
5682
|
"statusOverrides": {
|
|
4928
5683
|
"type": "array",
|
|
4929
5684
|
"items": {
|
|
4930
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5685
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Status_Override"
|
|
4931
5686
|
},
|
|
4932
5687
|
"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."
|
|
4933
5688
|
},
|
|
4934
5689
|
"poams": {
|
|
4935
5690
|
"type": "array",
|
|
4936
5691
|
"items": {
|
|
4937
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
5692
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/POAM"
|
|
4938
5693
|
},
|
|
4939
5694
|
"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."
|
|
4940
5695
|
},
|
|
4941
5696
|
"effectiveStatus": {
|
|
4942
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
5697
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
4943
5698
|
"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."
|
|
4944
5699
|
},
|
|
4945
5700
|
"effectiveImpact": {
|
|
@@ -4949,33 +5704,33 @@
|
|
|
4949
5704
|
"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."
|
|
4950
5705
|
},
|
|
4951
5706
|
"disposition": {
|
|
4952
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
5707
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
4953
5708
|
"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."
|
|
4954
5709
|
},
|
|
4955
5710
|
"effectiveChecksum": {
|
|
4956
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5711
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
4957
5712
|
"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)."
|
|
4958
5713
|
},
|
|
4959
5714
|
"evidence": {
|
|
4960
5715
|
"type": "array",
|
|
4961
5716
|
"items": {
|
|
4962
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
5717
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
4963
5718
|
},
|
|
4964
5719
|
"description": "Supporting evidence for this requirement's findings, such as screenshots, code samples, or log excerpts."
|
|
4965
5720
|
},
|
|
4966
5721
|
"cvss": {
|
|
4967
5722
|
"type": "array",
|
|
4968
5723
|
"items": {
|
|
4969
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
5724
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss"
|
|
4970
5725
|
},
|
|
4971
5726
|
"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."
|
|
4972
5727
|
},
|
|
4973
5728
|
"epss": {
|
|
4974
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
5729
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0#/$defs/Epss",
|
|
4975
5730
|
"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."
|
|
4976
5731
|
},
|
|
4977
5732
|
"kev": {
|
|
4978
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
5733
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0#/$defs/Kev",
|
|
4979
5734
|
"description": "CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and dueDate carry the federal patching deadline."
|
|
4980
5735
|
},
|
|
4981
5736
|
"cwe": {
|
|
@@ -4989,7 +5744,7 @@
|
|
|
4989
5744
|
"affectedPackages": {
|
|
4990
5745
|
"type": "array",
|
|
4991
5746
|
"items": {
|
|
4992
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
5747
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
4993
5748
|
},
|
|
4994
5749
|
"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)."
|
|
4995
5750
|
}
|
|
@@ -5209,7 +5964,6 @@
|
|
|
5209
5964
|
"statusOverrides": [
|
|
5210
5965
|
{
|
|
5211
5966
|
"type": "operationalRequirement",
|
|
5212
|
-
"status": "failed",
|
|
5213
5967
|
"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.",
|
|
5214
5968
|
"appliedBy": {
|
|
5215
5969
|
"type": "email",
|
|
@@ -5278,9 +6032,9 @@
|
|
|
5278
6032
|
}
|
|
5279
6033
|
}
|
|
5280
6034
|
},
|
|
5281
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
6035
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0": {
|
|
5282
6036
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5283
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.
|
|
6037
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/statistics/v3.8.0",
|
|
5284
6038
|
"title": "HDF Statistics Primitives",
|
|
5285
6039
|
"description": "Statistics types for tracking assessment run metrics.",
|
|
5286
6040
|
"$defs": {
|
|
@@ -5349,9 +6103,9 @@
|
|
|
5349
6103
|
}
|
|
5350
6104
|
}
|
|
5351
6105
|
},
|
|
5352
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
6106
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0": {
|
|
5353
6107
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5354
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.
|
|
6108
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/runner/v3.8.0",
|
|
5355
6109
|
"title": "HDF Runner Primitive",
|
|
5356
6110
|
"description": "Information about the test execution environment where the security tool/scanner was executed.",
|
|
5357
6111
|
"$defs": {
|
|
@@ -5395,7 +6149,7 @@
|
|
|
5395
6149
|
"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."
|
|
5396
6150
|
},
|
|
5397
6151
|
"operator": {
|
|
5398
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
6152
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
5399
6153
|
"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."
|
|
5400
6154
|
}
|
|
5401
6155
|
},
|
|
@@ -5444,9 +6198,9 @@
|
|
|
5444
6198
|
}
|
|
5445
6199
|
}
|
|
5446
6200
|
},
|
|
5447
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
6201
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0": {
|
|
5448
6202
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5449
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.
|
|
6203
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/events/v3.8.0",
|
|
5450
6204
|
"title": "HDF Change Event Primitives",
|
|
5451
6205
|
"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.",
|
|
5452
6206
|
"$defs": {
|
|
@@ -5500,7 +6254,7 @@
|
|
|
5500
6254
|
"priorChecksum": {
|
|
5501
6255
|
"oneOf": [
|
|
5502
6256
|
{
|
|
5503
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
6257
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
5504
6258
|
},
|
|
5505
6259
|
{
|
|
5506
6260
|
"type": "null"
|
|
@@ -5518,7 +6272,7 @@
|
|
|
5518
6272
|
"systemRef": "apptier.hdf-system.json",
|
|
5519
6273
|
"componentId": "6e0f2a3b-9c01-4d5e-8f7a-1b2c3d4e5f60",
|
|
5520
6274
|
"timestamp": "2026-07-22T14:03:11Z",
|
|
5521
|
-
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.
|
|
6275
|
+
"schemaRef": "https://mitre.github.io/hdf-libs/schemas/hdf-requirement-change-event/v3.8.0",
|
|
5522
6276
|
"priorChecksum": {
|
|
5523
6277
|
"algorithm": "sha256",
|
|
5524
6278
|
"value": "704f62b2d0803438ad6b7b9bab45e2c4f350b7344135a2a7f8ef986d98669021"
|
|
@@ -5572,7 +6326,7 @@
|
|
|
5572
6326
|
],
|
|
5573
6327
|
"properties": {
|
|
5574
6328
|
"effectiveStatus": {
|
|
5575
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
6329
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
5576
6330
|
"description": "The resolved effective compliance status at this point in the chain."
|
|
5577
6331
|
},
|
|
5578
6332
|
"effectiveImpact": {
|
|
@@ -5621,7 +6375,7 @@
|
|
|
5621
6375
|
"description": "URI to the seed snapshot document (relative path or absolute URL)."
|
|
5622
6376
|
},
|
|
5623
6377
|
"checksum": {
|
|
5624
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
6378
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
5625
6379
|
"description": "Checksum of the seed snapshot, REQUIRED: the derivation pins an immutable snapshot by content, not just location."
|
|
5626
6380
|
}
|
|
5627
6381
|
},
|
|
@@ -5670,9 +6424,9 @@
|
|
|
5670
6424
|
}
|
|
5671
6425
|
}
|
|
5672
6426
|
},
|
|
5673
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
6427
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0": {
|
|
5674
6428
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5675
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.
|
|
6429
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/parameter/v3.8.0",
|
|
5676
6430
|
"title": "HDF Parameter Primitives",
|
|
5677
6431
|
"description": "Input/parameter type definitions for typed, traceable configuration values that bridge governance prose and scanner automation.",
|
|
5678
6432
|
"$defs": {
|
|
@@ -5724,7 +6478,8 @@
|
|
|
5724
6478
|
},
|
|
5725
6479
|
"allowedValues": {
|
|
5726
6480
|
"type": "array",
|
|
5727
|
-
"
|
|
6481
|
+
"items": true,
|
|
6482
|
+
"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."
|
|
5728
6483
|
}
|
|
5729
6484
|
},
|
|
5730
6485
|
"description": "Validation constraints for an input value.",
|
|
@@ -5803,9 +6558,9 @@
|
|
|
5803
6558
|
}
|
|
5804
6559
|
}
|
|
5805
6560
|
},
|
|
5806
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
6561
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0": {
|
|
5807
6562
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5808
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.
|
|
6563
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/epss/v3.8.0",
|
|
5809
6564
|
"title": "HDF EPSS Primitive",
|
|
5810
6565
|
"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.",
|
|
5811
6566
|
"$defs": {
|
|
@@ -5860,9 +6615,9 @@
|
|
|
5860
6615
|
}
|
|
5861
6616
|
}
|
|
5862
6617
|
},
|
|
5863
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
6618
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0": {
|
|
5864
6619
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
5865
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.
|
|
6620
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/kev/v3.8.0",
|
|
5866
6621
|
"title": "HDF Kev Primitives",
|
|
5867
6622
|
"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.",
|
|
5868
6623
|
"$defs": {
|