@mitre/hdf-schema 3.7.2 → 3.8.0-next.42533588944.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/go/hdf.go +1470 -1276
- package/dist/helpers.d.ts +7 -5
- package/dist/helpers.js +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +28 -28
- package/dist/schemas/hdf-amendments.schema.json +562 -112
- package/dist/schemas/hdf-baseline.schema.json +570 -118
- package/dist/schemas/hdf-comparison.schema.json +997 -242
- package/dist/schemas/hdf-evidence-package.schema.json +566 -115
- package/dist/schemas/hdf-plan.schema.json +568 -118
- package/dist/schemas/hdf-requirement-change-event.schema.json +658 -211
- package/dist/schemas/hdf-results.schema.json +644 -197
- package/dist/schemas/hdf-system.schema.json +604 -147
- package/dist/ts/hdf.d.ts +284 -56
- package/dist/ts/hdf.js +24 -9
- package/dist/ts/hdf.ts +285 -50
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.
|
|
3
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.8.0",
|
|
4
4
|
"title": "HDF System",
|
|
5
5
|
"description": "Describes a system's authorization boundary, components, and interconnections. Maps to OSCAL SSP system-characteristics and FedRAMP system inventory.",
|
|
6
6
|
"type": "object",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"externalReferences": {
|
|
14
14
|
"type": "array",
|
|
15
15
|
"items": {
|
|
16
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
16
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
17
17
|
},
|
|
18
18
|
"description": "Optional references to external artifacts describing this system's threat environment or context (CTI/STIX, BOMs, advisories, or any URI-addressable artifact). Inert context; see External_Reference."
|
|
19
19
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"description": "Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of file location. Optional in casual use, expected in production documents."
|
|
24
24
|
},
|
|
25
25
|
"owner": {
|
|
26
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
26
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
27
27
|
"description": "Team or individual responsible for this system's authorization and compliance. Maps to OSCAL responsible-party with role 'system-owner'."
|
|
28
28
|
},
|
|
29
29
|
"name": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"description": "Description of the system's purpose and mission."
|
|
45
45
|
},
|
|
46
46
|
"authorizationStatus": {
|
|
47
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
47
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Authorization_Status",
|
|
48
48
|
"description": "Current Authorization to Operate (ATO) status."
|
|
49
49
|
},
|
|
50
50
|
"authorizationDate": {
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"description": "Date the current authorization status was granted. ISO 8601 format."
|
|
54
54
|
},
|
|
55
55
|
"categorizationLevel": {
|
|
56
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
56
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Categorization_Level",
|
|
57
57
|
"description": "FIPS 199 security categorization (impact level)."
|
|
58
58
|
},
|
|
59
59
|
"boundaryDescription": {
|
|
@@ -64,28 +64,28 @@
|
|
|
64
64
|
"type": "array",
|
|
65
65
|
"minItems": 1,
|
|
66
66
|
"items": {
|
|
67
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
67
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0#/$defs/Component"
|
|
68
68
|
},
|
|
69
69
|
"description": "System components within the authorization boundary. Uses the full polymorphic Component type with stable identity (componentId), external references, and generalized BOM attachment (boms[])."
|
|
70
70
|
},
|
|
71
71
|
"controlDesignations": {
|
|
72
72
|
"type": "array",
|
|
73
73
|
"items": {
|
|
74
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
74
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Control_Designation"
|
|
75
75
|
},
|
|
76
76
|
"description": "Declares which controls are common, hybrid, or system-specific, and which component provides them. Maps to NIST SP 800-53 control designations and OSCAL leveraged-authorizations."
|
|
77
77
|
},
|
|
78
78
|
"dataFlows": {
|
|
79
79
|
"type": "array",
|
|
80
80
|
"items": {
|
|
81
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
81
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0#/$defs/Data_Flow"
|
|
82
82
|
},
|
|
83
83
|
"description": "Inter-component data flows describing how components communicate. Supports local, cross-system, and external flows. Replaces the interconnections[] field."
|
|
84
84
|
},
|
|
85
85
|
"boms": {
|
|
86
86
|
"type": "array",
|
|
87
87
|
"items": {
|
|
88
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
88
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
|
|
89
89
|
},
|
|
90
90
|
"description": "System-scoped Bills of Materials whose subject is the authorization boundary rather than a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM). Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See primitives/bom.schema.json."
|
|
91
91
|
},
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"description": "Optional key-value labels for grouping and querying systems."
|
|
98
98
|
},
|
|
99
99
|
"integrity": {
|
|
100
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
100
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Integrity",
|
|
101
101
|
"description": "Cryptographic integrity information for verifying this system document has not been tampered with."
|
|
102
102
|
},
|
|
103
103
|
"version": {
|
|
@@ -105,8 +105,12 @@
|
|
|
105
105
|
"description": "Version of this system document."
|
|
106
106
|
},
|
|
107
107
|
"generator": {
|
|
108
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
108
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Generator",
|
|
109
109
|
"description": "Information about the tool that generated this system document."
|
|
110
|
+
},
|
|
111
|
+
"extensions": {
|
|
112
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0#/$defs/Extensions",
|
|
113
|
+
"description": "Producer data outside the HDF model, and the pre-converted source artifact(s) this system document was converted from."
|
|
110
114
|
}
|
|
111
115
|
},
|
|
112
116
|
"examples": [
|
|
@@ -158,16 +162,29 @@
|
|
|
158
162
|
}
|
|
159
163
|
],
|
|
160
164
|
"$defs": {
|
|
161
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
165
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0": {
|
|
162
166
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
163
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
167
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0",
|
|
164
168
|
"title": "HDF Common Primitives",
|
|
165
169
|
"description": "Shared building blocks used by hdf-results and hdf-baseline schemas.",
|
|
166
170
|
"$defs": {
|
|
171
|
+
"External_Reference_Encoding": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"enum": [
|
|
174
|
+
"utf-8",
|
|
175
|
+
"base64"
|
|
176
|
+
],
|
|
177
|
+
"description": "How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not valid UTF-8 text.",
|
|
178
|
+
"title": "External Reference Encoding",
|
|
179
|
+
"examples": [
|
|
180
|
+
"base64"
|
|
181
|
+
],
|
|
182
|
+
"$comment": "Examples, in order: 1) a binary artifact, embedded base64-encoded."
|
|
183
|
+
},
|
|
167
184
|
"External_Reference": {
|
|
168
185
|
"type": "object",
|
|
169
186
|
"title": "External Reference",
|
|
170
|
-
"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.",
|
|
187
|
+
"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.",
|
|
171
188
|
"required": [
|
|
172
189
|
"sourceName"
|
|
173
190
|
],
|
|
@@ -186,6 +203,42 @@
|
|
|
186
203
|
"required": [
|
|
187
204
|
"description"
|
|
188
205
|
]
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"required": [
|
|
209
|
+
"content"
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"required": [
|
|
214
|
+
"document"
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
"allOf": [
|
|
219
|
+
{
|
|
220
|
+
"if": {
|
|
221
|
+
"required": [
|
|
222
|
+
"content"
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
"then": {
|
|
226
|
+
"required": [
|
|
227
|
+
"encoding"
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"if": {
|
|
233
|
+
"required": [
|
|
234
|
+
"encoding"
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
"then": {
|
|
238
|
+
"required": [
|
|
239
|
+
"content"
|
|
240
|
+
]
|
|
241
|
+
}
|
|
189
242
|
}
|
|
190
243
|
],
|
|
191
244
|
"properties": {
|
|
@@ -201,7 +254,7 @@
|
|
|
201
254
|
"href": {
|
|
202
255
|
"type": "string",
|
|
203
256
|
"format": "uri-reference",
|
|
204
|
-
"description": "Location of the artifact. `uri-reference` (not `uri`) so a bare internal `#fragment`/`#uuid` reference is expressible alongside absolute URLs.
|
|
257
|
+
"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."
|
|
205
258
|
},
|
|
206
259
|
"description": {
|
|
207
260
|
"type": "string",
|
|
@@ -213,11 +266,11 @@
|
|
|
213
266
|
},
|
|
214
267
|
"mediaType": {
|
|
215
268
|
"type": "string",
|
|
216
|
-
"description": "IANA media type of the
|
|
269
|
+
"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`."
|
|
217
270
|
},
|
|
218
271
|
"checksum": {
|
|
219
272
|
"$ref": "#/$defs/Checksum",
|
|
220
|
-
"description": "Integrity hash of the
|
|
273
|
+
"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."
|
|
221
274
|
},
|
|
222
275
|
"addedBy": {
|
|
223
276
|
"$ref": "#/$defs/Identity",
|
|
@@ -236,11 +289,19 @@
|
|
|
236
289
|
"document": {
|
|
237
290
|
"type": "object",
|
|
238
291
|
"additionalProperties": true,
|
|
239
|
-
"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)."
|
|
292
|
+
"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)."
|
|
293
|
+
},
|
|
294
|
+
"content": {
|
|
295
|
+
"type": "string",
|
|
296
|
+
"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."
|
|
297
|
+
},
|
|
298
|
+
"encoding": {
|
|
299
|
+
"$ref": "#/$defs/External_Reference_Encoding",
|
|
300
|
+
"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."
|
|
240
301
|
}
|
|
241
302
|
},
|
|
242
303
|
"unevaluatedProperties": false,
|
|
243
|
-
"$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.",
|
|
304
|
+
"$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.",
|
|
244
305
|
"examples": [
|
|
245
306
|
{
|
|
246
307
|
"sourceName": "cve",
|
|
@@ -286,6 +347,28 @@
|
|
|
286
347
|
}
|
|
287
348
|
]
|
|
288
349
|
}
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"sourceName": "openscap",
|
|
353
|
+
"rel": "raw-source",
|
|
354
|
+
"mediaType": "application/xml",
|
|
355
|
+
"encoding": "utf-8",
|
|
356
|
+
"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>",
|
|
357
|
+
"checksum": {
|
|
358
|
+
"algorithm": "sha256",
|
|
359
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"sourceName": "fortify",
|
|
364
|
+
"rel": "raw-source",
|
|
365
|
+
"mediaType": "application/zip",
|
|
366
|
+
"encoding": "base64",
|
|
367
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
368
|
+
"checksum": {
|
|
369
|
+
"algorithm": "sha256",
|
|
370
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
371
|
+
}
|
|
289
372
|
}
|
|
290
373
|
]
|
|
291
374
|
},
|
|
@@ -297,7 +380,7 @@
|
|
|
297
380
|
"sha512",
|
|
298
381
|
"blake3"
|
|
299
382
|
],
|
|
300
|
-
"description": "
|
|
383
|
+
"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.",
|
|
301
384
|
"title": "Hash Algorithm"
|
|
302
385
|
},
|
|
303
386
|
"Requirement_Group": {
|
|
@@ -455,7 +538,33 @@
|
|
|
455
538
|
}
|
|
456
539
|
],
|
|
457
540
|
"description": "A reference to an external document.",
|
|
458
|
-
"title": "Reference"
|
|
541
|
+
"title": "Reference",
|
|
542
|
+
"unevaluatedProperties": false,
|
|
543
|
+
"$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.",
|
|
544
|
+
"examples": [
|
|
545
|
+
{
|
|
546
|
+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2021-44228"
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"ref": "NIST SP 800-53 Rev 5, AC-6"
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"ref": "CIS Benchmark for RHEL 9, 1.1.1",
|
|
553
|
+
"url": "https://www.cisecurity.org/benchmark/red_hat_linux"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"ref": [
|
|
557
|
+
{
|
|
558
|
+
"identifier": "2921",
|
|
559
|
+
"publisher": "DISA",
|
|
560
|
+
"type": "DPMS Target"
|
|
561
|
+
}
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"uri": "https://attack.mitre.org/techniques/T1059/"
|
|
566
|
+
}
|
|
567
|
+
]
|
|
459
568
|
},
|
|
460
569
|
"Source_Location": {
|
|
461
570
|
"type": "object",
|
|
@@ -973,6 +1082,10 @@
|
|
|
973
1082
|
"type": "string",
|
|
974
1083
|
"description": "The title - should be human readable."
|
|
975
1084
|
},
|
|
1085
|
+
"description": {
|
|
1086
|
+
"type": "string",
|
|
1087
|
+
"description": "Prose description of the baseline, more detailed than summary. Carried verbatim, like every HDF prose field."
|
|
1088
|
+
},
|
|
976
1089
|
"maintainer": {
|
|
977
1090
|
"type": "string",
|
|
978
1091
|
"description": "The maintainer(s)."
|
|
@@ -1051,7 +1164,7 @@
|
|
|
1051
1164
|
},
|
|
1052
1165
|
"id": {
|
|
1053
1166
|
"type": "string",
|
|
1054
|
-
"description": "The requirement identifier. Example: 'SV-238196'."
|
|
1167
|
+
"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."
|
|
1055
1168
|
},
|
|
1056
1169
|
"title": {
|
|
1057
1170
|
"type": "string",
|
|
@@ -1269,9 +1382,9 @@
|
|
|
1269
1382
|
}
|
|
1270
1383
|
}
|
|
1271
1384
|
},
|
|
1272
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1385
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0": {
|
|
1273
1386
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1274
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1387
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0",
|
|
1275
1388
|
"title": "HDF System Primitives",
|
|
1276
1389
|
"description": "Types for describing system architecture, authorization boundaries, and components.",
|
|
1277
1390
|
"$defs": {
|
|
@@ -1322,7 +1435,7 @@
|
|
|
1322
1435
|
"description": "Rationale for why this override is needed."
|
|
1323
1436
|
},
|
|
1324
1437
|
"approvedBy": {
|
|
1325
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1438
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
1326
1439
|
"description": "Identity of the person or system that approved this override."
|
|
1327
1440
|
}
|
|
1328
1441
|
},
|
|
@@ -1404,9 +1517,9 @@
|
|
|
1404
1517
|
}
|
|
1405
1518
|
}
|
|
1406
1519
|
},
|
|
1407
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1520
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0": {
|
|
1408
1521
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
1409
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.
|
|
1522
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/component/v3.8.0",
|
|
1410
1523
|
"title": "HDF Component Primitives",
|
|
1411
1524
|
"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).",
|
|
1412
1525
|
"$defs": {
|
|
@@ -1452,7 +1565,7 @@
|
|
|
1452
1565
|
"description": "Description of this component's role or purpose."
|
|
1453
1566
|
},
|
|
1454
1567
|
"owner": {
|
|
1455
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1568
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
1456
1569
|
"description": "Team or individual responsible for this component. Enables per-component ownership when different teams manage different parts of a system."
|
|
1457
1570
|
},
|
|
1458
1571
|
"externalIds": {
|
|
@@ -1472,14 +1585,14 @@
|
|
|
1472
1585
|
"boms": {
|
|
1473
1586
|
"type": "array",
|
|
1474
1587
|
"items": {
|
|
1475
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
1588
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0#/$defs/Bom"
|
|
1476
1589
|
},
|
|
1477
1590
|
"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."
|
|
1478
1591
|
},
|
|
1479
1592
|
"integrity": {
|
|
1480
1593
|
"type": "array",
|
|
1481
1594
|
"items": {
|
|
1482
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1595
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
1483
1596
|
},
|
|
1484
1597
|
"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."
|
|
1485
1598
|
},
|
|
@@ -1493,12 +1606,12 @@
|
|
|
1493
1606
|
"inputOverrides": {
|
|
1494
1607
|
"type": "array",
|
|
1495
1608
|
"items": {
|
|
1496
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1609
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Input_Override"
|
|
1497
1610
|
},
|
|
1498
1611
|
"description": "System-specific overrides for baseline input values."
|
|
1499
1612
|
},
|
|
1500
1613
|
"targetSelector": {
|
|
1501
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.
|
|
1614
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/system/v3.8.0#/$defs/Target_Selector",
|
|
1502
1615
|
"description": "Label selector to match targets belonging to this component during migration. Targets with matching labels are automatically included."
|
|
1503
1616
|
}
|
|
1504
1617
|
},
|
|
@@ -1781,7 +1894,7 @@
|
|
|
1781
1894
|
"const": "cloudAccount"
|
|
1782
1895
|
},
|
|
1783
1896
|
"provider": {
|
|
1784
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1897
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
1785
1898
|
"description": "Cloud provider."
|
|
1786
1899
|
},
|
|
1787
1900
|
"accountId": {
|
|
@@ -1820,7 +1933,7 @@
|
|
|
1820
1933
|
"const": "cloudResource"
|
|
1821
1934
|
},
|
|
1822
1935
|
"provider": {
|
|
1823
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
1936
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Cloud_Provider",
|
|
1824
1937
|
"description": "Cloud provider."
|
|
1825
1938
|
},
|
|
1826
1939
|
"resourceType": {
|
|
@@ -2119,9 +2232,9 @@
|
|
|
2119
2232
|
}
|
|
2120
2233
|
}
|
|
2121
2234
|
},
|
|
2122
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2235
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0": {
|
|
2123
2236
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2124
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.
|
|
2237
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/bom/v3.8.0",
|
|
2125
2238
|
"title": "HDF BOM Primitives",
|
|
2126
2239
|
"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.",
|
|
2127
2240
|
"$defs": {
|
|
@@ -2177,7 +2290,7 @@
|
|
|
2177
2290
|
"hashes": {
|
|
2178
2291
|
"type": "array",
|
|
2179
2292
|
"items": {
|
|
2180
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
2293
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum"
|
|
2181
2294
|
},
|
|
2182
2295
|
"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."
|
|
2183
2296
|
},
|
|
@@ -2373,6 +2486,25 @@
|
|
|
2373
2486
|
}
|
|
2374
2487
|
]
|
|
2375
2488
|
},
|
|
2489
|
+
"Modality": {
|
|
2490
|
+
"type": [
|
|
2491
|
+
"string",
|
|
2492
|
+
"array"
|
|
2493
|
+
],
|
|
2494
|
+
"items": {
|
|
2495
|
+
"type": "string"
|
|
2496
|
+
},
|
|
2497
|
+
"description": "A content modality such as text, image, audio, tabular or timeseries: one string, or a list when the content spans several.",
|
|
2498
|
+
"title": "Modality",
|
|
2499
|
+
"examples": [
|
|
2500
|
+
"text",
|
|
2501
|
+
[
|
|
2502
|
+
"text",
|
|
2503
|
+
"image"
|
|
2504
|
+
]
|
|
2505
|
+
],
|
|
2506
|
+
"$comment": "Examples, in order: 1) a single modality; 2) multimodal content listed in full."
|
|
2507
|
+
},
|
|
2376
2508
|
"AI_Model_Extension": {
|
|
2377
2509
|
"type": "object",
|
|
2378
2510
|
"additionalProperties": true,
|
|
@@ -2474,13 +2606,7 @@
|
|
|
2474
2606
|
"description": "Input/output data types. Examples: string, byte[], float32, image."
|
|
2475
2607
|
},
|
|
2476
2608
|
"modality": {
|
|
2477
|
-
"
|
|
2478
|
-
"string",
|
|
2479
|
-
"array"
|
|
2480
|
-
],
|
|
2481
|
-
"items": {
|
|
2482
|
-
"type": "string"
|
|
2483
|
-
},
|
|
2609
|
+
"$ref": "#/$defs/Modality",
|
|
2484
2610
|
"description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
|
|
2485
2611
|
},
|
|
2486
2612
|
"contextLength": {
|
|
@@ -2520,13 +2646,7 @@
|
|
|
2520
2646
|
"description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
|
|
2521
2647
|
},
|
|
2522
2648
|
"modality": {
|
|
2523
|
-
"
|
|
2524
|
-
"string",
|
|
2525
|
-
"array"
|
|
2526
|
-
],
|
|
2527
|
-
"items": {
|
|
2528
|
-
"type": "string"
|
|
2529
|
-
},
|
|
2649
|
+
"$ref": "#/$defs/Modality",
|
|
2530
2650
|
"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."
|
|
2531
2651
|
},
|
|
2532
2652
|
"provenance": {
|
|
@@ -2589,9 +2709,9 @@
|
|
|
2589
2709
|
}
|
|
2590
2710
|
}
|
|
2591
2711
|
},
|
|
2592
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
2712
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0": {
|
|
2593
2713
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2594
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.
|
|
2714
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/data-flow/v3.8.0",
|
|
2595
2715
|
"title": "HDF Data Flow Primitives",
|
|
2596
2716
|
"description": "Types for describing data flows between components within a system and across system boundaries. Data flows model network connections, API calls, database queries, and other inter-component communication.",
|
|
2597
2717
|
"$defs": {
|
|
@@ -2748,12 +2868,183 @@
|
|
|
2748
2868
|
}
|
|
2749
2869
|
}
|
|
2750
2870
|
},
|
|
2751
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2871
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0": {
|
|
2752
2872
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
2753
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.
|
|
2873
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/extensions/v3.8.0",
|
|
2754
2874
|
"title": "HDF Extension Primitives",
|
|
2755
|
-
"description": "Extension types for waivers, attestations, generators, and
|
|
2875
|
+
"description": "Extension types for waivers, attestations, generators, integrity, and the document-level extensions carrier.",
|
|
2756
2876
|
"$defs": {
|
|
2877
|
+
"Raw_Source_Artifact": {
|
|
2878
|
+
"allOf": [
|
|
2879
|
+
{
|
|
2880
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2881
|
+
},
|
|
2882
|
+
{
|
|
2883
|
+
"not": {
|
|
2884
|
+
"required": [
|
|
2885
|
+
"document"
|
|
2886
|
+
]
|
|
2887
|
+
}
|
|
2888
|
+
},
|
|
2889
|
+
{
|
|
2890
|
+
"if": {
|
|
2891
|
+
"required": [
|
|
2892
|
+
"content"
|
|
2893
|
+
]
|
|
2894
|
+
},
|
|
2895
|
+
"then": {
|
|
2896
|
+
"required": [
|
|
2897
|
+
"encoding",
|
|
2898
|
+
"mediaType"
|
|
2899
|
+
]
|
|
2900
|
+
}
|
|
2901
|
+
}
|
|
2902
|
+
],
|
|
2903
|
+
"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`.",
|
|
2904
|
+
"$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.",
|
|
2905
|
+
"examples": [
|
|
2906
|
+
{
|
|
2907
|
+
"sourceName": "grype",
|
|
2908
|
+
"rel": "raw-source",
|
|
2909
|
+
"mediaType": "application/json",
|
|
2910
|
+
"encoding": "utf-8",
|
|
2911
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
2912
|
+
"checksum": {
|
|
2913
|
+
"algorithm": "sha256",
|
|
2914
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
2915
|
+
}
|
|
2916
|
+
},
|
|
2917
|
+
{
|
|
2918
|
+
"sourceName": "openscap",
|
|
2919
|
+
"rel": "raw-source",
|
|
2920
|
+
"mediaType": "application/xml",
|
|
2921
|
+
"encoding": "utf-8",
|
|
2922
|
+
"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>",
|
|
2923
|
+
"checksum": {
|
|
2924
|
+
"algorithm": "sha256",
|
|
2925
|
+
"value": "713b3ee32af5c14ac93e519b5025d760983607143dba3a0438f68667923beda1"
|
|
2926
|
+
}
|
|
2927
|
+
},
|
|
2928
|
+
{
|
|
2929
|
+
"sourceName": "prisma",
|
|
2930
|
+
"rel": "raw-source",
|
|
2931
|
+
"mediaType": "text/csv",
|
|
2932
|
+
"encoding": "utf-8",
|
|
2933
|
+
"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",
|
|
2934
|
+
"checksum": {
|
|
2935
|
+
"algorithm": "sha256",
|
|
2936
|
+
"value": "c5a8077ee069e18fd6687c6b1c4f72fdbc95b7af77d954b6fb5e522cd783aa83"
|
|
2937
|
+
}
|
|
2938
|
+
},
|
|
2939
|
+
{
|
|
2940
|
+
"sourceName": "fortify",
|
|
2941
|
+
"rel": "raw-source",
|
|
2942
|
+
"mediaType": "application/zip",
|
|
2943
|
+
"encoding": "base64",
|
|
2944
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
2945
|
+
"checksum": {
|
|
2946
|
+
"algorithm": "sha256",
|
|
2947
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
2948
|
+
}
|
|
2949
|
+
},
|
|
2950
|
+
{
|
|
2951
|
+
"sourceName": "nessus",
|
|
2952
|
+
"rel": "raw-source",
|
|
2953
|
+
"href": "https://scans.example.gov/exports/2026-09-27-prod-web.nessus",
|
|
2954
|
+
"mediaType": "application/xml",
|
|
2955
|
+
"checksum": {
|
|
2956
|
+
"algorithm": "sha256",
|
|
2957
|
+
"value": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
|
|
2958
|
+
}
|
|
2959
|
+
}
|
|
2960
|
+
]
|
|
2961
|
+
},
|
|
2962
|
+
"Extensions": {
|
|
2963
|
+
"type": "object",
|
|
2964
|
+
"additionalProperties": false,
|
|
2965
|
+
"properties": {
|
|
2966
|
+
"passthrough": {
|
|
2967
|
+
"type": "object",
|
|
2968
|
+
"additionalProperties": true,
|
|
2969
|
+
"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.",
|
|
2970
|
+
"examples": [
|
|
2971
|
+
{
|
|
2972
|
+
"auxiliary_data": [
|
|
2973
|
+
{
|
|
2974
|
+
"name": "Scoutsuite",
|
|
2975
|
+
"data": {
|
|
2976
|
+
"last_run": {
|
|
2977
|
+
"ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group"
|
|
2978
|
+
}
|
|
2979
|
+
}
|
|
2980
|
+
}
|
|
2981
|
+
]
|
|
2982
|
+
},
|
|
2983
|
+
{
|
|
2984
|
+
"audit": {
|
|
2985
|
+
"runId": "r-123"
|
|
2986
|
+
}
|
|
2987
|
+
}
|
|
2988
|
+
],
|
|
2989
|
+
"$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."
|
|
2990
|
+
},
|
|
2991
|
+
"rawSourceArtifacts": {
|
|
2992
|
+
"type": "array",
|
|
2993
|
+
"items": {
|
|
2994
|
+
"$ref": "#/$defs/Raw_Source_Artifact"
|
|
2995
|
+
},
|
|
2996
|
+
"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."
|
|
2997
|
+
}
|
|
2998
|
+
},
|
|
2999
|
+
"title": "Extensions",
|
|
3000
|
+
"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.",
|
|
3001
|
+
"$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.",
|
|
3002
|
+
"examples": [
|
|
3003
|
+
{
|
|
3004
|
+
"passthrough": {
|
|
3005
|
+
"auxiliary_data": [
|
|
3006
|
+
{
|
|
3007
|
+
"name": "Grype",
|
|
3008
|
+
"data": {
|
|
3009
|
+
"descriptor": {
|
|
3010
|
+
"name": "grype",
|
|
3011
|
+
"version": "0.74.0"
|
|
3012
|
+
}
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
]
|
|
3016
|
+
},
|
|
3017
|
+
"rawSourceArtifacts": [
|
|
3018
|
+
{
|
|
3019
|
+
"sourceName": "grype",
|
|
3020
|
+
"rel": "raw-source",
|
|
3021
|
+
"mediaType": "application/json",
|
|
3022
|
+
"encoding": "utf-8",
|
|
3023
|
+
"content": "{\"matches\":[{\"vulnerability\":{\"id\":\"CVE-2021-36159\",\"severity\":\"Critical\"}}]}",
|
|
3024
|
+
"checksum": {
|
|
3025
|
+
"algorithm": "sha256",
|
|
3026
|
+
"value": "4b33be77f104d6ee323ff2c945d1c3f9a151606b2d263ea7932716844c75920c"
|
|
3027
|
+
}
|
|
3028
|
+
}
|
|
3029
|
+
]
|
|
3030
|
+
},
|
|
3031
|
+
{
|
|
3032
|
+
"rawSourceArtifacts": [
|
|
3033
|
+
{
|
|
3034
|
+
"sourceName": "fortify",
|
|
3035
|
+
"rel": "raw-source",
|
|
3036
|
+
"mediaType": "application/zip",
|
|
3037
|
+
"encoding": "base64",
|
|
3038
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbLOxr8jNUShLLSrOzM+zVTLUM1Cyt7NxC3Px0bcDAFBLAQIUAxQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAAAAAAAAAAACAAQAAAABhdWRpdC5mdmRsUEsFBgAAAAABAAEAOAAAAEYAAAAAAA==",
|
|
3039
|
+
"checksum": {
|
|
3040
|
+
"algorithm": "sha256",
|
|
3041
|
+
"value": "c7e4cefceecb83511ae6174c7d22584061671dee6dc5f27243503b47532a66b1"
|
|
3042
|
+
}
|
|
3043
|
+
}
|
|
3044
|
+
]
|
|
3045
|
+
}
|
|
3046
|
+
]
|
|
3047
|
+
},
|
|
2757
3048
|
"Status_Override": {
|
|
2758
3049
|
"type": "object",
|
|
2759
3050
|
"unevaluatedProperties": false,
|
|
@@ -2764,44 +3055,99 @@
|
|
|
2764
3055
|
"appliedAt",
|
|
2765
3056
|
"expiresAt"
|
|
2766
3057
|
],
|
|
2767
|
-
"
|
|
3058
|
+
"allOf": [
|
|
2768
3059
|
{
|
|
2769
|
-
"
|
|
2770
|
-
"
|
|
2771
|
-
|
|
3060
|
+
"if": {
|
|
3061
|
+
"properties": {
|
|
3062
|
+
"type": {
|
|
3063
|
+
"enum": [
|
|
3064
|
+
"operationalRequirement"
|
|
3065
|
+
]
|
|
3066
|
+
}
|
|
3067
|
+
},
|
|
3068
|
+
"required": [
|
|
3069
|
+
"type"
|
|
3070
|
+
]
|
|
3071
|
+
},
|
|
3072
|
+
"then": {
|
|
3073
|
+
"not": {
|
|
3074
|
+
"anyOf": [
|
|
3075
|
+
{
|
|
3076
|
+
"required": [
|
|
3077
|
+
"status"
|
|
3078
|
+
]
|
|
3079
|
+
},
|
|
3080
|
+
{
|
|
3081
|
+
"required": [
|
|
3082
|
+
"impact"
|
|
3083
|
+
]
|
|
3084
|
+
}
|
|
3085
|
+
]
|
|
3086
|
+
}
|
|
3087
|
+
},
|
|
3088
|
+
"else": {
|
|
3089
|
+
"anyOf": [
|
|
3090
|
+
{
|
|
3091
|
+
"required": [
|
|
3092
|
+
"status"
|
|
3093
|
+
]
|
|
3094
|
+
},
|
|
3095
|
+
{
|
|
3096
|
+
"required": [
|
|
3097
|
+
"impact"
|
|
3098
|
+
]
|
|
3099
|
+
}
|
|
3100
|
+
]
|
|
3101
|
+
}
|
|
2772
3102
|
},
|
|
2773
3103
|
{
|
|
2774
|
-
"
|
|
2775
|
-
"
|
|
2776
|
-
|
|
3104
|
+
"if": {
|
|
3105
|
+
"properties": {
|
|
3106
|
+
"type": {
|
|
3107
|
+
"enum": [
|
|
3108
|
+
"riskAdjustment"
|
|
3109
|
+
]
|
|
3110
|
+
}
|
|
3111
|
+
},
|
|
3112
|
+
"required": [
|
|
3113
|
+
"type"
|
|
3114
|
+
]
|
|
3115
|
+
},
|
|
3116
|
+
"then": {
|
|
3117
|
+
"not": {
|
|
3118
|
+
"required": [
|
|
3119
|
+
"status"
|
|
3120
|
+
]
|
|
3121
|
+
}
|
|
3122
|
+
}
|
|
2777
3123
|
}
|
|
2778
3124
|
],
|
|
2779
3125
|
"properties": {
|
|
2780
3126
|
"externalReferences": {
|
|
2781
3127
|
"type": "array",
|
|
2782
3128
|
"items": {
|
|
2783
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3129
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
2784
3130
|
},
|
|
2785
3131
|
"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."
|
|
2786
3132
|
},
|
|
2787
3133
|
"type": {
|
|
2788
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3134
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Override_Type",
|
|
2789
3135
|
"description": "The type of override applied to this requirement."
|
|
2790
3136
|
},
|
|
2791
3137
|
"status": {
|
|
2792
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
2793
|
-
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
3138
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
3139
|
+
"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."
|
|
2794
3140
|
},
|
|
2795
3141
|
"impact": {
|
|
2796
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
2797
|
-
"description": "Override to the requirement's impact score.
|
|
3142
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Impact_Override",
|
|
3143
|
+
"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."
|
|
2798
3144
|
},
|
|
2799
3145
|
"reason": {
|
|
2800
3146
|
"type": "string",
|
|
2801
3147
|
"description": "Explanation for why this override was applied."
|
|
2802
3148
|
},
|
|
2803
3149
|
"appliedBy": {
|
|
2804
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3150
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2805
3151
|
"description": "Identity of who applied this override. For simple cases, use type 'simple' with just an identifier."
|
|
2806
3152
|
},
|
|
2807
3153
|
"appliedAt": {
|
|
@@ -2815,31 +3161,31 @@
|
|
|
2815
3161
|
"description": "Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no permanent overrides allowed. ISO 8601 format."
|
|
2816
3162
|
},
|
|
2817
3163
|
"signature": {
|
|
2818
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3164
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2819
3165
|
"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."
|
|
2820
3166
|
},
|
|
2821
3167
|
"evidence": {
|
|
2822
3168
|
"type": "array",
|
|
2823
3169
|
"items": {
|
|
2824
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3170
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
2825
3171
|
},
|
|
2826
3172
|
"description": "Supporting evidence for this override, such as screenshots demonstrating manual verification for attestations."
|
|
2827
3173
|
},
|
|
2828
3174
|
"previousChecksum": {
|
|
2829
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3175
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
2830
3176
|
"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."
|
|
2831
3177
|
},
|
|
2832
3178
|
"cvss": {
|
|
2833
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3179
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
2834
3180
|
"$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.",
|
|
2835
3181
|
"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."
|
|
2836
3182
|
},
|
|
2837
3183
|
"justification": {
|
|
2838
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3184
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0#/$defs/Justification",
|
|
2839
3185
|
"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."
|
|
2840
3186
|
}
|
|
2841
3187
|
},
|
|
2842
|
-
"$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.",
|
|
3188
|
+
"$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.",
|
|
2843
3189
|
"examples": [
|
|
2844
3190
|
{
|
|
2845
3191
|
"type": "waiver",
|
|
@@ -2939,9 +3285,19 @@
|
|
|
2939
3285
|
}
|
|
2940
3286
|
}
|
|
2941
3287
|
]
|
|
3288
|
+
},
|
|
3289
|
+
{
|
|
3290
|
+
"type": "operationalRequirement",
|
|
3291
|
+
"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.",
|
|
3292
|
+
"appliedBy": {
|
|
3293
|
+
"type": "email",
|
|
3294
|
+
"identifier": "system-owner@agency.gov"
|
|
3295
|
+
},
|
|
3296
|
+
"appliedAt": "2026-01-20T10:00:00Z",
|
|
3297
|
+
"expiresAt": "2099-12-31T00:00:00Z"
|
|
2942
3298
|
}
|
|
2943
3299
|
],
|
|
2944
|
-
"description": "An intentional change to a requirement's compliance status and/or impact score.
|
|
3300
|
+
"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.",
|
|
2945
3301
|
"title": "Status Override"
|
|
2946
3302
|
},
|
|
2947
3303
|
"POAM": {
|
|
@@ -2971,7 +3327,7 @@
|
|
|
2971
3327
|
"description": "Detailed explanation of the plan, including what actions will be taken."
|
|
2972
3328
|
},
|
|
2973
3329
|
"appliedBy": {
|
|
2974
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3330
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
2975
3331
|
"description": "Identity of who created this POA&M. For simple cases, use type 'simple' with just an identifier."
|
|
2976
3332
|
},
|
|
2977
3333
|
"appliedAt": {
|
|
@@ -2987,23 +3343,23 @@
|
|
|
2987
3343
|
"milestones": {
|
|
2988
3344
|
"type": "array",
|
|
2989
3345
|
"items": {
|
|
2990
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3346
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
2991
3347
|
},
|
|
2992
3348
|
"description": "Optional array of milestones tracking progress toward completion."
|
|
2993
3349
|
},
|
|
2994
3350
|
"signature": {
|
|
2995
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3351
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
2996
3352
|
"description": "Optional digital signature for enhanced trust and non-repudiation."
|
|
2997
3353
|
},
|
|
2998
3354
|
"evidence": {
|
|
2999
3355
|
"type": "array",
|
|
3000
3356
|
"items": {
|
|
3001
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3357
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3002
3358
|
},
|
|
3003
3359
|
"description": "Supporting evidence for this POA&M, such as documentation of compensating controls or mitigation implementation."
|
|
3004
3360
|
},
|
|
3005
3361
|
"previousChecksum": {
|
|
3006
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3362
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3007
3363
|
"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."
|
|
3008
3364
|
}
|
|
3009
3365
|
},
|
|
@@ -3146,17 +3502,9 @@
|
|
|
3146
3502
|
"Integrity": {
|
|
3147
3503
|
"type": "object",
|
|
3148
3504
|
"unevaluatedProperties": false,
|
|
3149
|
-
"dependentRequired": {
|
|
3150
|
-
"algorithm": [
|
|
3151
|
-
"checksum"
|
|
3152
|
-
],
|
|
3153
|
-
"checksum": [
|
|
3154
|
-
"algorithm"
|
|
3155
|
-
]
|
|
3156
|
-
},
|
|
3157
3505
|
"properties": {
|
|
3158
3506
|
"algorithm": {
|
|
3159
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3507
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Hash_Algorithm",
|
|
3160
3508
|
"description": "The hash algorithm used for the checksum."
|
|
3161
3509
|
},
|
|
3162
3510
|
"checksum": {
|
|
@@ -3185,13 +3533,39 @@
|
|
|
3185
3533
|
}
|
|
3186
3534
|
],
|
|
3187
3535
|
"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.",
|
|
3188
|
-
"title": "Integrity"
|
|
3536
|
+
"title": "Integrity",
|
|
3537
|
+
"allOf": [
|
|
3538
|
+
{
|
|
3539
|
+
"if": {
|
|
3540
|
+
"required": [
|
|
3541
|
+
"algorithm"
|
|
3542
|
+
]
|
|
3543
|
+
},
|
|
3544
|
+
"then": {
|
|
3545
|
+
"required": [
|
|
3546
|
+
"checksum"
|
|
3547
|
+
]
|
|
3548
|
+
}
|
|
3549
|
+
},
|
|
3550
|
+
{
|
|
3551
|
+
"if": {
|
|
3552
|
+
"required": [
|
|
3553
|
+
"checksum"
|
|
3554
|
+
]
|
|
3555
|
+
},
|
|
3556
|
+
"then": {
|
|
3557
|
+
"required": [
|
|
3558
|
+
"algorithm"
|
|
3559
|
+
]
|
|
3560
|
+
}
|
|
3561
|
+
}
|
|
3562
|
+
]
|
|
3189
3563
|
}
|
|
3190
3564
|
}
|
|
3191
3565
|
},
|
|
3192
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3566
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0": {
|
|
3193
3567
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3194
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.
|
|
3568
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/amendments/v3.8.0",
|
|
3195
3569
|
"title": "HDF Amendment Primitives",
|
|
3196
3570
|
"description": "Types for waivers, attestations, and POA&Ms that modify requirement compliance status.",
|
|
3197
3571
|
"$defs": {
|
|
@@ -3206,7 +3580,7 @@
|
|
|
3206
3580
|
"riskAdjustment",
|
|
3207
3581
|
"operationalRequirement"
|
|
3208
3582
|
],
|
|
3209
|
-
"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.",
|
|
3583
|
+
"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.",
|
|
3210
3584
|
"title": "Override Type"
|
|
3211
3585
|
},
|
|
3212
3586
|
"Justification": {
|
|
@@ -3246,7 +3620,7 @@
|
|
|
3246
3620
|
},
|
|
3247
3621
|
"Standalone_Override": {
|
|
3248
3622
|
"type": "object",
|
|
3249
|
-
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation
|
|
3623
|
+
"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).",
|
|
3250
3624
|
"unevaluatedProperties": false,
|
|
3251
3625
|
"required": [
|
|
3252
3626
|
"type",
|
|
@@ -3256,53 +3630,78 @@
|
|
|
3256
3630
|
"appliedAt",
|
|
3257
3631
|
"expiresAt"
|
|
3258
3632
|
],
|
|
3259
|
-
"
|
|
3260
|
-
|
|
3261
|
-
"
|
|
3262
|
-
"
|
|
3263
|
-
"
|
|
3633
|
+
"allOf": [
|
|
3634
|
+
{
|
|
3635
|
+
"if": {
|
|
3636
|
+
"properties": {
|
|
3637
|
+
"type": {
|
|
3638
|
+
"enum": [
|
|
3639
|
+
"operationalRequirement"
|
|
3640
|
+
]
|
|
3641
|
+
}
|
|
3642
|
+
},
|
|
3643
|
+
"required": [
|
|
3644
|
+
"type"
|
|
3645
|
+
]
|
|
3646
|
+
},
|
|
3647
|
+
"then": {
|
|
3648
|
+
"not": {
|
|
3649
|
+
"anyOf": [
|
|
3650
|
+
{
|
|
3651
|
+
"required": [
|
|
3652
|
+
"status"
|
|
3653
|
+
]
|
|
3654
|
+
},
|
|
3655
|
+
{
|
|
3656
|
+
"required": [
|
|
3657
|
+
"impact"
|
|
3658
|
+
]
|
|
3659
|
+
}
|
|
3660
|
+
]
|
|
3661
|
+
}
|
|
3662
|
+
},
|
|
3663
|
+
"else": {
|
|
3664
|
+
"anyOf": [
|
|
3665
|
+
{
|
|
3666
|
+
"required": [
|
|
3667
|
+
"status"
|
|
3668
|
+
]
|
|
3669
|
+
},
|
|
3670
|
+
{
|
|
3671
|
+
"required": [
|
|
3672
|
+
"impact"
|
|
3673
|
+
]
|
|
3674
|
+
}
|
|
3264
3675
|
]
|
|
3265
3676
|
}
|
|
3266
3677
|
},
|
|
3267
|
-
|
|
3268
|
-
"
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
"required": [
|
|
3276
|
-
"status"
|
|
3277
|
-
]
|
|
3678
|
+
{
|
|
3679
|
+
"if": {
|
|
3680
|
+
"properties": {
|
|
3681
|
+
"type": {
|
|
3682
|
+
"enum": [
|
|
3683
|
+
"riskAdjustment"
|
|
3684
|
+
]
|
|
3685
|
+
}
|
|
3278
3686
|
},
|
|
3279
|
-
{
|
|
3280
|
-
"required": [
|
|
3281
|
-
"impact"
|
|
3282
|
-
]
|
|
3283
|
-
}
|
|
3284
|
-
]
|
|
3285
|
-
}
|
|
3286
|
-
},
|
|
3287
|
-
"else": {
|
|
3288
|
-
"anyOf": [
|
|
3289
|
-
{
|
|
3290
3687
|
"required": [
|
|
3291
|
-
"
|
|
3688
|
+
"type"
|
|
3292
3689
|
]
|
|
3293
3690
|
},
|
|
3294
|
-
{
|
|
3295
|
-
"
|
|
3296
|
-
"
|
|
3297
|
-
|
|
3691
|
+
"then": {
|
|
3692
|
+
"not": {
|
|
3693
|
+
"required": [
|
|
3694
|
+
"status"
|
|
3695
|
+
]
|
|
3696
|
+
}
|
|
3298
3697
|
}
|
|
3299
|
-
|
|
3300
|
-
|
|
3698
|
+
}
|
|
3699
|
+
],
|
|
3301
3700
|
"properties": {
|
|
3302
3701
|
"externalReferences": {
|
|
3303
3702
|
"type": "array",
|
|
3304
3703
|
"items": {
|
|
3305
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3704
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference"
|
|
3306
3705
|
},
|
|
3307
3706
|
"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."
|
|
3308
3707
|
},
|
|
@@ -3313,15 +3712,15 @@
|
|
|
3313
3712
|
"requirementId": {
|
|
3314
3713
|
"type": "string",
|
|
3315
3714
|
"minLength": 1,
|
|
3316
|
-
"description": "The
|
|
3715
|
+
"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."
|
|
3317
3716
|
},
|
|
3318
3717
|
"baselineRef": {
|
|
3319
3718
|
"type": "string",
|
|
3320
3719
|
"description": "Name of the baseline containing the requirement. Required when the system has multiple baselines with potentially overlapping requirement IDs."
|
|
3321
3720
|
},
|
|
3322
3721
|
"status": {
|
|
3323
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3324
|
-
"description": "The new status this
|
|
3722
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0#/$defs/Result_Status",
|
|
3723
|
+
"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."
|
|
3325
3724
|
},
|
|
3326
3725
|
"impact": {
|
|
3327
3726
|
"$ref": "#/$defs/Impact_Override",
|
|
@@ -3332,7 +3731,7 @@
|
|
|
3332
3731
|
"description": "Justification for this amendment."
|
|
3333
3732
|
},
|
|
3334
3733
|
"appliedBy": {
|
|
3335
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3734
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Identity",
|
|
3336
3735
|
"description": "Identity of who applied this amendment."
|
|
3337
3736
|
},
|
|
3338
3737
|
"appliedAt": {
|
|
@@ -3348,20 +3747,20 @@
|
|
|
3348
3747
|
"evidence": {
|
|
3349
3748
|
"type": "array",
|
|
3350
3749
|
"items": {
|
|
3351
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3750
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Evidence"
|
|
3352
3751
|
},
|
|
3353
3752
|
"description": "Supporting evidence (screenshots, logs, URLs, documents)."
|
|
3354
3753
|
},
|
|
3355
3754
|
"signature": {
|
|
3356
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3755
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Signature",
|
|
3357
3756
|
"description": "Digital signature for non-repudiation."
|
|
3358
3757
|
},
|
|
3359
3758
|
"previousChecksum": {
|
|
3360
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3759
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Checksum",
|
|
3361
3760
|
"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."
|
|
3362
3761
|
},
|
|
3363
3762
|
"cvss": {
|
|
3364
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
3763
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0#/$defs/Cvss",
|
|
3365
3764
|
"$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.",
|
|
3366
3765
|
"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."
|
|
3367
3766
|
},
|
|
@@ -3372,7 +3771,7 @@
|
|
|
3372
3771
|
"milestones": {
|
|
3373
3772
|
"type": "array",
|
|
3374
3773
|
"items": {
|
|
3375
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.
|
|
3774
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/Milestone"
|
|
3376
3775
|
},
|
|
3377
3776
|
"description": "Remediation milestones (primarily for POA&M type amendments)."
|
|
3378
3777
|
},
|
|
@@ -3389,7 +3788,7 @@
|
|
|
3389
3788
|
"affectedPackages": {
|
|
3390
3789
|
"type": "array",
|
|
3391
3790
|
"items": {
|
|
3392
|
-
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
3791
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0#/$defs/Affected_Package"
|
|
3393
3792
|
},
|
|
3394
3793
|
"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)."
|
|
3395
3794
|
}
|
|
@@ -3522,9 +3921,9 @@
|
|
|
3522
3921
|
}
|
|
3523
3922
|
}
|
|
3524
3923
|
},
|
|
3525
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3924
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0": {
|
|
3526
3925
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3527
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.
|
|
3926
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/result/v3.8.0",
|
|
3528
3927
|
"title": "HDF Result Primitives",
|
|
3529
3928
|
"description": "Types for representing assessment results and statuses.",
|
|
3530
3929
|
"$defs": {
|
|
@@ -3589,6 +3988,10 @@
|
|
|
3589
3988
|
"type": "string"
|
|
3590
3989
|
},
|
|
3591
3990
|
"description": "The stacktrace/backtrace of the exception if one occurred."
|
|
3991
|
+
},
|
|
3992
|
+
"rawSourceRecord": {
|
|
3993
|
+
"$ref": "#/$defs/Raw_Source_Record",
|
|
3994
|
+
"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."
|
|
3592
3995
|
}
|
|
3593
3996
|
},
|
|
3594
3997
|
"examples": [
|
|
@@ -3619,6 +4022,60 @@
|
|
|
3619
4022
|
"description": "A test within a requirement and its results and findings such as how long it took to run.",
|
|
3620
4023
|
"title": "Requirement Result"
|
|
3621
4024
|
},
|
|
4025
|
+
"Raw_Source_Record": {
|
|
4026
|
+
"type": "object",
|
|
4027
|
+
"additionalProperties": false,
|
|
4028
|
+
"required": [
|
|
4029
|
+
"content",
|
|
4030
|
+
"encoding",
|
|
4031
|
+
"mediaType"
|
|
4032
|
+
],
|
|
4033
|
+
"properties": {
|
|
4034
|
+
"content": {
|
|
4035
|
+
"type": "string",
|
|
4036
|
+
"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."
|
|
4037
|
+
},
|
|
4038
|
+
"encoding": {
|
|
4039
|
+
"$ref": "https://mitre.github.io/hdf-libs/schemas/primitives/common/v3.8.0#/$defs/External_Reference_Encoding",
|
|
4040
|
+
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
4041
|
+
},
|
|
4042
|
+
"mediaType": {
|
|
4043
|
+
"type": "string",
|
|
4044
|
+
"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."
|
|
4045
|
+
},
|
|
4046
|
+
"pointer": {
|
|
4047
|
+
"type": "string",
|
|
4048
|
+
"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."
|
|
4049
|
+
}
|
|
4050
|
+
},
|
|
4051
|
+
"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.",
|
|
4052
|
+
"$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.",
|
|
4053
|
+
"examples": [
|
|
4054
|
+
{
|
|
4055
|
+
"content": "{\"vulnerability\":{\"id\":\"CVE-2022-48174\",\"severity\":\"Critical\"},\"artifact\":{\"name\":\"ssl_client\",\"version\":\"1.31.1-r9\",\"type\":\"apk\"}}",
|
|
4056
|
+
"encoding": "utf-8",
|
|
4057
|
+
"mediaType": "application/json",
|
|
4058
|
+
"pointer": "/matches/3"
|
|
4059
|
+
},
|
|
4060
|
+
{
|
|
4061
|
+
"content": "<rule-result idref=\"xccdf_org.ssgproject.content_rule_sshd_disable_root_login\" severity=\"medium\">\n <result>fail</result>\n</rule-result>",
|
|
4062
|
+
"encoding": "utf-8",
|
|
4063
|
+
"mediaType": "application/xml",
|
|
4064
|
+
"pointer": "/Benchmark/TestResult/rule-result[4]"
|
|
4065
|
+
},
|
|
4066
|
+
{
|
|
4067
|
+
"content": "UEsDBBQAAAAIAEVnPF20b/JoHgAAABwAAAAKAAAAYXVkaXQuZnZkbA==",
|
|
4068
|
+
"encoding": "base64",
|
|
4069
|
+
"mediaType": "application/octet-stream"
|
|
4070
|
+
},
|
|
4071
|
+
{
|
|
4072
|
+
"content": "host-01,Ubuntu 22.04,CVE-2021-36159,,image,critical,apk-tools,apk-tools,2.12.5-r1",
|
|
4073
|
+
"encoding": "utf-8",
|
|
4074
|
+
"mediaType": "text/csv"
|
|
4075
|
+
}
|
|
4076
|
+
],
|
|
4077
|
+
"title": "Raw Source Record"
|
|
4078
|
+
},
|
|
3622
4079
|
"Requirement_Description": {
|
|
3623
4080
|
"type": "object",
|
|
3624
4081
|
"unevaluatedProperties": false,
|
|
@@ -3655,9 +4112,9 @@
|
|
|
3655
4112
|
}
|
|
3656
4113
|
}
|
|
3657
4114
|
},
|
|
3658
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4115
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0": {
|
|
3659
4116
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3660
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.
|
|
4117
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/cvss/v3.8.0",
|
|
3661
4118
|
"title": "HDF CVSS Primitives",
|
|
3662
4119
|
"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).",
|
|
3663
4120
|
"$defs": {
|
|
@@ -3854,9 +4311,9 @@
|
|
|
3854
4311
|
}
|
|
3855
4312
|
}
|
|
3856
4313
|
},
|
|
3857
|
-
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4314
|
+
"https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0": {
|
|
3858
4315
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3859
|
-
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.
|
|
4316
|
+
"$id": "https://mitre.github.io/hdf-libs/schemas/primitives/affected-package/v3.8.0",
|
|
3860
4317
|
"title": "HDF Affected Package Primitives",
|
|
3861
4318
|
"description": "Types for representing the software package(s) affected by a vulnerability finding.",
|
|
3862
4319
|
"$defs": {
|