@mitre/hdf-schema 3.7.2 → 3.8.0-next.42532249979.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 +348 -181
- 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 +414 -62
- package/dist/schemas/hdf-baseline.schema.json +419 -67
- package/dist/schemas/hdf-comparison.schema.json +730 -153
- package/dist/schemas/hdf-evidence-package.schema.json +418 -65
- package/dist/schemas/hdf-plan.schema.json +420 -68
- package/dist/schemas/hdf-requirement-change-event.schema.json +486 -140
- package/dist/schemas/hdf-results.schema.json +472 -126
- package/dist/schemas/hdf-system.schema.json +435 -83
- package/dist/ts/hdf.d.ts +218 -26
- package/dist/ts/hdf.js +18 -2
- package/dist/ts/hdf.ts +219 -20
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-amendments/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-amendments/v3.8.0",
|
|
4
4
|
"title": "HDF Amendments",
|
|
5
5
|
"description": "Waivers, attestations, and POA&Ms that modify requirement compliance status or impact. Amendments are standalone documents that can be applied to results via merge operations.",
|
|
6
6
|
"type": "object",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
"description": "URI to the hdf-system document these amendments apply to."
|
|
30
30
|
},
|
|
31
31
|
"appliedBy": {
|
|
32
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
32
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
33
33
|
"description": "Default identity of who created this amendments document. Individual overrides may specify their own appliedBy."
|
|
34
34
|
},
|
|
35
35
|
"approvedBy": {
|
|
36
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
36
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
37
37
|
"description": "Identity of the authorizing official who approved these amendments."
|
|
38
38
|
},
|
|
39
39
|
"overrides": {
|
|
40
40
|
"type": "array",
|
|
41
41
|
"minItems": 1,
|
|
42
42
|
"items": {
|
|
43
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
43
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Standalone_Override"
|
|
44
44
|
},
|
|
45
45
|
"description": "The set of amendments (waivers, attestations, POA&Ms, and other overrides)."
|
|
46
46
|
},
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"description": "Optional key-value labels for grouping and querying amendments."
|
|
53
53
|
},
|
|
54
54
|
"integrity": {
|
|
55
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
55
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
56
56
|
"description": "Cryptographic integrity information for verifying this amendments document has not been tampered with."
|
|
57
57
|
},
|
|
58
58
|
"signature": {
|
|
59
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
59
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
60
60
|
"description": "Document-level digital signature covering all amendments."
|
|
61
61
|
},
|
|
62
62
|
"version": {
|
|
@@ -64,8 +64,12 @@
|
|
|
64
64
|
"description": "Version of this amendments document."
|
|
65
65
|
},
|
|
66
66
|
"generator": {
|
|
67
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
67
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
68
68
|
"description": "Information about the tool that generated this document."
|
|
69
|
+
},
|
|
70
|
+
"extensions": {
|
|
71
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
72
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) these amendments were converted from — the VEX family and oscal-poam-to-hdf all emit this document type."
|
|
69
73
|
}
|
|
70
74
|
},
|
|
71
75
|
"examples": [
|
|
@@ -101,16 +105,16 @@
|
|
|
101
105
|
}
|
|
102
106
|
],
|
|
103
107
|
"$defs": {
|
|
104
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
108
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
|
|
105
109
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
106
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
110
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
|
|
107
111
|
"title": "HDF Common Primitives",
|
|
108
112
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
109
113
|
"$defs": {
|
|
110
114
|
"External_Reference": {
|
|
111
115
|
"type": "object",
|
|
112
116
|
"title": "External Reference",
|
|
113
|
-
"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.",
|
|
117
|
+
"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.",
|
|
114
118
|
"required": [
|
|
115
119
|
"sourceName"
|
|
116
120
|
],
|
|
@@ -129,6 +133,42 @@
|
|
|
129
133
|
"required": [
|
|
130
134
|
"description"
|
|
131
135
|
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"required": [
|
|
139
|
+
"content"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"required": [
|
|
144
|
+
"document"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"allOf": [
|
|
149
|
+
{
|
|
150
|
+
"if": {
|
|
151
|
+
"required": [
|
|
152
|
+
"content"
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
"then": {
|
|
156
|
+
"required": [
|
|
157
|
+
"encoding"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"if": {
|
|
163
|
+
"required": [
|
|
164
|
+
"encoding"
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
"then": {
|
|
168
|
+
"required": [
|
|
169
|
+
"content"
|
|
170
|
+
]
|
|
171
|
+
}
|
|
132
172
|
}
|
|
133
173
|
],
|
|
134
174
|
"properties": {
|
|
@@ -144,7 +184,7 @@
|
|
|
144
184
|
"href": {
|
|
145
185
|
"type": "string",
|
|
146
186
|
"format": "uri-reference",
|
|
147
|
-
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs.
|
|
187
|
+
"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."
|
|
148
188
|
},
|
|
149
189
|
"description": {
|
|
150
190
|
"type": "string",
|
|
@@ -156,11 +196,11 @@
|
|
|
156
196
|
},
|
|
157
197
|
"mediaType": {
|
|
158
198
|
"type": "string",
|
|
159
|
-
"description": "IANA media type of the
|
|
199
|
+
"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`."
|
|
160
200
|
},
|
|
161
201
|
"checksum": {
|
|
162
202
|
"$ref": "#/$defs/Checksum",
|
|
163
|
-
"description": "Integrity hash of the
|
|
203
|
+
"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."
|
|
164
204
|
},
|
|
165
205
|
"addedBy": {
|
|
166
206
|
"$ref": "#/$defs/Identity",
|
|
@@ -179,11 +219,24 @@
|
|
|
179
219
|
"document": {
|
|
180
220
|
"type": "object",
|
|
181
221
|
"additionalProperties": true,
|
|
182
|
-
"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)."
|
|
222
|
+
"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)."
|
|
223
|
+
},
|
|
224
|
+
"content": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"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."
|
|
227
|
+
},
|
|
228
|
+
"encoding": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"title": "External Reference Encoding",
|
|
231
|
+
"enum": [
|
|
232
|
+
"utf-8",
|
|
233
|
+
"base64"
|
|
234
|
+
],
|
|
235
|
+
"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."
|
|
183
236
|
}
|
|
184
237
|
},
|
|
185
238
|
"unevaluatedProperties": false,
|
|
186
|
-
"$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.",
|
|
239
|
+
"$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.",
|
|
187
240
|
"examples": [
|
|
188
241
|
{
|
|
189
242
|
"sourceName": "cve",
|
|
@@ -229,6 +282,28 @@
|
|
|
229
282
|
}
|
|
230
283
|
]
|
|
231
284
|
}
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"sourceName": "openscap",
|
|
288
|
+
"rel": "raw-source",
|
|
289
|
+
"mediaType": "application/xml",
|
|
290
|
+
"encoding": "utf-8",
|
|
291
|
+
"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>",
|
|
292
|
+
"checksum": {
|
|
293
|
+
"algorithm": "sha256",
|
|
294
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"sourceName": "fortify",
|
|
299
|
+
"rel": "raw-source",
|
|
300
|
+
"mediaType": "application/zip",
|
|
301
|
+
"encoding": "base64",
|
|
302
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
303
|
+
"checksum": {
|
|
304
|
+
"algorithm": "sha256",
|
|
305
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
306
|
+
}
|
|
232
307
|
}
|
|
233
308
|
]
|
|
234
309
|
},
|
|
@@ -240,7 +315,7 @@
|
|
|
240
315
|
"sha512",
|
|
241
316
|
"blake3"
|
|
242
317
|
],
|
|
243
|
-
"description": "
|
|
318
|
+
"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.",
|
|
244
319
|
"title": "Hash Algorithm"
|
|
245
320
|
},
|
|
246
321
|
"Requirement_Group": {
|
|
@@ -398,7 +473,33 @@
|
|
|
398
473
|
}
|
|
399
474
|
],
|
|
400
475
|
"description": "A reference to an external document.",
|
|
401
|
-
"title": "Reference"
|
|
476
|
+
"title": "Reference",
|
|
477
|
+
"unevaluatedProperties": false,
|
|
478
|
+
"$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.",
|
|
479
|
+
"examples": [
|
|
480
|
+
{
|
|
481
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
"ref": "NIST SP 800-53 Rev 5, AC-6"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"ref": "CIS Benchmark for RHEL 9, 1.1.1",
|
|
488
|
+
"url": "https://www.cisecurity.org/benchmark/red_hat_linux"
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"ref": [
|
|
492
|
+
{
|
|
493
|
+
"identifier": "2921",
|
|
494
|
+
"publisher": "DISA",
|
|
495
|
+
"type": "DPMS Target"
|
|
496
|
+
}
|
|
497
|
+
]
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"uri": "https://attack.mitre.org/techniques/T1059/"
|
|
501
|
+
}
|
|
502
|
+
]
|
|
402
503
|
},
|
|
403
504
|
"Source_Location": {
|
|
404
505
|
"type": "object",
|
|
@@ -1212,9 +1313,9 @@
|
|
|
1212
1313
|
}
|
|
1213
1314
|
}
|
|
1214
1315
|
},
|
|
1215
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
1316
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
|
|
1216
1317
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1217
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
1318
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
|
|
1218
1319
|
"title": "HDF Amendment Primitives",
|
|
1219
1320
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
1220
1321
|
"$defs": {
|
|
@@ -1325,7 +1426,7 @@
|
|
|
1325
1426
|
"externalReferences": {
|
|
1326
1427
|
"type": "array",
|
|
1327
1428
|
"items": {
|
|
1328
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1429
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
1329
1430
|
},
|
|
1330
1431
|
"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."
|
|
1331
1432
|
},
|
|
@@ -1343,7 +1444,7 @@
|
|
|
1343
1444
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
1344
1445
|
},
|
|
1345
1446
|
"status": {
|
|
1346
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1447
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
1347
1448
|
"description": "The new status this amendment sets. Optional when only impact is being overridden."
|
|
1348
1449
|
},
|
|
1349
1450
|
"impact": {
|
|
@@ -1355,7 +1456,7 @@
|
|
|
1355
1456
|
"description": "Justification for this amendment."
|
|
1356
1457
|
},
|
|
1357
1458
|
"appliedBy": {
|
|
1358
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1459
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
1359
1460
|
"description": "Identity of who applied this amendment."
|
|
1360
1461
|
},
|
|
1361
1462
|
"appliedAt": {
|
|
@@ -1371,20 +1472,20 @@
|
|
|
1371
1472
|
"evidence": {
|
|
1372
1473
|
"type": "array",
|
|
1373
1474
|
"items": {
|
|
1374
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1475
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
1375
1476
|
},
|
|
1376
1477
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
1377
1478
|
},
|
|
1378
1479
|
"signature": {
|
|
1379
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1480
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
1380
1481
|
"description": "Digital signature for non-repudiation."
|
|
1381
1482
|
},
|
|
1382
1483
|
"previousChecksum": {
|
|
1383
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1484
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
1384
1485
|
"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."
|
|
1385
1486
|
},
|
|
1386
1487
|
"cvss": {
|
|
1387
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1488
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
1388
1489
|
"$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.",
|
|
1389
1490
|
"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."
|
|
1390
1491
|
},
|
|
@@ -1395,7 +1496,7 @@
|
|
|
1395
1496
|
"milestones": {
|
|
1396
1497
|
"type": "array",
|
|
1397
1498
|
"items": {
|
|
1398
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1499
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
1399
1500
|
},
|
|
1400
1501
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
1401
1502
|
},
|
|
@@ -1412,7 +1513,7 @@
|
|
|
1412
1513
|
"affectedPackages": {
|
|
1413
1514
|
"type": "array",
|
|
1414
1515
|
"items": {
|
|
1415
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
1516
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
1416
1517
|
},
|
|
1417
1518
|
"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)."
|
|
1418
1519
|
}
|
|
@@ -1545,9 +1646,9 @@
|
|
|
1545
1646
|
}
|
|
1546
1647
|
}
|
|
1547
1648
|
},
|
|
1548
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1649
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
|
|
1549
1650
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1550
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
1651
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
|
|
1551
1652
|
"title": "HDF Result Primitives",
|
|
1552
1653
|
"description": "Types for representing assessment results and statuses.",
|
|
1553
1654
|
"$defs": {
|
|
@@ -1612,6 +1713,10 @@
|
|
|
1612
1713
|
"type": "string"
|
|
1613
1714
|
},
|
|
1614
1715
|
"description": "The stacktrace/backtrace of the exception if one occurred."
|
|
1716
|
+
},
|
|
1717
|
+
"rawSourceRecord": {
|
|
1718
|
+
"$ref": "#/$defs/Raw_Source_Record",
|
|
1719
|
+
"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."
|
|
1615
1720
|
}
|
|
1616
1721
|
},
|
|
1617
1722
|
"examples": [
|
|
@@ -1642,6 +1747,64 @@
|
|
|
1642
1747
|
"description": "A test within a requirement and its results and findings such as how long it took to run.",
|
|
1643
1748
|
"title": "Requirement Result"
|
|
1644
1749
|
},
|
|
1750
|
+
"Raw_Source_Record": {
|
|
1751
|
+
"type": "object",
|
|
1752
|
+
"additionalProperties": false,
|
|
1753
|
+
"required": [
|
|
1754
|
+
"content",
|
|
1755
|
+
"encoding",
|
|
1756
|
+
"mediaType"
|
|
1757
|
+
],
|
|
1758
|
+
"properties": {
|
|
1759
|
+
"content": {
|
|
1760
|
+
"type": "string",
|
|
1761
|
+
"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."
|
|
1762
|
+
},
|
|
1763
|
+
"encoding": {
|
|
1764
|
+
"type": "string",
|
|
1765
|
+
"enum": [
|
|
1766
|
+
"utf-8",
|
|
1767
|
+
"base64"
|
|
1768
|
+
],
|
|
1769
|
+
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
1770
|
+
},
|
|
1771
|
+
"mediaType": {
|
|
1772
|
+
"type": "string",
|
|
1773
|
+
"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."
|
|
1774
|
+
},
|
|
1775
|
+
"pointer": {
|
|
1776
|
+
"type": "string",
|
|
1777
|
+
"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."
|
|
1778
|
+
}
|
|
1779
|
+
},
|
|
1780
|
+
"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.",
|
|
1781
|
+
"$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.",
|
|
1782
|
+
"examples": [
|
|
1783
|
+
{
|
|
1784
|
+
"content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
|
|
1785
|
+
"encoding": "utf-8",
|
|
1786
|
+
"mediaType": "application/json",
|
|
1787
|
+
"pointer": "/matches/3"
|
|
1788
|
+
},
|
|
1789
|
+
{
|
|
1790
|
+
"content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
|
|
1791
|
+
"encoding": "utf-8",
|
|
1792
|
+
"mediaType": "application/xml",
|
|
1793
|
+
"pointer": "/Benchmark/TestResult/rule-result[4]"
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
|
|
1797
|
+
"encoding": "base64",
|
|
1798
|
+
"mediaType": "application/octet-stream"
|
|
1799
|
+
},
|
|
1800
|
+
{
|
|
1801
|
+
"content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
|
|
1802
|
+
"encoding": "utf-8",
|
|
1803
|
+
"mediaType": "text/csv"
|
|
1804
|
+
}
|
|
1805
|
+
],
|
|
1806
|
+
"title": "Raw Source Record"
|
|
1807
|
+
},
|
|
1645
1808
|
"Requirement_Description": {
|
|
1646
1809
|
"type": "object",
|
|
1647
1810
|
"unevaluatedProperties": false,
|
|
@@ -1678,9 +1841,9 @@
|
|
|
1678
1841
|
}
|
|
1679
1842
|
}
|
|
1680
1843
|
},
|
|
1681
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1844
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
|
|
1682
1845
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1683
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
1846
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
|
|
1684
1847
|
"title": "HDF CVSS Primitives",
|
|
1685
1848
|
"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).",
|
|
1686
1849
|
"$defs": {
|
|
@@ -1877,9 +2040,9 @@
|
|
|
1877
2040
|
}
|
|
1878
2041
|
}
|
|
1879
2042
|
},
|
|
1880
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
2043
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
|
|
1881
2044
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1882
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
2045
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
|
|
1883
2046
|
"title": "HDF Affected Package Primitives",
|
|
1884
2047
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
1885
2048
|
"$defs": {
|
|
@@ -1987,12 +2150,183 @@
|
|
|
1987
2150
|
}
|
|
1988
2151
|
}
|
|
1989
2152
|
},
|
|
1990
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2153
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
|
|
1991
2154
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1992
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2155
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
|
|
1993
2156
|
"title": "HDF Extension Primitives",
|
|
1994
|
-
"description": "Extension types for waivers, attestations, generators, and
|
|
2157
|
+
"description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
|
|
1995
2158
|
"$defs": {
|
|
2159
|
+
"Raw_Source_Artifact": {
|
|
2160
|
+
"allOf": [
|
|
2161
|
+
{
|
|
2162
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2163
|
+
},
|
|
2164
|
+
{
|
|
2165
|
+
"not": {
|
|
2166
|
+
"required": [
|
|
2167
|
+
"document"
|
|
2168
|
+
]
|
|
2169
|
+
}
|
|
2170
|
+
},
|
|
2171
|
+
{
|
|
2172
|
+
"if": {
|
|
2173
|
+
"required": [
|
|
2174
|
+
"content"
|
|
2175
|
+
]
|
|
2176
|
+
},
|
|
2177
|
+
"then": {
|
|
2178
|
+
"required": [
|
|
2179
|
+
"encoding",
|
|
2180
|
+
"mediaType"
|
|
2181
|
+
]
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
],
|
|
2185
|
+
"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`.",
|
|
2186
|
+
"$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.",
|
|
2187
|
+
"examples": [
|
|
2188
|
+
{
|
|
2189
|
+
"sourceName": "grype",
|
|
2190
|
+
"rel": "raw-source",
|
|
2191
|
+
"mediaType": "application/json",
|
|
2192
|
+
"encoding": "utf-8",
|
|
2193
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
2194
|
+
"checksum": {
|
|
2195
|
+
"algorithm": "sha256",
|
|
2196
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
2197
|
+
}
|
|
2198
|
+
},
|
|
2199
|
+
{
|
|
2200
|
+
"sourceName": "openscap",
|
|
2201
|
+
"rel": "raw-source",
|
|
2202
|
+
"mediaType": "application/xml",
|
|
2203
|
+
"encoding": "utf-8",
|
|
2204
|
+
"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>",
|
|
2205
|
+
"checksum": {
|
|
2206
|
+
"algorithm": "sha256",
|
|
2207
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
2208
|
+
}
|
|
2209
|
+
},
|
|
2210
|
+
{
|
|
2211
|
+
"sourceName": "prisma",
|
|
2212
|
+
"rel": "raw-source",
|
|
2213
|
+
"mediaType": "text/csv",
|
|
2214
|
+
"encoding": "utf-8",
|
|
2215
|
+
"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",
|
|
2216
|
+
"checksum": {
|
|
2217
|
+
"algorithm": "sha256",
|
|
2218
|
+
"value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
|
|
2219
|
+
}
|
|
2220
|
+
},
|
|
2221
|
+
{
|
|
2222
|
+
"sourceName": "fortify",
|
|
2223
|
+
"rel": "raw-source",
|
|
2224
|
+
"mediaType": "application/zip",
|
|
2225
|
+
"encoding": "base64",
|
|
2226
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
2227
|
+
"checksum": {
|
|
2228
|
+
"algorithm": "sha256",
|
|
2229
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
2230
|
+
}
|
|
2231
|
+
},
|
|
2232
|
+
{
|
|
2233
|
+
"sourceName": "nessus",
|
|
2234
|
+
"rel": "raw-source",
|
|
2235
|
+
"href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
|
|
2236
|
+
"mediaType": "application/xml",
|
|
2237
|
+
"checksum": {
|
|
2238
|
+
"algorithm": "sha256",
|
|
2239
|
+
"value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
]
|
|
2243
|
+
},
|
|
2244
|
+
"Extensions": {
|
|
2245
|
+
"type": "object",
|
|
2246
|
+
"additionalProperties": false,
|
|
2247
|
+
"properties": {
|
|
2248
|
+
"passthrough": {
|
|
2249
|
+
"type": "object",
|
|
2250
|
+
"additionalProperties": true,
|
|
2251
|
+
"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.",
|
|
2252
|
+
"examples": [
|
|
2253
|
+
{
|
|
2254
|
+
"auxiliary_data": [
|
|
2255
|
+
{
|
|
2256
|
+
"name": "Scoutsuite",
|
|
2257
|
+
"data": {
|
|
2258
|
+
"last_run": {
|
|
2259
|
+
"ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
]
|
|
2264
|
+
},
|
|
2265
|
+
{
|
|
2266
|
+
"audit": {
|
|
2267
|
+
"runId": "r-123"
|
|
2268
|
+
}
|
|
2269
|
+
}
|
|
2270
|
+
],
|
|
2271
|
+
"$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."
|
|
2272
|
+
},
|
|
2273
|
+
"rawSourceArtifacts": {
|
|
2274
|
+
"type": "array",
|
|
2275
|
+
"items": {
|
|
2276
|
+
"$ref": "#/$defs/Raw_Source_Artifact"
|
|
2277
|
+
},
|
|
2278
|
+
"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."
|
|
2279
|
+
}
|
|
2280
|
+
},
|
|
2281
|
+
"title": "Extensions",
|
|
2282
|
+
"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.",
|
|
2283
|
+
"$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.",
|
|
2284
|
+
"examples": [
|
|
2285
|
+
{
|
|
2286
|
+
"passthrough": {
|
|
2287
|
+
"auxiliary_data": [
|
|
2288
|
+
{
|
|
2289
|
+
"name": "Grype",
|
|
2290
|
+
"data": {
|
|
2291
|
+
"descriptor": {
|
|
2292
|
+
"name": "grype",
|
|
2293
|
+
"version": "0.74.0"
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
}
|
|
2297
|
+
]
|
|
2298
|
+
},
|
|
2299
|
+
"rawSourceArtifacts": [
|
|
2300
|
+
{
|
|
2301
|
+
"sourceName": "grype",
|
|
2302
|
+
"rel": "raw-source",
|
|
2303
|
+
"mediaType": "application/json",
|
|
2304
|
+
"encoding": "utf-8",
|
|
2305
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
2306
|
+
"checksum": {
|
|
2307
|
+
"algorithm": "sha256",
|
|
2308
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
]
|
|
2312
|
+
},
|
|
2313
|
+
{
|
|
2314
|
+
"rawSourceArtifacts": [
|
|
2315
|
+
{
|
|
2316
|
+
"sourceName": "fortify",
|
|
2317
|
+
"rel": "raw-source",
|
|
2318
|
+
"mediaType": "application/zip",
|
|
2319
|
+
"encoding": "base64",
|
|
2320
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
2321
|
+
"checksum": {
|
|
2322
|
+
"algorithm": "sha256",
|
|
2323
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
2324
|
+
}
|
|
2325
|
+
}
|
|
2326
|
+
]
|
|
2327
|
+
}
|
|
2328
|
+
]
|
|
2329
|
+
},
|
|
1996
2330
|
"Status_Override": {
|
|
1997
2331
|
"type": "object",
|
|
1998
2332
|
"unevaluatedProperties": false,
|
|
@@ -2019,20 +2353,20 @@
|
|
|
2019
2353
|
"externalReferences": {
|
|
2020
2354
|
"type": "array",
|
|
2021
2355
|
"items": {
|
|
2022
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2356
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2023
2357
|
},
|
|
2024
2358
|
"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."
|
|
2025
2359
|
},
|
|
2026
2360
|
"type": {
|
|
2027
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2361
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
2028
2362
|
"description": "The type of override applied to this requirement."
|
|
2029
2363
|
},
|
|
2030
2364
|
"status": {
|
|
2031
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2365
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
2032
2366
|
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
2033
2367
|
},
|
|
2034
2368
|
"impact": {
|
|
2035
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2369
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
|
|
2036
2370
|
"description": "Override to the requirement's impact score. At least one of status or impact must be set."
|
|
2037
2371
|
},
|
|
2038
2372
|
"reason": {
|
|
@@ -2040,7 +2374,7 @@
|
|
|
2040
2374
|
"description": "Explanation for why this override was applied."
|
|
2041
2375
|
},
|
|
2042
2376
|
"appliedBy": {
|
|
2043
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2377
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2044
2378
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
2045
2379
|
},
|
|
2046
2380
|
"appliedAt": {
|
|
@@ -2054,27 +2388,27 @@
|
|
|
2054
2388
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
2055
2389
|
},
|
|
2056
2390
|
"signature": {
|
|
2057
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2391
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2058
2392
|
"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."
|
|
2059
2393
|
},
|
|
2060
2394
|
"evidence": {
|
|
2061
2395
|
"type": "array",
|
|
2062
2396
|
"items": {
|
|
2063
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2397
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2064
2398
|
},
|
|
2065
2399
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
2066
2400
|
},
|
|
2067
2401
|
"previousChecksum": {
|
|
2068
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2402
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2069
2403
|
"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."
|
|
2070
2404
|
},
|
|
2071
2405
|
"cvss": {
|
|
2072
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
2406
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
2073
2407
|
"$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.",
|
|
2074
2408
|
"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."
|
|
2075
2409
|
},
|
|
2076
2410
|
"justification": {
|
|
2077
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2411
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
|
|
2078
2412
|
"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."
|
|
2079
2413
|
}
|
|
2080
2414
|
},
|
|
@@ -2210,7 +2544,7 @@
|
|
|
2210
2544
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
2211
2545
|
},
|
|
2212
2546
|
"appliedBy": {
|
|
2213
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2547
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2214
2548
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
2215
2549
|
},
|
|
2216
2550
|
"appliedAt": {
|
|
@@ -2226,23 +2560,23 @@
|
|
|
2226
2560
|
"milestones": {
|
|
2227
2561
|
"type": "array",
|
|
2228
2562
|
"items": {
|
|
2229
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2563
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
2230
2564
|
},
|
|
2231
2565
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
2232
2566
|
},
|
|
2233
2567
|
"signature": {
|
|
2234
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2568
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2235
2569
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
2236
2570
|
},
|
|
2237
2571
|
"evidence": {
|
|
2238
2572
|
"type": "array",
|
|
2239
2573
|
"items": {
|
|
2240
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2574
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2241
2575
|
},
|
|
2242
2576
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
2243
2577
|
},
|
|
2244
2578
|
"previousChecksum": {
|
|
2245
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2579
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2246
2580
|
"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."
|
|
2247
2581
|
}
|
|
2248
2582
|
},
|
|
@@ -2385,17 +2719,9 @@
|
|
|
2385
2719
|
"Integrity": {
|
|
2386
2720
|
"type": "object",
|
|
2387
2721
|
"unevaluatedProperties": false,
|
|
2388
|
-
"dependentRequired": {
|
|
2389
|
-
"algorithm": [
|
|
2390
|
-
"checksum"
|
|
2391
|
-
],
|
|
2392
|
-
"checksum": [
|
|
2393
|
-
"algorithm"
|
|
2394
|
-
]
|
|
2395
|
-
},
|
|
2396
2722
|
"properties": {
|
|
2397
2723
|
"algorithm": {
|
|
2398
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2724
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
|
|
2399
2725
|
"description": "The hash algorithm used for the checksum."
|
|
2400
2726
|
},
|
|
2401
2727
|
"checksum": {
|
|
@@ -2424,7 +2750,33 @@
|
|
|
2424
2750
|
}
|
|
2425
2751
|
],
|
|
2426
2752
|
"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.",
|
|
2427
|
-
"title": "Integrity"
|
|
2753
|
+
"title": "Integrity",
|
|
2754
|
+
"allOf": [
|
|
2755
|
+
{
|
|
2756
|
+
"if": {
|
|
2757
|
+
"required": [
|
|
2758
|
+
"algorithm"
|
|
2759
|
+
]
|
|
2760
|
+
},
|
|
2761
|
+
"then": {
|
|
2762
|
+
"required": [
|
|
2763
|
+
"checksum"
|
|
2764
|
+
]
|
|
2765
|
+
}
|
|
2766
|
+
},
|
|
2767
|
+
{
|
|
2768
|
+
"if": {
|
|
2769
|
+
"required": [
|
|
2770
|
+
"checksum"
|
|
2771
|
+
]
|
|
2772
|
+
},
|
|
2773
|
+
"then": {
|
|
2774
|
+
"required": [
|
|
2775
|
+
"algorithm"
|
|
2776
|
+
]
|
|
2777
|
+
}
|
|
2778
|
+
}
|
|
2779
|
+
]
|
|
2428
2780
|
}
|
|
2429
2781
|
}
|
|
2430
2782
|
}
|