@mitre/hdf-schema 3.2.0 → 3.3.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 +15 -16
- package/dist/go/hdf.go +398 -134
- package/dist/helpers.d.ts +1 -1
- package/dist/index.d.ts +27 -52
- package/dist/index.js +30 -48
- package/dist/schemas/hdf-amendments.schema.json +466 -45
- package/dist/schemas/hdf-baseline.schema.json +471 -50
- package/dist/schemas/hdf-comparison.schema.json +721 -103
- package/dist/schemas/hdf-evidence-package.schema.json +465 -44
- package/dist/schemas/hdf-plan.schema.json +472 -50
- package/dist/schemas/hdf-results.schema.json +678 -80
- package/dist/schemas/hdf-system.schema.json +497 -59
- package/dist/ts/hdf.d.ts +3562 -0
- package/dist/ts/hdf.js +564 -0
- package/dist/ts/hdf.ts +3623 -0
- package/package.json +18 -17
- package/dist/ts/hdf-amendments.d.ts +0 -474
- package/dist/ts/hdf-amendments.js +0 -88
- package/dist/ts/hdf-amendments.ts +0 -486
- package/dist/ts/hdf-baseline.d.ts +0 -549
- package/dist/ts/hdf-baseline.js +0 -110
- package/dist/ts/hdf-baseline.ts +0 -563
- package/dist/ts/hdf-comparison.d.ts +0 -1185
- package/dist/ts/hdf-comparison.js +0 -216
- package/dist/ts/hdf-comparison.ts +0 -1210
- package/dist/ts/hdf-evidence-package.d.ts +0 -348
- package/dist/ts/hdf-evidence-package.js +0 -39
- package/dist/ts/hdf-evidence-package.ts +0 -356
- package/dist/ts/hdf-plan.d.ts +0 -204
- package/dist/ts/hdf-plan.js +0 -23
- package/dist/ts/hdf-plan.ts +0 -205
- package/dist/ts/hdf-results.d.ts +0 -1588
- package/dist/ts/hdf-results.js +0 -246
- package/dist/ts/hdf-results.ts +0 -1616
- package/dist/ts/hdf-system.d.ts +0 -609
- package/dist/ts/hdf-system.js +0 -102
- package/dist/ts/hdf-system.ts +0 -617
package/dist/ts/hdf.d.ts
ADDED
|
@@ -0,0 +1,3562 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The top level value containing all assessment results.
|
|
3
|
+
*/
|
|
4
|
+
export interface HDFResults {
|
|
5
|
+
/**
|
|
6
|
+
* Information on the baselines that were evaluated, including findings.
|
|
7
|
+
*/
|
|
8
|
+
baselines: EvaluatedBaseline[];
|
|
9
|
+
/**
|
|
10
|
+
* The components that were assessed. Each component describes a system element (host,
|
|
11
|
+
* container, cloud resource, application, etc.) with optional identity, SBOM, and external
|
|
12
|
+
* references.
|
|
13
|
+
*/
|
|
14
|
+
components?: Component[];
|
|
15
|
+
/**
|
|
16
|
+
* Reserved for tool-specific data not defined in the HDF standard. Use this to preserve
|
|
17
|
+
* original tool output, auxiliary data, or custom metadata.
|
|
18
|
+
*/
|
|
19
|
+
extensions?: {
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Information about the tool that generated this file.
|
|
24
|
+
*/
|
|
25
|
+
generator?: Generator;
|
|
26
|
+
/**
|
|
27
|
+
* Unique identifier for this assessment run.
|
|
28
|
+
*/
|
|
29
|
+
id?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Cryptographic integrity information for verifying this file.
|
|
32
|
+
*/
|
|
33
|
+
integrity?: Integrity;
|
|
34
|
+
/**
|
|
35
|
+
* Reference to an hdf-plan document describing the assessment plan that produced these
|
|
36
|
+
* results. May be a relative path, absolute URI, or fragment identifier.
|
|
37
|
+
*/
|
|
38
|
+
planRef?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
41
|
+
* scripts, etc.) for fixing failing requirements found in this assessment.
|
|
42
|
+
*/
|
|
43
|
+
remediation?: Remediation;
|
|
44
|
+
/**
|
|
45
|
+
* Information about the test execution environment where the security tool was run.
|
|
46
|
+
* Distinct from targets (what is being tested).
|
|
47
|
+
*/
|
|
48
|
+
runner?: Runner;
|
|
49
|
+
/**
|
|
50
|
+
* Statistics for the assessment run, including duration and result counts.
|
|
51
|
+
*/
|
|
52
|
+
statistics?: Statistics;
|
|
53
|
+
/**
|
|
54
|
+
* Reference to an hdf-system document describing the system under assessment. May be a
|
|
55
|
+
* relative path, absolute URI, or fragment identifier.
|
|
56
|
+
*/
|
|
57
|
+
systemRef?: string;
|
|
58
|
+
/**
|
|
59
|
+
* When this assessment was executed.
|
|
60
|
+
*/
|
|
61
|
+
timestamp?: Date;
|
|
62
|
+
/**
|
|
63
|
+
* The security tool that produced the assessment data in this file.
|
|
64
|
+
*/
|
|
65
|
+
tool?: Tool;
|
|
66
|
+
[property: string]: any;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Information on a baseline that was evaluated, including any findings.
|
|
70
|
+
*
|
|
71
|
+
* Shared metadata fields for baselines. Used in both standalone baseline documents and
|
|
72
|
+
* evaluated baseline results.
|
|
73
|
+
*/
|
|
74
|
+
export interface EvaluatedBaseline {
|
|
75
|
+
/**
|
|
76
|
+
* The set of dependencies this baseline depends on.
|
|
77
|
+
*/
|
|
78
|
+
depends?: Dependency[];
|
|
79
|
+
/**
|
|
80
|
+
* The description - should be more detailed than the summary.
|
|
81
|
+
*/
|
|
82
|
+
description?: string;
|
|
83
|
+
/**
|
|
84
|
+
* Reserved for tool-specific baseline metadata not defined in the HDF standard.
|
|
85
|
+
*/
|
|
86
|
+
extensions?: {
|
|
87
|
+
[key: string]: any;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* A set of descriptions for the requirement groups.
|
|
91
|
+
*/
|
|
92
|
+
groups?: RequirementGroup[];
|
|
93
|
+
/**
|
|
94
|
+
* Typed inputs used to parameterize this baseline at execution time. See the Input
|
|
95
|
+
* primitive for the full schema.
|
|
96
|
+
*/
|
|
97
|
+
inputs?: Input[];
|
|
98
|
+
/**
|
|
99
|
+
* Cryptographic integrity information for verifying this baseline has not been tampered
|
|
100
|
+
* with.
|
|
101
|
+
*/
|
|
102
|
+
integrity?: Integrity;
|
|
103
|
+
/**
|
|
104
|
+
* SHA-256 checksum of the original baseline definition file (before execution). This is an
|
|
105
|
+
* immutable reference to the baseline as defined, used to detect tampering with baseline
|
|
106
|
+
* requirements or metadata.
|
|
107
|
+
*/
|
|
108
|
+
originalChecksum?: Checksum;
|
|
109
|
+
/**
|
|
110
|
+
* The name of the parent baseline if this is a dependency of another.
|
|
111
|
+
*/
|
|
112
|
+
parentBaseline?: string;
|
|
113
|
+
/**
|
|
114
|
+
* The set of requirements including any findings. A baseline must have at least one
|
|
115
|
+
* requirement.
|
|
116
|
+
*/
|
|
117
|
+
requirements: EvaluatedRequirement[];
|
|
118
|
+
/**
|
|
119
|
+
* SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
|
|
120
|
+
* Used to detect tampering with test results. Compare with currentChecksum to verify
|
|
121
|
+
* amendment integrity.
|
|
122
|
+
*/
|
|
123
|
+
resultsChecksum?: Checksum;
|
|
124
|
+
/**
|
|
125
|
+
* An explanation of the baseline status. Example: why it was skipped, failed to load, or
|
|
126
|
+
* any other status details.
|
|
127
|
+
*/
|
|
128
|
+
statusMessage?: string;
|
|
129
|
+
/**
|
|
130
|
+
* The name - must be unique.
|
|
131
|
+
*/
|
|
132
|
+
name: string;
|
|
133
|
+
/**
|
|
134
|
+
* The copyright holder(s).
|
|
135
|
+
*/
|
|
136
|
+
copyright?: string;
|
|
137
|
+
/**
|
|
138
|
+
* The email address or other contact information of the copyright holder(s).
|
|
139
|
+
*/
|
|
140
|
+
copyrightEmail?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
143
|
+
* environment, region, team. Values must be strings.
|
|
144
|
+
*/
|
|
145
|
+
labels?: {
|
|
146
|
+
[key: string]: string;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* The copyright license. Example: 'Apache-2.0'.
|
|
150
|
+
*/
|
|
151
|
+
license?: string;
|
|
152
|
+
/**
|
|
153
|
+
* The maintainer(s).
|
|
154
|
+
*/
|
|
155
|
+
maintainer?: string;
|
|
156
|
+
/**
|
|
157
|
+
* The status. Example: 'loaded'.
|
|
158
|
+
*/
|
|
159
|
+
status?: string;
|
|
160
|
+
/**
|
|
161
|
+
* The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
162
|
+
*/
|
|
163
|
+
summary?: string;
|
|
164
|
+
/**
|
|
165
|
+
* The set of supported platform targets.
|
|
166
|
+
*/
|
|
167
|
+
supports?: SupportedPlatform[];
|
|
168
|
+
/**
|
|
169
|
+
* The title - should be human readable.
|
|
170
|
+
*/
|
|
171
|
+
title?: string;
|
|
172
|
+
/**
|
|
173
|
+
* The version of the baseline.
|
|
174
|
+
*/
|
|
175
|
+
version?: string;
|
|
176
|
+
[property: string]: any;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* A dependency for a baseline. Can include relative paths or URLs for where to find the
|
|
180
|
+
* dependency.
|
|
181
|
+
*/
|
|
182
|
+
export interface Dependency {
|
|
183
|
+
/**
|
|
184
|
+
* The branch name for a git repo.
|
|
185
|
+
*/
|
|
186
|
+
branch?: string;
|
|
187
|
+
/**
|
|
188
|
+
* The 'user/profilename' attribute for an Automate server.
|
|
189
|
+
*/
|
|
190
|
+
compliance?: string;
|
|
191
|
+
/**
|
|
192
|
+
* The location of the git repo. Example:
|
|
193
|
+
* 'https://github.com/my-org/ubuntu-22.04-stig-baseline.git'.
|
|
194
|
+
*/
|
|
195
|
+
git?: string;
|
|
196
|
+
/**
|
|
197
|
+
* The name or assigned alias.
|
|
198
|
+
*/
|
|
199
|
+
name?: string;
|
|
200
|
+
/**
|
|
201
|
+
* The relative path if the dependency is locally available.
|
|
202
|
+
*/
|
|
203
|
+
path?: string;
|
|
204
|
+
/**
|
|
205
|
+
* The status. Should be: 'loaded', 'failed', or 'skipped'.
|
|
206
|
+
*/
|
|
207
|
+
status?: string;
|
|
208
|
+
/**
|
|
209
|
+
* The reason for the status if it is 'failed' or 'skipped'.
|
|
210
|
+
*/
|
|
211
|
+
statusMessage?: string;
|
|
212
|
+
/**
|
|
213
|
+
* The 'user/profilename' attribute for a Supermarket server.
|
|
214
|
+
*/
|
|
215
|
+
supermarket?: string;
|
|
216
|
+
/**
|
|
217
|
+
* The address of the dependency.
|
|
218
|
+
*/
|
|
219
|
+
url?: string;
|
|
220
|
+
[property: string]: any;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Describes a group of requirements, such as those defined in a single file.
|
|
224
|
+
*/
|
|
225
|
+
export interface RequirementGroup {
|
|
226
|
+
/**
|
|
227
|
+
* The unique identifier for the group. Example: the relative path to the file specifying
|
|
228
|
+
* the requirements.
|
|
229
|
+
*/
|
|
230
|
+
id: string;
|
|
231
|
+
/**
|
|
232
|
+
* The set of requirements as specified by their ids in this group. Example: 'SV-238196'.
|
|
233
|
+
*/
|
|
234
|
+
requirements: string[];
|
|
235
|
+
/**
|
|
236
|
+
* The title of the group - should be human readable.
|
|
237
|
+
*/
|
|
238
|
+
title?: string;
|
|
239
|
+
[property: string]: any;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* A typed input parameter that bridges governance requirements and scanner automation.
|
|
243
|
+
* Inputs carry expected configuration values with type information, comparison operators,
|
|
244
|
+
* and validation constraints, enabling traceability from policy through to scan results.
|
|
245
|
+
*/
|
|
246
|
+
export interface Input {
|
|
247
|
+
/**
|
|
248
|
+
* Validation constraints for the input value.
|
|
249
|
+
*/
|
|
250
|
+
constraints?: InputConstraints;
|
|
251
|
+
/**
|
|
252
|
+
* Human-readable description of what this input controls.
|
|
253
|
+
*/
|
|
254
|
+
description?: string;
|
|
255
|
+
/**
|
|
256
|
+
* The input name. Must be unique within a baseline or results document. Example:
|
|
257
|
+
* 'max_concurrent_sessions'.
|
|
258
|
+
*/
|
|
259
|
+
name: string;
|
|
260
|
+
/**
|
|
261
|
+
* The comparison operator used when evaluating this input against observed values.
|
|
262
|
+
*/
|
|
263
|
+
operator?: ComparisonOperator;
|
|
264
|
+
/**
|
|
265
|
+
* Whether this input must be provided. Defaults to false if omitted.
|
|
266
|
+
*/
|
|
267
|
+
required?: boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Whether this input contains sensitive data (passwords, keys). Sensitive values should be
|
|
270
|
+
* redacted in output. Defaults to false if omitted.
|
|
271
|
+
*/
|
|
272
|
+
sensitive?: boolean;
|
|
273
|
+
/**
|
|
274
|
+
* The data type of this input.
|
|
275
|
+
*/
|
|
276
|
+
type?: InputType;
|
|
277
|
+
/**
|
|
278
|
+
* The input value. Type should match the declared type field. Accepts any JSON value.
|
|
279
|
+
*/
|
|
280
|
+
value?: any;
|
|
281
|
+
[property: string]: any;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Validation constraints for the input value.
|
|
285
|
+
*
|
|
286
|
+
* Validation constraints for an input value.
|
|
287
|
+
*/
|
|
288
|
+
export interface InputConstraints {
|
|
289
|
+
/**
|
|
290
|
+
* Enumeration of permitted values.
|
|
291
|
+
*/
|
|
292
|
+
allowedValues?: any[];
|
|
293
|
+
/**
|
|
294
|
+
* Maximum allowed value (for Numeric inputs).
|
|
295
|
+
*/
|
|
296
|
+
max?: number;
|
|
297
|
+
/**
|
|
298
|
+
* Minimum allowed value (for Numeric inputs).
|
|
299
|
+
*/
|
|
300
|
+
min?: number;
|
|
301
|
+
/**
|
|
302
|
+
* Regular expression pattern the value must match (for String inputs).
|
|
303
|
+
*/
|
|
304
|
+
pattern?: string;
|
|
305
|
+
[property: string]: any;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* The comparison operator used when evaluating this input against observed values.
|
|
309
|
+
*
|
|
310
|
+
* Comparison operator for evaluating the input value against observed values. Numeric:
|
|
311
|
+
* eq/ne/lt/le/gt/ge. String: eq/ne/contains/matches. Collection: in/notIn.
|
|
312
|
+
*/
|
|
313
|
+
export declare enum ComparisonOperator {
|
|
314
|
+
Contains = "contains",
|
|
315
|
+
Eq = "eq",
|
|
316
|
+
Ge = "ge",
|
|
317
|
+
Gt = "gt",
|
|
318
|
+
In = "in",
|
|
319
|
+
LE = "le",
|
|
320
|
+
Lt = "lt",
|
|
321
|
+
Matches = "matches",
|
|
322
|
+
Ne = "ne",
|
|
323
|
+
NotIn = "notIn"
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* The data type of this input.
|
|
327
|
+
*
|
|
328
|
+
* The data type of the input value. Aligns with InSpec input types.
|
|
329
|
+
*/
|
|
330
|
+
export declare enum InputType {
|
|
331
|
+
Array = "Array",
|
|
332
|
+
Boolean = "Boolean",
|
|
333
|
+
Hash = "Hash",
|
|
334
|
+
Numeric = "Numeric",
|
|
335
|
+
Regexp = "Regexp",
|
|
336
|
+
String = "String"
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Cryptographic integrity information for verifying this baseline has not been tampered
|
|
340
|
+
* with.
|
|
341
|
+
*
|
|
342
|
+
* Cryptographic integrity information for verifying the HDF file has not been tampered
|
|
343
|
+
* with. If algorithm is provided, checksum must also be provided, and vice versa.
|
|
344
|
+
*
|
|
345
|
+
* Cryptographic integrity information for verifying this file.
|
|
346
|
+
*
|
|
347
|
+
* Cryptographic integrity information for verifying this comparison document.
|
|
348
|
+
*
|
|
349
|
+
* Cryptographic integrity information for verifying this system document has not been
|
|
350
|
+
* tampered with.
|
|
351
|
+
*
|
|
352
|
+
* Cryptographic integrity information for verifying this plan document has not been
|
|
353
|
+
* tampered with.
|
|
354
|
+
*
|
|
355
|
+
* Cryptographic integrity information for verifying this amendments document has not been
|
|
356
|
+
* tampered with.
|
|
357
|
+
*
|
|
358
|
+
* Cryptographic integrity information for verifying this evidence package has not been
|
|
359
|
+
* tampered with.
|
|
360
|
+
*/
|
|
361
|
+
export interface Integrity {
|
|
362
|
+
/**
|
|
363
|
+
* The hash algorithm used for the checksum.
|
|
364
|
+
*/
|
|
365
|
+
algorithm?: HashAlgorithm;
|
|
366
|
+
/**
|
|
367
|
+
* The checksum value.
|
|
368
|
+
*/
|
|
369
|
+
checksum?: string;
|
|
370
|
+
/**
|
|
371
|
+
* Optional cryptographic signature.
|
|
372
|
+
*/
|
|
373
|
+
signature?: string;
|
|
374
|
+
/**
|
|
375
|
+
* Identifier of who signed this file.
|
|
376
|
+
*/
|
|
377
|
+
signedBy?: string;
|
|
378
|
+
[property: string]: any;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* The hash algorithm used for the checksum.
|
|
382
|
+
*
|
|
383
|
+
* Supported cryptographic hash algorithms for checksums and integrity verification.
|
|
384
|
+
*/
|
|
385
|
+
export declare enum HashAlgorithm {
|
|
386
|
+
Sha256 = "sha256",
|
|
387
|
+
Sha384 = "sha384",
|
|
388
|
+
Sha512 = "sha512"
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* SHA-256 checksum of the original baseline definition file (before execution). This is an
|
|
392
|
+
* immutable reference to the baseline as defined, used to detect tampering with baseline
|
|
393
|
+
* requirements or metadata.
|
|
394
|
+
*
|
|
395
|
+
* Cryptographic checksum for baseline integrity verification.
|
|
396
|
+
*
|
|
397
|
+
* SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
398
|
+
* tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
399
|
+
* on a requirement.
|
|
400
|
+
*
|
|
401
|
+
* SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs).
|
|
402
|
+
* Used to detect tampering with test results. Compare with currentChecksum to verify
|
|
403
|
+
* amendment integrity.
|
|
404
|
+
*
|
|
405
|
+
* Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
406
|
+
* fetched from the URI. Recommended for security when referencing external automation
|
|
407
|
+
* scripts.
|
|
408
|
+
*
|
|
409
|
+
* Cryptographic checksum of the source document for integrity verification.
|
|
410
|
+
*
|
|
411
|
+
* Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
|
|
412
|
+
* for the first amendment.
|
|
413
|
+
*
|
|
414
|
+
* Cryptographic checksum for verifying the referenced document's integrity.
|
|
415
|
+
*/
|
|
416
|
+
export interface Checksum {
|
|
417
|
+
/**
|
|
418
|
+
* The hash algorithm used for the checksum.
|
|
419
|
+
*/
|
|
420
|
+
algorithm: HashAlgorithm;
|
|
421
|
+
/**
|
|
422
|
+
* The checksum value.
|
|
423
|
+
*/
|
|
424
|
+
value: string;
|
|
425
|
+
[property: string]: any;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* A requirement that has been evaluated, including any findings.
|
|
429
|
+
*
|
|
430
|
+
* Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
431
|
+
* Contains the fundamental requirement definition without assessment results.
|
|
432
|
+
*/
|
|
433
|
+
export interface EvaluatedRequirement {
|
|
434
|
+
/**
|
|
435
|
+
* Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
|
|
436
|
+
* components[] on hdf-system for component-level package inventories. One entry per matched
|
|
437
|
+
* package signature (scanners often report multiple CPE variations per CVE).
|
|
438
|
+
*/
|
|
439
|
+
affectedPackages?: AffectedPackage[];
|
|
440
|
+
/**
|
|
441
|
+
* Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding
|
|
442
|
+
* may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base
|
|
443
|
+
* metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for
|
|
444
|
+
* risk adjustment. See cvss.schema.json.
|
|
445
|
+
*/
|
|
446
|
+
cvss?: Cvss[];
|
|
447
|
+
/**
|
|
448
|
+
* Common Weakness Enumeration IDs associated with this finding. Use CWE-N format with no
|
|
449
|
+
* leading zeros (matches the MITRE catalog convention). For NIST control mappings derived
|
|
450
|
+
* from CWE, see tags.nist.
|
|
451
|
+
*/
|
|
452
|
+
cwe?: string[];
|
|
453
|
+
/**
|
|
454
|
+
* Array of labeled descriptions. At least one description with label 'default' must be
|
|
455
|
+
* present. Convention: place default description first. Common labels: 'default', 'check',
|
|
456
|
+
* 'fix', 'rationale'.
|
|
457
|
+
*/
|
|
458
|
+
descriptions: Description[];
|
|
459
|
+
/**
|
|
460
|
+
* The type of the most recent non-expired override or POAM governing this requirement.
|
|
461
|
+
* Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
462
|
+
* riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
463
|
+
* POAMs apply.
|
|
464
|
+
*/
|
|
465
|
+
disposition?: OverrideType;
|
|
466
|
+
/**
|
|
467
|
+
* The current effective impact score (0.0–1.0) after applying the most recent non-expired
|
|
468
|
+
* override with an impact field. Absent when no impact overrides apply; consumers should
|
|
469
|
+
* use the requirement's impact field in that case.
|
|
470
|
+
*/
|
|
471
|
+
effectiveImpact?: number;
|
|
472
|
+
/**
|
|
473
|
+
* The current effective compliance status of this requirement after applying the most
|
|
474
|
+
* recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
475
|
+
* no status-bearing overrides exist.
|
|
476
|
+
*/
|
|
477
|
+
effectiveStatus?: ResultStatus;
|
|
478
|
+
/**
|
|
479
|
+
* FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
480
|
+
* alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
481
|
+
* exploited.
|
|
482
|
+
*/
|
|
483
|
+
epss?: Epss;
|
|
484
|
+
/**
|
|
485
|
+
* Supporting evidence for this requirement's findings, such as screenshots, code samples,
|
|
486
|
+
* or log excerpts.
|
|
487
|
+
*/
|
|
488
|
+
evidence?: Evidence[];
|
|
489
|
+
/**
|
|
490
|
+
* CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
491
|
+
* dueDate carry the federal patching deadline.
|
|
492
|
+
*/
|
|
493
|
+
kev?: Kev;
|
|
494
|
+
/**
|
|
495
|
+
* Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
496
|
+
* POAMs do NOT change effectiveStatus - they track the work being done to address a
|
|
497
|
+
* failure. Separate from statusOverrides which DO change status.
|
|
498
|
+
*/
|
|
499
|
+
poams?: Poam[];
|
|
500
|
+
/**
|
|
501
|
+
* The set of all tests within the requirement and their results.
|
|
502
|
+
*/
|
|
503
|
+
results: RequirementResult[];
|
|
504
|
+
/**
|
|
505
|
+
* Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
506
|
+
* clarity.
|
|
507
|
+
*/
|
|
508
|
+
severity?: Severity;
|
|
509
|
+
/**
|
|
510
|
+
* The explicit location of the requirement within the source code.
|
|
511
|
+
*/
|
|
512
|
+
sourceLocation?: SourceLocation;
|
|
513
|
+
/**
|
|
514
|
+
* Chronological history of all overrides applied to this requirement. Overrides are
|
|
515
|
+
* intentional changes to the compliance status and/or impact score (waivers, attestations,
|
|
516
|
+
* false positives, risk adjustments). Most recent override should be first in array.
|
|
517
|
+
* Preserves full audit trail.
|
|
518
|
+
*/
|
|
519
|
+
statusOverrides?: StatusOverride[];
|
|
520
|
+
/**
|
|
521
|
+
* The requirement identifier. Example: 'SV-238196'.
|
|
522
|
+
*/
|
|
523
|
+
id: string;
|
|
524
|
+
/**
|
|
525
|
+
* The impactfulness or severity (0.0 to 1.0).
|
|
526
|
+
*/
|
|
527
|
+
impact: number;
|
|
528
|
+
/**
|
|
529
|
+
* A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
530
|
+
*/
|
|
531
|
+
tags: {
|
|
532
|
+
[key: string]: any;
|
|
533
|
+
};
|
|
534
|
+
/**
|
|
535
|
+
* Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
536
|
+
* weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
537
|
+
* FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
538
|
+
* memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
539
|
+
* Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
540
|
+
* convention.
|
|
541
|
+
*/
|
|
542
|
+
applicability?: Applicability;
|
|
543
|
+
/**
|
|
544
|
+
* The raw source code of the requirement. Set to null for manual-only requirements or
|
|
545
|
+
* requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
546
|
+
* from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
547
|
+
* underlying source code.
|
|
548
|
+
*/
|
|
549
|
+
code?: string;
|
|
550
|
+
/**
|
|
551
|
+
* Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
552
|
+
* categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
553
|
+
* process; 'technical' = an enforced technical configuration; 'management' = a
|
|
554
|
+
* programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
555
|
+
* AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
556
|
+
* family/id but should not assume a default.
|
|
557
|
+
*/
|
|
558
|
+
controlType?: ControlType;
|
|
559
|
+
/**
|
|
560
|
+
* The set of references to external documents.
|
|
561
|
+
*/
|
|
562
|
+
refs?: Reference[];
|
|
563
|
+
/**
|
|
564
|
+
* The title - is nullable.
|
|
565
|
+
*/
|
|
566
|
+
title?: string;
|
|
567
|
+
/**
|
|
568
|
+
* How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
569
|
+
* 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
570
|
+
* to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
571
|
+
* exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
572
|
+
* runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
573
|
+
* omitted, consumers should not infer a default.
|
|
574
|
+
*/
|
|
575
|
+
verificationMethod?: VerificationMethodEnum;
|
|
576
|
+
[property: string]: any;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Represents a package referenced by a vulnerability finding or by an amendment's scope. On
|
|
580
|
+
* Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
|
|
581
|
+
* On Standalone_Override.affectedPackages it says 'this amendment is scoped to these
|
|
582
|
+
* packages' (used by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a
|
|
583
|
+
* system-level component identifier — see `components[]` on hdf-system for those. Validity
|
|
584
|
+
* requires at least one of: (name + version + ecosystem), purl alone, or cpe alone. purl
|
|
585
|
+
* and cpe are self-describing identifiers that encode name/version implicitly, so either
|
|
586
|
+
* may stand on its own; the name+version+ecosystem combination is the explicit form for
|
|
587
|
+
* sources without formal identifiers.
|
|
588
|
+
*/
|
|
589
|
+
export interface AffectedPackage {
|
|
590
|
+
/**
|
|
591
|
+
* Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
|
|
592
|
+
* 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
|
|
593
|
+
* system) are enforced here. Use `hdf-utilities.parseCpe` for full-grammar parsing.
|
|
594
|
+
* Example: 'cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*'.
|
|
595
|
+
*/
|
|
596
|
+
cpe?: string;
|
|
597
|
+
/**
|
|
598
|
+
* The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
599
|
+
* anything outside the listed language/OS package managers.
|
|
600
|
+
*/
|
|
601
|
+
ecosystem?: Ecosystem;
|
|
602
|
+
/**
|
|
603
|
+
* Optional version string identifying the first release that contains the fix for the
|
|
604
|
+
* vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes
|
|
605
|
+
* 'openssl@1.1.1k'.
|
|
606
|
+
*/
|
|
607
|
+
fixedInVersion?: string;
|
|
608
|
+
/**
|
|
609
|
+
* The package name as published in its ecosystem. Examples: 'openssl' (rpm), 'lodash'
|
|
610
|
+
* (npm), 'org.apache.logging.log4j:log4j-core' (maven, group:artifact).
|
|
611
|
+
*/
|
|
612
|
+
name?: string;
|
|
613
|
+
/**
|
|
614
|
+
* Optional Package URL (PURL) identifying the affected package. Validated leniently: only
|
|
615
|
+
* the 'pkg:TYPE/' scheme prefix is enforced here, where TYPE follows the PURL grammar (a
|
|
616
|
+
* letter followed by letters, digits, '.', '+', or '-') and is matched case-insensitively
|
|
617
|
+
* to mirror `hdf-utilities.parsePurl`'s accept-and-warn behavior. Use `parsePurl` for full
|
|
618
|
+
* PURL parsing. Example: 'pkg:rpm/redhat/openssl@1.1.1k-7.el8_4?arch=x86_64'.
|
|
619
|
+
*/
|
|
620
|
+
purl?: string;
|
|
621
|
+
/**
|
|
622
|
+
* The exact version of the package that the vulnerability scanner observed. Use the
|
|
623
|
+
* ecosystem's native version string verbatim (e.g., '1.1.1k-7.el8_4' for rpm, '4.17.20' for
|
|
624
|
+
* npm).
|
|
625
|
+
*/
|
|
626
|
+
version?: string;
|
|
627
|
+
[property: string]: any;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
631
|
+
* anything outside the listed language/OS package managers.
|
|
632
|
+
*/
|
|
633
|
+
export declare enum Ecosystem {
|
|
634
|
+
Cargo = "cargo",
|
|
635
|
+
Deb = "deb",
|
|
636
|
+
Gem = "gem",
|
|
637
|
+
Generic = "generic",
|
|
638
|
+
Go = "go",
|
|
639
|
+
Maven = "maven",
|
|
640
|
+
Npm = "npm",
|
|
641
|
+
Nuget = "nuget",
|
|
642
|
+
Pypi = "pypi",
|
|
643
|
+
RPM = "rpm"
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
647
|
+
* weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
648
|
+
* FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
649
|
+
* memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
650
|
+
* Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
651
|
+
* convention.
|
|
652
|
+
*/
|
|
653
|
+
export declare enum Applicability {
|
|
654
|
+
Advisory = "advisory",
|
|
655
|
+
Optional = "optional",
|
|
656
|
+
Required = "required"
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
660
|
+
* categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
661
|
+
* process; 'technical' = an enforced technical configuration; 'management' = a
|
|
662
|
+
* programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
663
|
+
* AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
664
|
+
* family/id but should not assume a default.
|
|
665
|
+
*/
|
|
666
|
+
export declare enum ControlType {
|
|
667
|
+
Management = "management",
|
|
668
|
+
Operational = "operational",
|
|
669
|
+
Policy = "policy",
|
|
670
|
+
Procedure = "procedure",
|
|
671
|
+
Technical = "technical"
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
675
|
+
* Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
676
|
+
* a riskAdjustment. For other override types this is optional context.
|
|
677
|
+
*
|
|
678
|
+
* A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding.
|
|
679
|
+
* Captures the vendor-supplied Base metric group and optional consumer-supplied Threat,
|
|
680
|
+
* Environmental, and Supplemental metric groups. Supports all four CVSS major versions
|
|
681
|
+
* (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
|
|
682
|
+
* semantic validation (correct metrics per version, correct values per metric) is performed
|
|
683
|
+
* by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
|
|
684
|
+
*/
|
|
685
|
+
export interface Cvss {
|
|
686
|
+
/**
|
|
687
|
+
* The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
|
|
688
|
+
* vendor-published severity before consumer enrichment.
|
|
689
|
+
*/
|
|
690
|
+
baseScore?: number;
|
|
691
|
+
/**
|
|
692
|
+
* Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
693
|
+
* 'none' or 'critical' bands; map accordingly when populating.
|
|
694
|
+
*/
|
|
695
|
+
baseSeverity?: CVSSSeverity;
|
|
696
|
+
/**
|
|
697
|
+
* Optional Base metric group vector string as emitted by the source (e.g.,
|
|
698
|
+
* 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'). For CVSS 2.0 the version prefix is
|
|
699
|
+
* omitted. Some vendor tools emit a final baseScore without the vector — in that case this
|
|
700
|
+
* field is absent and the score cannot be recomputed or decomposed. The pattern accepts any
|
|
701
|
+
* version-prefixed or prefix-less metric token sequence; semantic validity of individual
|
|
702
|
+
* metrics is checked by hdf-utilities, not by the schema.
|
|
703
|
+
*/
|
|
704
|
+
baseVector?: string;
|
|
705
|
+
/**
|
|
706
|
+
* Optional final score after combining Base + Threat + Environmental metrics. This is the
|
|
707
|
+
* score consumers should treat as authoritative for risk decisions when present.
|
|
708
|
+
*/
|
|
709
|
+
computedScore?: number;
|
|
710
|
+
/**
|
|
711
|
+
* Qualitative severity band corresponding to computedScore. Same band convention as
|
|
712
|
+
* baseSeverity.
|
|
713
|
+
*/
|
|
714
|
+
computedSeverity?: CVSSSeverity;
|
|
715
|
+
/**
|
|
716
|
+
* Optional score (0.0–10.0) recomputed after applying Environmental metrics.
|
|
717
|
+
*/
|
|
718
|
+
environmentalScore?: number;
|
|
719
|
+
/**
|
|
720
|
+
* Optional Environmental metric group vector segment (e.g., 'MAV:N/CR:H/IR:H/AR:H').
|
|
721
|
+
* Consumer-supplied — reflects the deployment context (criticality, mitigations, network
|
|
722
|
+
* exposure).
|
|
723
|
+
*/
|
|
724
|
+
environmentalVector?: string;
|
|
725
|
+
/**
|
|
726
|
+
* Optional identifier the CVSS data is associated with — most commonly a CVE ID (e.g.,
|
|
727
|
+
* 'CVE-2024-12345'), but may also be a vendor advisory ID, GHSA, or similar.
|
|
728
|
+
*/
|
|
729
|
+
source?: string;
|
|
730
|
+
/**
|
|
731
|
+
* Optional Supplemental metric group vector segment (CVSS 4.0 only). Examples:
|
|
732
|
+
* 'S:P/AU:N/V:C/RE:M/U:Amber'. Per CVSS 4.0 spec, supplemental metrics convey additional
|
|
733
|
+
* context but have no impact on the computed score.
|
|
734
|
+
*/
|
|
735
|
+
supplementalVector?: string;
|
|
736
|
+
/**
|
|
737
|
+
* Optional score (0.0–10.0) recomputed after applying Threat metrics. Always less than or
|
|
738
|
+
* equal to baseScore in practice.
|
|
739
|
+
*/
|
|
740
|
+
threatScore?: number;
|
|
741
|
+
/**
|
|
742
|
+
* Optional Threat metric group vector segment (e.g., 'E:U/RL:O/RC:C' for CVSS 3.1, or 'E:A'
|
|
743
|
+
* for CVSS 4.0). Consumer-supplied — captures real-world exploitation and remediation
|
|
744
|
+
* context the vendor cannot know.
|
|
745
|
+
*/
|
|
746
|
+
threatVector?: string;
|
|
747
|
+
/**
|
|
748
|
+
* The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
749
|
+
* or 4.0; legacy data may use 2.0 or 3.0.
|
|
750
|
+
*/
|
|
751
|
+
version: Version;
|
|
752
|
+
[property: string]: any;
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
756
|
+
* 'none' or 'critical' bands; map accordingly when populating.
|
|
757
|
+
*
|
|
758
|
+
* Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
|
|
759
|
+
* medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
|
|
760
|
+
* used on Requirement_Core (which includes 'informational').
|
|
761
|
+
*
|
|
762
|
+
* Qualitative severity band corresponding to computedScore. Same band convention as
|
|
763
|
+
* baseSeverity.
|
|
764
|
+
*/
|
|
765
|
+
export declare enum CVSSSeverity {
|
|
766
|
+
Critical = "critical",
|
|
767
|
+
High = "high",
|
|
768
|
+
Low = "low",
|
|
769
|
+
Medium = "medium",
|
|
770
|
+
None = "none"
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
774
|
+
* or 4.0; legacy data may use 2.0 or 3.0.
|
|
775
|
+
*/
|
|
776
|
+
export declare enum Version {
|
|
777
|
+
The20 = "2.0",
|
|
778
|
+
The30 = "3.0",
|
|
779
|
+
The31 = "3.1",
|
|
780
|
+
The40 = "4.0"
|
|
781
|
+
}
|
|
782
|
+
export interface Description {
|
|
783
|
+
/**
|
|
784
|
+
* The description text content.
|
|
785
|
+
*/
|
|
786
|
+
data: string;
|
|
787
|
+
/**
|
|
788
|
+
* Description category. The 'default' label is required for the primary description. Common
|
|
789
|
+
* labels: 'default', 'check', 'fix', 'rationale'. Tools may use custom labels.
|
|
790
|
+
*/
|
|
791
|
+
label: string;
|
|
792
|
+
[property: string]: any;
|
|
793
|
+
}
|
|
794
|
+
/**
|
|
795
|
+
* The type of the most recent non-expired override or POAM governing this requirement.
|
|
796
|
+
* Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
797
|
+
* riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
798
|
+
* POAMs apply.
|
|
799
|
+
*
|
|
800
|
+
* The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
|
|
801
|
+
* accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
|
|
802
|
+
* remediation tracked (no status change). 'inherited': control provided by another
|
|
803
|
+
* component or system. 'falsePositive': scanner incorrectly identified a finding — for
|
|
804
|
+
* compliance scans (STIG, CIS), the check actually passes, so status is typically set to
|
|
805
|
+
* 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
|
|
806
|
+
* this system, so status is typically set to 'notApplicable'. The disposition field on the
|
|
807
|
+
* requirement distinguishes false positives from genuinely not-applicable findings.
|
|
808
|
+
* 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
|
|
809
|
+
* Adjustment); does not change pass/fail status, only impact via the impact field.
|
|
810
|
+
* 'operationalRequirement': deviation required by operational constraints (FedRAMP
|
|
811
|
+
* Operational Requirement); the finding cannot be remediated because the system requires
|
|
812
|
+
* the affected functionality. Remains an open risk. Migration note: 'exception' was removed
|
|
813
|
+
* in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
|
|
814
|
+
*
|
|
815
|
+
* The type of override applied to this requirement.
|
|
816
|
+
*
|
|
817
|
+
* The type of amendment.
|
|
818
|
+
*/
|
|
819
|
+
export declare enum OverrideType {
|
|
820
|
+
Attestation = "attestation",
|
|
821
|
+
FalsePositive = "falsePositive",
|
|
822
|
+
Inherited = "inherited",
|
|
823
|
+
OperationalRequirement = "operationalRequirement",
|
|
824
|
+
Poam = "poam",
|
|
825
|
+
RiskAdjustment = "riskAdjustment",
|
|
826
|
+
Waiver = "waiver"
|
|
827
|
+
}
|
|
828
|
+
/**
|
|
829
|
+
* The current effective compliance status of this requirement after applying the most
|
|
830
|
+
* recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
831
|
+
* no status-bearing overrides exist.
|
|
832
|
+
*
|
|
833
|
+
* The status of an individual test result. 'notApplicable' indicates the requirement does
|
|
834
|
+
* not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
|
|
835
|
+
* requires manual verification).
|
|
836
|
+
*
|
|
837
|
+
* The status of this test within the requirement. Example: 'failed'.
|
|
838
|
+
*
|
|
839
|
+
* The new status this override sets for the requirement. Optional when only impact is being
|
|
840
|
+
* overridden.
|
|
841
|
+
*
|
|
842
|
+
* The new status this amendment sets. Optional when only impact is being overridden.
|
|
843
|
+
*/
|
|
844
|
+
export declare enum ResultStatus {
|
|
845
|
+
Error = "error",
|
|
846
|
+
Failed = "failed",
|
|
847
|
+
NotApplicable = "notApplicable",
|
|
848
|
+
NotReviewed = "notReviewed",
|
|
849
|
+
Passed = "passed"
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
853
|
+
* alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
854
|
+
* exploited.
|
|
855
|
+
*
|
|
856
|
+
* FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
|
|
857
|
+
* three fields are required when an Epss object is present; the date disambiguates which
|
|
858
|
+
* day's score this is, since EPSS recomputes daily.
|
|
859
|
+
*/
|
|
860
|
+
export interface Epss {
|
|
861
|
+
/**
|
|
862
|
+
* ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
|
|
863
|
+
*/
|
|
864
|
+
date: Date;
|
|
865
|
+
/**
|
|
866
|
+
* Rank of this score relative to all scored CVEs, expressed as a value between 0.0 and 1.0
|
|
867
|
+
* inclusive. A percentile of 0.99 means this CVE is scored at or above 99% of all scored
|
|
868
|
+
* CVEs.
|
|
869
|
+
*/
|
|
870
|
+
percentile: number;
|
|
871
|
+
/**
|
|
872
|
+
* Exploit probability as a value between 0.0 and 1.0 inclusive. Higher values indicate
|
|
873
|
+
* greater predicted likelihood of exploitation in the next 30 days. Example: 0.97532 means
|
|
874
|
+
* roughly a 97.5% predicted probability.
|
|
875
|
+
*/
|
|
876
|
+
score: number;
|
|
877
|
+
[property: string]: any;
|
|
878
|
+
}
|
|
879
|
+
/**
|
|
880
|
+
* Supporting evidence for a finding or override, such as screenshots, code samples, log
|
|
881
|
+
* excerpts, or URLs.
|
|
882
|
+
*/
|
|
883
|
+
export interface Evidence {
|
|
884
|
+
/**
|
|
885
|
+
* Timestamp when this evidence was captured. ISO 8601 format.
|
|
886
|
+
*/
|
|
887
|
+
capturedAt?: Date;
|
|
888
|
+
/**
|
|
889
|
+
* Identity of who or what captured this evidence.
|
|
890
|
+
*/
|
|
891
|
+
capturedBy?: Identity;
|
|
892
|
+
/**
|
|
893
|
+
* The evidence content. For screenshots/files: base64-encoded data or URL. For code/logs:
|
|
894
|
+
* the raw text. For URLs: the URL string.
|
|
895
|
+
*/
|
|
896
|
+
data: string;
|
|
897
|
+
/**
|
|
898
|
+
* Human-readable description of what this evidence shows.
|
|
899
|
+
*/
|
|
900
|
+
description?: string;
|
|
901
|
+
/**
|
|
902
|
+
* Encoding used for the data. Example: 'base64', 'utf-8'.
|
|
903
|
+
*/
|
|
904
|
+
encoding?: string;
|
|
905
|
+
/**
|
|
906
|
+
* MIME type of the evidence. Example: 'image/png', 'text/plain', 'application/json'.
|
|
907
|
+
*/
|
|
908
|
+
mimeType?: string;
|
|
909
|
+
/**
|
|
910
|
+
* Size of the evidence data in bytes.
|
|
911
|
+
*/
|
|
912
|
+
size?: number;
|
|
913
|
+
/**
|
|
914
|
+
* The type of evidence being provided.
|
|
915
|
+
*/
|
|
916
|
+
type: EvidenceType;
|
|
917
|
+
[property: string]: any;
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* Identity of who or what captured this evidence.
|
|
921
|
+
*
|
|
922
|
+
* Represents an identity that performed an action, such as capturing evidence or applying
|
|
923
|
+
* an override.
|
|
924
|
+
*
|
|
925
|
+
* Identity of who created this POA&M. For simple cases, use type 'simple' with just an
|
|
926
|
+
* identifier.
|
|
927
|
+
*
|
|
928
|
+
* Identity of who completed this milestone.
|
|
929
|
+
*
|
|
930
|
+
* The identity that created this signature.
|
|
931
|
+
*
|
|
932
|
+
* Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
933
|
+
* identifier.
|
|
934
|
+
*
|
|
935
|
+
* Identity of the person or system that approved this override.
|
|
936
|
+
*
|
|
937
|
+
* Team or individual responsible for this component. Enables per-component ownership when
|
|
938
|
+
* different teams manage different parts of a system.
|
|
939
|
+
*
|
|
940
|
+
* The identity of the person or system responsible for executing the test. This could be a
|
|
941
|
+
* human auditor manually completing a checklist, an automated CI/CD system, or a security
|
|
942
|
+
* tool. Optional field to support both automated and manual HDF generation.
|
|
943
|
+
*
|
|
944
|
+
* Team or individual responsible for this system's authorization and compliance. Maps to
|
|
945
|
+
* OSCAL responsible-party with role 'system-owner'.
|
|
946
|
+
*
|
|
947
|
+
* Default identity of who created this amendments document. Individual overrides may
|
|
948
|
+
* specify their own appliedBy.
|
|
949
|
+
*
|
|
950
|
+
* Identity of the authorizing official who approved these amendments.
|
|
951
|
+
*
|
|
952
|
+
* Identity of who applied this amendment.
|
|
953
|
+
*
|
|
954
|
+
* Identity of who prepared this evidence package.
|
|
955
|
+
*/
|
|
956
|
+
export interface Identity {
|
|
957
|
+
/**
|
|
958
|
+
* Optional description of the identity or identity system, particularly useful when type is
|
|
959
|
+
* 'other'.
|
|
960
|
+
*/
|
|
961
|
+
description?: string;
|
|
962
|
+
/**
|
|
963
|
+
* The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
964
|
+
*/
|
|
965
|
+
identifier: string;
|
|
966
|
+
/**
|
|
967
|
+
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
968
|
+
* 'system' for automated systems, 'simple' for basic string identifiers without additional
|
|
969
|
+
* classification, or 'other' for custom identity systems.
|
|
970
|
+
*/
|
|
971
|
+
type: IdentityType;
|
|
972
|
+
[property: string]: any;
|
|
973
|
+
}
|
|
974
|
+
/**
|
|
975
|
+
* The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
976
|
+
* 'system' for automated systems, 'simple' for basic string identifiers without additional
|
|
977
|
+
* classification, or 'other' for custom identity systems.
|
|
978
|
+
*/
|
|
979
|
+
export declare enum IdentityType {
|
|
980
|
+
Email = "email",
|
|
981
|
+
Other = "other",
|
|
982
|
+
Simple = "simple",
|
|
983
|
+
System = "system",
|
|
984
|
+
Username = "username"
|
|
985
|
+
}
|
|
986
|
+
/**
|
|
987
|
+
* The type of evidence being provided.
|
|
988
|
+
*/
|
|
989
|
+
export declare enum EvidenceType {
|
|
990
|
+
Code = "code",
|
|
991
|
+
File = "file",
|
|
992
|
+
Log = "log",
|
|
993
|
+
Other = "other",
|
|
994
|
+
Screenshot = "screenshot",
|
|
995
|
+
URL = "url"
|
|
996
|
+
}
|
|
997
|
+
/**
|
|
998
|
+
* CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
999
|
+
* dueDate carry the federal patching deadline.
|
|
1000
|
+
*/
|
|
1001
|
+
export interface Kev {
|
|
1002
|
+
/**
|
|
1003
|
+
* ISO 8601 calendar date (YYYY-MM-DD) the vulnerability was added to the CISA KEV catalog.
|
|
1004
|
+
* Required when inKev is true.
|
|
1005
|
+
*/
|
|
1006
|
+
dateAdded?: Date;
|
|
1007
|
+
/**
|
|
1008
|
+
* ISO 8601 calendar date (YYYY-MM-DD) by which federal agencies must remediate per CISA BOD
|
|
1009
|
+
* 22-01. Normally later than dateAdded, but the schema does not enforce ordering because
|
|
1010
|
+
* CISA occasionally adjusts published dates. Required when inKev is true.
|
|
1011
|
+
*/
|
|
1012
|
+
dueDate?: Date;
|
|
1013
|
+
/**
|
|
1014
|
+
* Whether this vulnerability is currently in the CISA Known Exploited Vulnerabilities
|
|
1015
|
+
* catalog. When true, dateAdded and dueDate are required.
|
|
1016
|
+
*/
|
|
1017
|
+
inKev: boolean;
|
|
1018
|
+
/**
|
|
1019
|
+
* CISA's notes describing the vulnerability, observed exploitation, or remediation guidance.
|
|
1020
|
+
*/
|
|
1021
|
+
notes?: string;
|
|
1022
|
+
[property: string]: any;
|
|
1023
|
+
}
|
|
1024
|
+
/**
|
|
1025
|
+
* Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
1026
|
+
* POAMs do NOT change the effectiveStatus - the requirement remains in its current state
|
|
1027
|
+
* while the POA&M tracks remediation efforts.
|
|
1028
|
+
*/
|
|
1029
|
+
export interface Poam {
|
|
1030
|
+
/**
|
|
1031
|
+
* Timestamp when this POA&M was created. ISO 8601 format.
|
|
1032
|
+
*/
|
|
1033
|
+
appliedAt: Date;
|
|
1034
|
+
/**
|
|
1035
|
+
* Identity of who created this POA&M. For simple cases, use type 'simple' with just an
|
|
1036
|
+
* identifier.
|
|
1037
|
+
*/
|
|
1038
|
+
appliedBy: Identity;
|
|
1039
|
+
/**
|
|
1040
|
+
* Supporting evidence for this POA&M, such as documentation of compensating controls or
|
|
1041
|
+
* mitigation implementation.
|
|
1042
|
+
*/
|
|
1043
|
+
evidence?: Evidence[];
|
|
1044
|
+
/**
|
|
1045
|
+
* Optional expiration date for this POA&M requiring review/renewal. ISO 8601 format.
|
|
1046
|
+
*/
|
|
1047
|
+
expiresAt?: Date;
|
|
1048
|
+
/**
|
|
1049
|
+
* Detailed explanation of the plan, including what actions will be taken.
|
|
1050
|
+
*/
|
|
1051
|
+
explanation: string;
|
|
1052
|
+
/**
|
|
1053
|
+
* Optional array of milestones tracking progress toward completion.
|
|
1054
|
+
*/
|
|
1055
|
+
milestones?: Milestone[];
|
|
1056
|
+
/**
|
|
1057
|
+
* SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
1058
|
+
* tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
1059
|
+
* on a requirement.
|
|
1060
|
+
*/
|
|
1061
|
+
previousChecksum?: Checksum;
|
|
1062
|
+
/**
|
|
1063
|
+
* Optional digital signature for enhanced trust and non-repudiation.
|
|
1064
|
+
*/
|
|
1065
|
+
signature?: Signature;
|
|
1066
|
+
/**
|
|
1067
|
+
* The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
1068
|
+
* compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
1069
|
+
* 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
1070
|
+
*/
|
|
1071
|
+
type: POAMType;
|
|
1072
|
+
[property: string]: any;
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* A milestone or task within a POA&M remediation plan.
|
|
1076
|
+
*/
|
|
1077
|
+
export interface Milestone {
|
|
1078
|
+
/**
|
|
1079
|
+
* Actual completion timestamp. ISO 8601 format.
|
|
1080
|
+
*/
|
|
1081
|
+
completedAt?: Date;
|
|
1082
|
+
/**
|
|
1083
|
+
* Identity of who completed this milestone.
|
|
1084
|
+
*/
|
|
1085
|
+
completedBy?: Identity;
|
|
1086
|
+
/**
|
|
1087
|
+
* Description of this milestone or task.
|
|
1088
|
+
*/
|
|
1089
|
+
description: string;
|
|
1090
|
+
/**
|
|
1091
|
+
* Estimated completion date. ISO 8601 format.
|
|
1092
|
+
*/
|
|
1093
|
+
estimatedCompletion: Date;
|
|
1094
|
+
/**
|
|
1095
|
+
* Current status of this milestone.
|
|
1096
|
+
*/
|
|
1097
|
+
status: MilestoneStatus;
|
|
1098
|
+
[property: string]: any;
|
|
1099
|
+
}
|
|
1100
|
+
/**
|
|
1101
|
+
* Current status of this milestone.
|
|
1102
|
+
*/
|
|
1103
|
+
export declare enum MilestoneStatus {
|
|
1104
|
+
Completed = "completed",
|
|
1105
|
+
InProgress = "inProgress",
|
|
1106
|
+
Pending = "pending"
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Optional digital signature for enhanced trust and non-repudiation.
|
|
1110
|
+
*
|
|
1111
|
+
* A digital signature following W3C Data Integrity Proofs pattern. Supports hardware
|
|
1112
|
+
* security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other cryptographic
|
|
1113
|
+
* signing methods via JWK, PEM, or Base58 key formats.
|
|
1114
|
+
*
|
|
1115
|
+
* Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
1116
|
+
* security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
1117
|
+
* methods.
|
|
1118
|
+
*
|
|
1119
|
+
* Digital signature for non-repudiation.
|
|
1120
|
+
*
|
|
1121
|
+
* Document-level digital signature covering all amendments.
|
|
1122
|
+
*
|
|
1123
|
+
* Digital signature covering the entire evidence package.
|
|
1124
|
+
*/
|
|
1125
|
+
export interface Signature {
|
|
1126
|
+
/**
|
|
1127
|
+
* Challenge value from the verifier, used in challenge-response authentication.
|
|
1128
|
+
*/
|
|
1129
|
+
challenge?: string;
|
|
1130
|
+
/**
|
|
1131
|
+
* When the signature was created. ISO 8601 format.
|
|
1132
|
+
*/
|
|
1133
|
+
created: Date;
|
|
1134
|
+
/**
|
|
1135
|
+
* The identity that created this signature.
|
|
1136
|
+
*/
|
|
1137
|
+
creator: Identity;
|
|
1138
|
+
/**
|
|
1139
|
+
* Domain restriction for the signature, prevents cross-domain replay attacks.
|
|
1140
|
+
*/
|
|
1141
|
+
domain?: string;
|
|
1142
|
+
/**
|
|
1143
|
+
* Random value to prevent replay attacks.
|
|
1144
|
+
*/
|
|
1145
|
+
nonce?: string;
|
|
1146
|
+
/**
|
|
1147
|
+
* The purpose of this signature. Example: 'attestation', 'authentication',
|
|
1148
|
+
* 'assertionMethod'.
|
|
1149
|
+
*/
|
|
1150
|
+
proofPurpose: string;
|
|
1151
|
+
/**
|
|
1152
|
+
* The base64-encoded or base58-encoded signature value.
|
|
1153
|
+
*/
|
|
1154
|
+
signatureValue: string;
|
|
1155
|
+
/**
|
|
1156
|
+
* The signature suite type. Example: 'JsonWebSignature2020', 'RsaSignature2018',
|
|
1157
|
+
* 'Ed25519Signature2020'.
|
|
1158
|
+
*/
|
|
1159
|
+
type: string;
|
|
1160
|
+
/**
|
|
1161
|
+
* The verification method containing the public key for signature verification.
|
|
1162
|
+
*/
|
|
1163
|
+
verificationMethod: VerificationMethod;
|
|
1164
|
+
[property: string]: any;
|
|
1165
|
+
}
|
|
1166
|
+
/**
|
|
1167
|
+
* The verification method containing the public key for signature verification.
|
|
1168
|
+
*
|
|
1169
|
+
* Verification method containing the public key needed to verify a digital signature.
|
|
1170
|
+
* Supports multiple key formats including JWK (for RSA, EC), PEM, and Base58.
|
|
1171
|
+
*/
|
|
1172
|
+
export interface VerificationMethod {
|
|
1173
|
+
/**
|
|
1174
|
+
* The entity that controls this verification method. Can be a DID, URI, or other identifier.
|
|
1175
|
+
*/
|
|
1176
|
+
controller: string;
|
|
1177
|
+
/**
|
|
1178
|
+
* Public key in Base58 format, commonly used with Ed25519 keys.
|
|
1179
|
+
*/
|
|
1180
|
+
publicKeyBase58?: string;
|
|
1181
|
+
/**
|
|
1182
|
+
* Public key in JSON Web Key format.
|
|
1183
|
+
*/
|
|
1184
|
+
publicKeyJwk?: {
|
|
1185
|
+
[key: string]: any;
|
|
1186
|
+
};
|
|
1187
|
+
/**
|
|
1188
|
+
* Public key in PEM format. Example: '-----BEGIN PUBLIC KEY-----...-----END PUBLIC
|
|
1189
|
+
* KEY-----'.
|
|
1190
|
+
*/
|
|
1191
|
+
publicKeyPem?: string;
|
|
1192
|
+
/**
|
|
1193
|
+
* The type of verification method. Example: 'JsonWebKey2020', 'RsaVerificationKey2018',
|
|
1194
|
+
* 'Ed25519VerificationKey2020'.
|
|
1195
|
+
*/
|
|
1196
|
+
type: string;
|
|
1197
|
+
[property: string]: any;
|
|
1198
|
+
}
|
|
1199
|
+
/**
|
|
1200
|
+
* The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
1201
|
+
* compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
1202
|
+
* 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
1203
|
+
*/
|
|
1204
|
+
export declare enum POAMType {
|
|
1205
|
+
Mitigation = "mitigation",
|
|
1206
|
+
Remediation = "remediation",
|
|
1207
|
+
RiskAcceptance = "riskAcceptance",
|
|
1208
|
+
VendorDependency = "vendorDependency"
|
|
1209
|
+
}
|
|
1210
|
+
/**
|
|
1211
|
+
* A reference to an external document.
|
|
1212
|
+
*
|
|
1213
|
+
* A reference using the 'ref' field.
|
|
1214
|
+
*
|
|
1215
|
+
* A URL pointing at the reference.
|
|
1216
|
+
*
|
|
1217
|
+
* A URI pointing at the reference.
|
|
1218
|
+
*/
|
|
1219
|
+
export interface Reference {
|
|
1220
|
+
ref?: {
|
|
1221
|
+
[key: string]: any;
|
|
1222
|
+
}[] | string;
|
|
1223
|
+
url?: string;
|
|
1224
|
+
uri?: string;
|
|
1225
|
+
[property: string]: any;
|
|
1226
|
+
}
|
|
1227
|
+
/**
|
|
1228
|
+
* A test within a requirement and its results and findings such as how long it took to run.
|
|
1229
|
+
*/
|
|
1230
|
+
export interface RequirementResult {
|
|
1231
|
+
/**
|
|
1232
|
+
* The stacktrace/backtrace of the exception if one occurred.
|
|
1233
|
+
*/
|
|
1234
|
+
backtrace?: string[];
|
|
1235
|
+
/**
|
|
1236
|
+
* A description of this test. Example: 'limits.conf * is expected to include ["hard",
|
|
1237
|
+
* "maxlogins", "10"]'.
|
|
1238
|
+
*/
|
|
1239
|
+
codeDesc: string;
|
|
1240
|
+
/**
|
|
1241
|
+
* The type of exception if an exception was thrown.
|
|
1242
|
+
*/
|
|
1243
|
+
exception?: string;
|
|
1244
|
+
/**
|
|
1245
|
+
* An explanation of the test result. Typically provided for failed tests, errors, or to
|
|
1246
|
+
* explain why a test was not applicable or not reviewed.
|
|
1247
|
+
*/
|
|
1248
|
+
message?: string;
|
|
1249
|
+
/**
|
|
1250
|
+
* The resource used in the test. Example: 'file', 'command', 'service'.
|
|
1251
|
+
*/
|
|
1252
|
+
resource?: string;
|
|
1253
|
+
/**
|
|
1254
|
+
* The unique identifier of the resource. Example: '/etc/passwd'.
|
|
1255
|
+
*/
|
|
1256
|
+
resourceId?: string;
|
|
1257
|
+
/**
|
|
1258
|
+
* The execution time in seconds for the test.
|
|
1259
|
+
*/
|
|
1260
|
+
runTime?: number;
|
|
1261
|
+
/**
|
|
1262
|
+
* The time at which the test started.
|
|
1263
|
+
*/
|
|
1264
|
+
startTime: Date;
|
|
1265
|
+
/**
|
|
1266
|
+
* The status of this test within the requirement. Example: 'failed'.
|
|
1267
|
+
*/
|
|
1268
|
+
status: ResultStatus;
|
|
1269
|
+
[property: string]: any;
|
|
1270
|
+
}
|
|
1271
|
+
/**
|
|
1272
|
+
* Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
1273
|
+
* clarity.
|
|
1274
|
+
*
|
|
1275
|
+
* Severity rating for a requirement. Typically derived from the numeric impact score.
|
|
1276
|
+
*/
|
|
1277
|
+
export declare enum Severity {
|
|
1278
|
+
Critical = "critical",
|
|
1279
|
+
High = "high",
|
|
1280
|
+
Informational = "informational",
|
|
1281
|
+
Low = "low",
|
|
1282
|
+
Medium = "medium"
|
|
1283
|
+
}
|
|
1284
|
+
/**
|
|
1285
|
+
* The explicit location of the requirement within the source code.
|
|
1286
|
+
*
|
|
1287
|
+
* The explicit location of a requirement within source code.
|
|
1288
|
+
*/
|
|
1289
|
+
export interface SourceLocation {
|
|
1290
|
+
/**
|
|
1291
|
+
* The line on which this requirement is located.
|
|
1292
|
+
*/
|
|
1293
|
+
line?: number;
|
|
1294
|
+
/**
|
|
1295
|
+
* Path to the file that this requirement originates from.
|
|
1296
|
+
*/
|
|
1297
|
+
ref?: string;
|
|
1298
|
+
[property: string]: any;
|
|
1299
|
+
}
|
|
1300
|
+
/**
|
|
1301
|
+
* An intentional change to a requirement's compliance status and/or impact score. At least
|
|
1302
|
+
* one of status or impact must be set. Overrides change the effectiveStatus or impact of
|
|
1303
|
+
* the requirement. All overrides must have an expiration date to enforce periodic review.
|
|
1304
|
+
*/
|
|
1305
|
+
export interface StatusOverride {
|
|
1306
|
+
/**
|
|
1307
|
+
* Timestamp when this override was applied. ISO 8601 format.
|
|
1308
|
+
*/
|
|
1309
|
+
appliedAt: Date;
|
|
1310
|
+
/**
|
|
1311
|
+
* Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
1312
|
+
* identifier.
|
|
1313
|
+
*/
|
|
1314
|
+
appliedBy: Identity;
|
|
1315
|
+
/**
|
|
1316
|
+
* Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
1317
|
+
* Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
1318
|
+
* a riskAdjustment. For other override types this is optional context.
|
|
1319
|
+
*/
|
|
1320
|
+
cvss?: Cvss;
|
|
1321
|
+
/**
|
|
1322
|
+
* Supporting evidence for this override, such as screenshots demonstrating manual
|
|
1323
|
+
* verification for attestations.
|
|
1324
|
+
*/
|
|
1325
|
+
evidence?: Evidence[];
|
|
1326
|
+
/**
|
|
1327
|
+
* Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
|
|
1328
|
+
* permanent overrides allowed. ISO 8601 format.
|
|
1329
|
+
*/
|
|
1330
|
+
expiresAt: Date;
|
|
1331
|
+
/**
|
|
1332
|
+
* Override to the requirement's impact score. At least one of status or impact must be set.
|
|
1333
|
+
*/
|
|
1334
|
+
impact?: ImpactOverride;
|
|
1335
|
+
/**
|
|
1336
|
+
* Structured controlled-vocabulary classification for why this override applies.
|
|
1337
|
+
* Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
1338
|
+
* and attestation overrides where the structured category enables filtering and lossless
|
|
1339
|
+
* round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
1340
|
+
* precedent vocabulary and rationale.
|
|
1341
|
+
*/
|
|
1342
|
+
justification?: Justification;
|
|
1343
|
+
/**
|
|
1344
|
+
* SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
1345
|
+
* tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
1346
|
+
* on a requirement.
|
|
1347
|
+
*/
|
|
1348
|
+
previousChecksum?: Checksum;
|
|
1349
|
+
/**
|
|
1350
|
+
* Explanation for why this override was applied.
|
|
1351
|
+
*/
|
|
1352
|
+
reason: string;
|
|
1353
|
+
/**
|
|
1354
|
+
* Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
1355
|
+
* security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
1356
|
+
* methods.
|
|
1357
|
+
*/
|
|
1358
|
+
signature?: Signature;
|
|
1359
|
+
/**
|
|
1360
|
+
* The new status this override sets for the requirement. Optional when only impact is being
|
|
1361
|
+
* overridden.
|
|
1362
|
+
*/
|
|
1363
|
+
status?: ResultStatus;
|
|
1364
|
+
/**
|
|
1365
|
+
* The type of override applied to this requirement.
|
|
1366
|
+
*/
|
|
1367
|
+
type: OverrideType;
|
|
1368
|
+
[property: string]: any;
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* Override to the requirement's impact score. At least one of status or impact must be
|
|
1372
|
+
* set.
|
|
1373
|
+
*
|
|
1374
|
+
* An override to the requirement's impact score. The prior impact is the original result
|
|
1375
|
+
* value or the preceding override in the chain.
|
|
1376
|
+
*/
|
|
1377
|
+
export interface ImpactOverride {
|
|
1378
|
+
/**
|
|
1379
|
+
* The overridden impact score (0.0–1.0).
|
|
1380
|
+
*/
|
|
1381
|
+
value: number;
|
|
1382
|
+
[property: string]: any;
|
|
1383
|
+
}
|
|
1384
|
+
/**
|
|
1385
|
+
* Structured controlled-vocabulary classification for why this override applies.
|
|
1386
|
+
* Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
1387
|
+
* and attestation overrides where the structured category enables filtering and lossless
|
|
1388
|
+
* round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
1389
|
+
* precedent vocabulary and rationale.
|
|
1390
|
+
*
|
|
1391
|
+
* Structured controlled-vocabulary reason for an override, complementing the free-text
|
|
1392
|
+
* 'reason' field. 'reason' carries the human-readable rationale an auditor reads;
|
|
1393
|
+
* 'justification' carries the machine-readable category enabling filtering, aggregation,
|
|
1394
|
+
* and lossless round-trip with structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields
|
|
1395
|
+
* may be present simultaneously and are NOT redundant: 'reason' explains the specific
|
|
1396
|
+
* circumstance; 'justification' classifies it. Authors SHOULD populate both when a
|
|
1397
|
+
* controlled-vocabulary value applies — the enum value alone is not self-explanatory to an
|
|
1398
|
+
* auditor. The vocabulary is drawn from the VEX ecosystem: the first five values are common
|
|
1399
|
+
* across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six (requires_configuration /
|
|
1400
|
+
* requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
|
|
1401
|
+
* / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
|
|
1402
|
+
* path is unreachable in the deployed configuration. The enum is extended additively across
|
|
1403
|
+
* schema versions as other ecosystems' controlled vocabularies are integrated; documents
|
|
1404
|
+
* using values added in a newer schema version will fail validation against an older
|
|
1405
|
+
* schema. Consumers SHOULD validate against the schema version declared by the document
|
|
1406
|
+
* ($schema) rather than assume a fixed vocabulary.
|
|
1407
|
+
*/
|
|
1408
|
+
export declare enum Justification {
|
|
1409
|
+
ComponentNotPresent = "component_not_present",
|
|
1410
|
+
InlineMitigationsAlreadyExist = "inline_mitigations_already_exist",
|
|
1411
|
+
ProtectedAtPerimeter = "protected_at_perimeter",
|
|
1412
|
+
ProtectedAtRuntime = "protected_at_runtime",
|
|
1413
|
+
ProtectedByCompiler = "protected_by_compiler",
|
|
1414
|
+
RequiresConfiguration = "requires_configuration",
|
|
1415
|
+
RequiresDependency = "requires_dependency",
|
|
1416
|
+
RequiresEnvironment = "requires_environment",
|
|
1417
|
+
VulnerableCodeCannotBeControlledByAdversary = "vulnerable_code_cannot_be_controlled_by_adversary",
|
|
1418
|
+
VulnerableCodeNotInExecutePath = "vulnerable_code_not_in_execute_path",
|
|
1419
|
+
VulnerableCodeNotPresent = "vulnerable_code_not_present"
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
1423
|
+
* 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
1424
|
+
* to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
1425
|
+
* exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
1426
|
+
* runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
1427
|
+
* omitted, consumers should not infer a default.
|
|
1428
|
+
*
|
|
1429
|
+
* How a requirement is intended to be verified. Disambiguates the two cases that null
|
|
1430
|
+
* 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
1431
|
+
* to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
1432
|
+
* exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
1433
|
+
* runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
|
|
1434
|
+
* disambiguate from the unrelated Verification_Method DID-context struct.
|
|
1435
|
+
*/
|
|
1436
|
+
export declare enum VerificationMethodEnum {
|
|
1437
|
+
Automated = "automated",
|
|
1438
|
+
Hybrid = "hybrid",
|
|
1439
|
+
ManualByDesign = "manual-by-design",
|
|
1440
|
+
ManualPendingAutomation = "manual-pending-automation"
|
|
1441
|
+
}
|
|
1442
|
+
/**
|
|
1443
|
+
* A supported platform target. Example: the platform name being 'ubuntu'.
|
|
1444
|
+
*/
|
|
1445
|
+
export interface SupportedPlatform {
|
|
1446
|
+
/**
|
|
1447
|
+
* The location of the platform. Can be: 'os', 'aws', 'azure', or 'gcp'.
|
|
1448
|
+
*/
|
|
1449
|
+
platform?: string;
|
|
1450
|
+
/**
|
|
1451
|
+
* The platform family. Example: 'redhat'.
|
|
1452
|
+
*/
|
|
1453
|
+
platformFamily?: string;
|
|
1454
|
+
/**
|
|
1455
|
+
* The platform name - can include wildcards. Example: 'debian'.
|
|
1456
|
+
*/
|
|
1457
|
+
platformName?: string;
|
|
1458
|
+
/**
|
|
1459
|
+
* The release of the platform. Example: '20.04' for 'ubuntu'.
|
|
1460
|
+
*/
|
|
1461
|
+
release?: string;
|
|
1462
|
+
[property: string]: any;
|
|
1463
|
+
}
|
|
1464
|
+
/**
|
|
1465
|
+
* A system component. Uses discriminated union pattern with 'type' field as discriminator.
|
|
1466
|
+
* Superset of Target with identity, external IDs, and SBOM support.
|
|
1467
|
+
*
|
|
1468
|
+
* A physical or virtual server, workstation, or network device.
|
|
1469
|
+
*
|
|
1470
|
+
* Base properties shared by all component types. Extends the Target concept with stable
|
|
1471
|
+
* identity, external references, and SBOM embedding.
|
|
1472
|
+
*
|
|
1473
|
+
* A static container image (not running).
|
|
1474
|
+
*
|
|
1475
|
+
* A running container instance.
|
|
1476
|
+
*
|
|
1477
|
+
* A container orchestration platform (Kubernetes, OpenShift, ECS, etc.).
|
|
1478
|
+
*
|
|
1479
|
+
* A cloud provider account (AWS account, Azure subscription, GCP project).
|
|
1480
|
+
*
|
|
1481
|
+
* A specific cloud resource (EC2 instance, S3 bucket, Azure VM, etc.).
|
|
1482
|
+
*
|
|
1483
|
+
* A code repository (for SAST tools).
|
|
1484
|
+
*
|
|
1485
|
+
* A running application or API (for DAST tools).
|
|
1486
|
+
*
|
|
1487
|
+
* A software artifact or dependency (for SCA tools).
|
|
1488
|
+
*
|
|
1489
|
+
* A network segment or network device.
|
|
1490
|
+
*
|
|
1491
|
+
* A database instance.
|
|
1492
|
+
*/
|
|
1493
|
+
export interface Component {
|
|
1494
|
+
/**
|
|
1495
|
+
* Names of baselines that apply to this component.
|
|
1496
|
+
*/
|
|
1497
|
+
baselineRefs?: string[];
|
|
1498
|
+
/**
|
|
1499
|
+
* Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
|
|
1500
|
+
* hdf-results. Enables cross-document correlation, diffing, and data flow references.
|
|
1501
|
+
*/
|
|
1502
|
+
componentId?: string;
|
|
1503
|
+
/**
|
|
1504
|
+
* Description of this component's role or purpose.
|
|
1505
|
+
*/
|
|
1506
|
+
description?: string;
|
|
1507
|
+
/**
|
|
1508
|
+
* Map of external identifier scheme to value. Well-known schemes: aws (instance ID), azure
|
|
1509
|
+
* (resource ID), cmdb (asset ID), emass (system ID), cve (CVE ID). Custom schemes are
|
|
1510
|
+
* allowed.
|
|
1511
|
+
*/
|
|
1512
|
+
externalIds?: {
|
|
1513
|
+
[key: string]: string;
|
|
1514
|
+
};
|
|
1515
|
+
/**
|
|
1516
|
+
* System-specific overrides for baseline input values.
|
|
1517
|
+
*/
|
|
1518
|
+
inputOverrides?: InputOverride[];
|
|
1519
|
+
/**
|
|
1520
|
+
* Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
1521
|
+
* environment, region, team. Values must be strings.
|
|
1522
|
+
*/
|
|
1523
|
+
labels?: {
|
|
1524
|
+
[key: string]: string;
|
|
1525
|
+
};
|
|
1526
|
+
/**
|
|
1527
|
+
* Human-readable name for this component.
|
|
1528
|
+
*/
|
|
1529
|
+
name: string;
|
|
1530
|
+
/**
|
|
1531
|
+
* Team or individual responsible for this component. Enables per-component ownership when
|
|
1532
|
+
* different teams manage different parts of a system.
|
|
1533
|
+
*/
|
|
1534
|
+
owner?: Identity;
|
|
1535
|
+
/**
|
|
1536
|
+
* Embedded CycloneDX or SPDX SBOM document representing this component's software
|
|
1537
|
+
* inventory. The sbomFormat field determines which format constraints apply.
|
|
1538
|
+
*/
|
|
1539
|
+
sbom?: any;
|
|
1540
|
+
/**
|
|
1541
|
+
* Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
1542
|
+
*/
|
|
1543
|
+
sbomFormat?: SBOMFormat;
|
|
1544
|
+
/**
|
|
1545
|
+
* URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
|
|
1546
|
+
* relative path, absolute URI, or fragment identifier.
|
|
1547
|
+
*/
|
|
1548
|
+
sbomRef?: string;
|
|
1549
|
+
/**
|
|
1550
|
+
* Label selector to match targets belonging to this component during migration. Targets
|
|
1551
|
+
* with matching labels are automatically included.
|
|
1552
|
+
*/
|
|
1553
|
+
targetSelector?: {
|
|
1554
|
+
[key: string]: string;
|
|
1555
|
+
};
|
|
1556
|
+
/**
|
|
1557
|
+
* Component type discriminator. Same values as Target types.
|
|
1558
|
+
*/
|
|
1559
|
+
type: TargetType;
|
|
1560
|
+
/**
|
|
1561
|
+
* Fully qualified domain name.
|
|
1562
|
+
*/
|
|
1563
|
+
fqdn?: string;
|
|
1564
|
+
/**
|
|
1565
|
+
* IP address of the host.
|
|
1566
|
+
*/
|
|
1567
|
+
ipAddress?: string;
|
|
1568
|
+
/**
|
|
1569
|
+
* MAC address in colon-separated hexadecimal format.
|
|
1570
|
+
*/
|
|
1571
|
+
macAddress?: string;
|
|
1572
|
+
/**
|
|
1573
|
+
* Operating system name.
|
|
1574
|
+
*/
|
|
1575
|
+
osName?: string;
|
|
1576
|
+
/**
|
|
1577
|
+
* Operating system version.
|
|
1578
|
+
*/
|
|
1579
|
+
osVersion?: string;
|
|
1580
|
+
/**
|
|
1581
|
+
* Image digest for immutable reference.
|
|
1582
|
+
*/
|
|
1583
|
+
digest?: string;
|
|
1584
|
+
/**
|
|
1585
|
+
* Container image ID.
|
|
1586
|
+
*/
|
|
1587
|
+
imageId?: string;
|
|
1588
|
+
/**
|
|
1589
|
+
* Container registry. Example: 'docker.io'.
|
|
1590
|
+
*/
|
|
1591
|
+
registry?: string;
|
|
1592
|
+
/**
|
|
1593
|
+
* Repository name. Example: 'library/nginx'.
|
|
1594
|
+
*/
|
|
1595
|
+
repository?: string;
|
|
1596
|
+
/**
|
|
1597
|
+
* Image tag. Example: '1.25'.
|
|
1598
|
+
*/
|
|
1599
|
+
tag?: string;
|
|
1600
|
+
/**
|
|
1601
|
+
* Running container ID.
|
|
1602
|
+
*/
|
|
1603
|
+
containerId?: string;
|
|
1604
|
+
/**
|
|
1605
|
+
* Image the container was started from.
|
|
1606
|
+
*/
|
|
1607
|
+
image?: string;
|
|
1608
|
+
/**
|
|
1609
|
+
* Container runtime. Example: 'docker', 'containerd', 'cri-o'.
|
|
1610
|
+
*/
|
|
1611
|
+
runtime?: string;
|
|
1612
|
+
/**
|
|
1613
|
+
* Cluster name.
|
|
1614
|
+
*/
|
|
1615
|
+
clusterName?: string;
|
|
1616
|
+
/**
|
|
1617
|
+
* Namespace within the cluster, if applicable.
|
|
1618
|
+
*/
|
|
1619
|
+
namespace?: string;
|
|
1620
|
+
/**
|
|
1621
|
+
* Platform type. Example: 'kubernetes', 'openshift', 'ecs', 'docker-swarm'.
|
|
1622
|
+
*/
|
|
1623
|
+
platformType?: string;
|
|
1624
|
+
/**
|
|
1625
|
+
* Platform version.
|
|
1626
|
+
*
|
|
1627
|
+
* Application version.
|
|
1628
|
+
*
|
|
1629
|
+
* Package version.
|
|
1630
|
+
*
|
|
1631
|
+
* Database version.
|
|
1632
|
+
*/
|
|
1633
|
+
version?: string;
|
|
1634
|
+
/**
|
|
1635
|
+
* Cloud account identifier.
|
|
1636
|
+
*/
|
|
1637
|
+
accountId?: string;
|
|
1638
|
+
/**
|
|
1639
|
+
* Cloud provider.
|
|
1640
|
+
*/
|
|
1641
|
+
provider?: CloudProvider | null;
|
|
1642
|
+
/**
|
|
1643
|
+
* Cloud region, if applicable.
|
|
1644
|
+
*
|
|
1645
|
+
* Cloud region where the resource resides.
|
|
1646
|
+
*/
|
|
1647
|
+
region?: string;
|
|
1648
|
+
/**
|
|
1649
|
+
* Amazon Resource Name (AWS only).
|
|
1650
|
+
*/
|
|
1651
|
+
arn?: string;
|
|
1652
|
+
/**
|
|
1653
|
+
* Provider-specific resource identifier.
|
|
1654
|
+
*/
|
|
1655
|
+
resourceId?: string;
|
|
1656
|
+
/**
|
|
1657
|
+
* Type of cloud resource. Example: 'ec2:instance', 's3:bucket'.
|
|
1658
|
+
*/
|
|
1659
|
+
resourceType?: string;
|
|
1660
|
+
/**
|
|
1661
|
+
* Branch that was scanned.
|
|
1662
|
+
*/
|
|
1663
|
+
branch?: string;
|
|
1664
|
+
/**
|
|
1665
|
+
* Commit SHA that was scanned.
|
|
1666
|
+
*/
|
|
1667
|
+
commit?: string;
|
|
1668
|
+
/**
|
|
1669
|
+
* Repository URL.
|
|
1670
|
+
*
|
|
1671
|
+
* Application URL (for DAST tools).
|
|
1672
|
+
*/
|
|
1673
|
+
url?: string;
|
|
1674
|
+
/**
|
|
1675
|
+
* Environment. Example: 'production', 'staging', 'development'.
|
|
1676
|
+
*/
|
|
1677
|
+
environment?: string;
|
|
1678
|
+
/**
|
|
1679
|
+
* Package checksum for verification.
|
|
1680
|
+
*/
|
|
1681
|
+
checksum?: string;
|
|
1682
|
+
/**
|
|
1683
|
+
* Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
|
|
1684
|
+
*/
|
|
1685
|
+
packageManager?: string;
|
|
1686
|
+
/**
|
|
1687
|
+
* Package name.
|
|
1688
|
+
*/
|
|
1689
|
+
packageName?: string;
|
|
1690
|
+
/**
|
|
1691
|
+
* Network CIDR block.
|
|
1692
|
+
*/
|
|
1693
|
+
cidr?: string;
|
|
1694
|
+
/**
|
|
1695
|
+
* Network gateway address.
|
|
1696
|
+
*/
|
|
1697
|
+
gateway?: string;
|
|
1698
|
+
/**
|
|
1699
|
+
* Database engine. Example: 'postgresql', 'mysql', 'oracle', 'mssql'.
|
|
1700
|
+
*/
|
|
1701
|
+
engine?: string;
|
|
1702
|
+
/**
|
|
1703
|
+
* Database host.
|
|
1704
|
+
*/
|
|
1705
|
+
host?: string;
|
|
1706
|
+
/**
|
|
1707
|
+
* Database port.
|
|
1708
|
+
*/
|
|
1709
|
+
port?: number;
|
|
1710
|
+
[property: string]: any;
|
|
1711
|
+
}
|
|
1712
|
+
/**
|
|
1713
|
+
* An override of a baseline input value for a specific component. Enables system-specific
|
|
1714
|
+
* tailoring of baseline parameters.
|
|
1715
|
+
*/
|
|
1716
|
+
export interface InputOverride {
|
|
1717
|
+
/**
|
|
1718
|
+
* Identity of the person or system that approved this override.
|
|
1719
|
+
*/
|
|
1720
|
+
approvedBy?: Identity;
|
|
1721
|
+
/**
|
|
1722
|
+
* Name of the baseline this override applies to. If omitted, applies to all baselines that
|
|
1723
|
+
* define this input.
|
|
1724
|
+
*/
|
|
1725
|
+
baselineRef?: string;
|
|
1726
|
+
/**
|
|
1727
|
+
* Name of the input being overridden. Must match an Input.name in the referenced baseline.
|
|
1728
|
+
*/
|
|
1729
|
+
inputName: string;
|
|
1730
|
+
/**
|
|
1731
|
+
* Rationale for why this override is needed.
|
|
1732
|
+
*/
|
|
1733
|
+
justification?: string;
|
|
1734
|
+
/**
|
|
1735
|
+
* The overridden value. Should match the type of the original input.
|
|
1736
|
+
*/
|
|
1737
|
+
value: any;
|
|
1738
|
+
[property: string]: any;
|
|
1739
|
+
}
|
|
1740
|
+
export declare enum CloudProvider {
|
|
1741
|
+
Aws = "aws",
|
|
1742
|
+
Azure = "azure",
|
|
1743
|
+
Gcp = "gcp",
|
|
1744
|
+
Oci = "oci",
|
|
1745
|
+
Other = "other"
|
|
1746
|
+
}
|
|
1747
|
+
/**
|
|
1748
|
+
* Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
1749
|
+
*/
|
|
1750
|
+
export declare enum SBOMFormat {
|
|
1751
|
+
Cyclonedx = "cyclonedx",
|
|
1752
|
+
Spdx = "spdx"
|
|
1753
|
+
}
|
|
1754
|
+
/**
|
|
1755
|
+
* Component type discriminator. Same values as Target types.
|
|
1756
|
+
*/
|
|
1757
|
+
export declare enum TargetType {
|
|
1758
|
+
Application = "application",
|
|
1759
|
+
Artifact = "artifact",
|
|
1760
|
+
CloudAccount = "cloudAccount",
|
|
1761
|
+
CloudResource = "cloudResource",
|
|
1762
|
+
ContainerImage = "containerImage",
|
|
1763
|
+
ContainerInstance = "containerInstance",
|
|
1764
|
+
ContainerPlatform = "containerPlatform",
|
|
1765
|
+
Database = "database",
|
|
1766
|
+
Host = "host",
|
|
1767
|
+
Network = "network",
|
|
1768
|
+
Repository = "repository"
|
|
1769
|
+
}
|
|
1770
|
+
/**
|
|
1771
|
+
* Information about the tool that generated this file.
|
|
1772
|
+
*
|
|
1773
|
+
* Information about the tool that generated this HDF file.
|
|
1774
|
+
*
|
|
1775
|
+
* The tool that generated this file.
|
|
1776
|
+
*
|
|
1777
|
+
* Information about the tool that generated this comparison.
|
|
1778
|
+
*
|
|
1779
|
+
* Information about the tool that generated this system document.
|
|
1780
|
+
*
|
|
1781
|
+
* Information about the tool that generated this plan.
|
|
1782
|
+
*
|
|
1783
|
+
* Information about the tool that generated this document.
|
|
1784
|
+
*/
|
|
1785
|
+
export interface Generator {
|
|
1786
|
+
/**
|
|
1787
|
+
* The name of the software that produced this HDF file. Example: 'gosec-to-hdf'.
|
|
1788
|
+
*/
|
|
1789
|
+
name: string;
|
|
1790
|
+
/**
|
|
1791
|
+
* The version of the tool. Example: '5.22.3'.
|
|
1792
|
+
*/
|
|
1793
|
+
version: string;
|
|
1794
|
+
[property: string]: any;
|
|
1795
|
+
}
|
|
1796
|
+
/**
|
|
1797
|
+
* Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1798
|
+
* scripts, etc.) for fixing failing requirements found in this assessment.
|
|
1799
|
+
*
|
|
1800
|
+
* Reference to automated remediation resources for implementing security controls. Points
|
|
1801
|
+
* to external automation content like Ansible playbooks, Terraform scripts, or
|
|
1802
|
+
* vendor-provided remediation tools.
|
|
1803
|
+
*
|
|
1804
|
+
* Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1805
|
+
* scripts, etc.) for implementing the security controls defined in this baseline.
|
|
1806
|
+
*/
|
|
1807
|
+
export interface Remediation {
|
|
1808
|
+
/**
|
|
1809
|
+
* Optional cryptographic checksum for verifying the integrity of remediation resources
|
|
1810
|
+
* fetched from the URI. Recommended for security when referencing external automation
|
|
1811
|
+
* scripts.
|
|
1812
|
+
*/
|
|
1813
|
+
checksum?: Checksum;
|
|
1814
|
+
/**
|
|
1815
|
+
* URI pointing to automated remediation resources (Ansible playbooks, Terraform scripts,
|
|
1816
|
+
* etc.). Examples: GitHub repository, DISA STIG Supplemental Automation Content,
|
|
1817
|
+
* vendor-provided scripts.
|
|
1818
|
+
*/
|
|
1819
|
+
uri: string;
|
|
1820
|
+
[property: string]: any;
|
|
1821
|
+
}
|
|
1822
|
+
/**
|
|
1823
|
+
* Information about the test execution environment where the security tool was run.
|
|
1824
|
+
* Distinct from targets (what is being tested).
|
|
1825
|
+
*
|
|
1826
|
+
* Information about the test execution environment. This is distinct from the target being
|
|
1827
|
+
* scanned - the runner is where the security tool executes, while targets are what is being
|
|
1828
|
+
* assessed.
|
|
1829
|
+
*/
|
|
1830
|
+
export interface Runner {
|
|
1831
|
+
/**
|
|
1832
|
+
* The CPU architecture of the runner system. Example: 'x86_64', 'arm64', 'aarch64'.
|
|
1833
|
+
*/
|
|
1834
|
+
architecture?: string;
|
|
1835
|
+
/**
|
|
1836
|
+
* The container instance identifier. Example: 'a1b2c3d4e5f6', 'security-scan-job-xyz123'.
|
|
1837
|
+
* Can be a Docker container ID, Kubernetes pod name, or other container runtime identifier.
|
|
1838
|
+
*/
|
|
1839
|
+
containerId?: string;
|
|
1840
|
+
/**
|
|
1841
|
+
* The container image used for the test execution. Example: 'inspec/inspec:latest',
|
|
1842
|
+
* 'ghcr.io/my-org/scanner:v2.1.0'. Useful for CI/CD pipelines where tests run in containers.
|
|
1843
|
+
*/
|
|
1844
|
+
containerImage?: string;
|
|
1845
|
+
/**
|
|
1846
|
+
* The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
|
|
1847
|
+
* 'k8s-node-worker-03'.
|
|
1848
|
+
*/
|
|
1849
|
+
hostname?: string;
|
|
1850
|
+
/**
|
|
1851
|
+
* The name of the runner environment. Examples: 'ubuntu', 'macos', 'windows', 'docker',
|
|
1852
|
+
* 'kubernetes-pod', 'manual'.
|
|
1853
|
+
*/
|
|
1854
|
+
name: string;
|
|
1855
|
+
/**
|
|
1856
|
+
* The identity of the person or system responsible for executing the test. This could be a
|
|
1857
|
+
* human auditor manually completing a checklist, an automated CI/CD system, or a security
|
|
1858
|
+
* tool. Optional field to support both automated and manual HDF generation.
|
|
1859
|
+
*/
|
|
1860
|
+
operator?: Identity;
|
|
1861
|
+
/**
|
|
1862
|
+
* The version/release of the operating system or runtime. Example: '20.04', '13.2', '11'.
|
|
1863
|
+
*/
|
|
1864
|
+
release?: string;
|
|
1865
|
+
[property: string]: any;
|
|
1866
|
+
}
|
|
1867
|
+
/**
|
|
1868
|
+
* Statistics for the assessment run, including duration and result counts.
|
|
1869
|
+
*
|
|
1870
|
+
* Statistics for the assessment run(s) such as duration and result counts.
|
|
1871
|
+
*/
|
|
1872
|
+
export interface Statistics {
|
|
1873
|
+
/**
|
|
1874
|
+
* How long (in seconds) this assessment run took.
|
|
1875
|
+
*/
|
|
1876
|
+
duration?: number;
|
|
1877
|
+
/**
|
|
1878
|
+
* Breakdowns of requirement statistics by result status.
|
|
1879
|
+
*/
|
|
1880
|
+
requirements?: StatisticHash;
|
|
1881
|
+
[property: string]: any;
|
|
1882
|
+
}
|
|
1883
|
+
/**
|
|
1884
|
+
* Breakdowns of requirement statistics by result status.
|
|
1885
|
+
*
|
|
1886
|
+
* Statistics for requirement results, grouped by status.
|
|
1887
|
+
*/
|
|
1888
|
+
export interface StatisticHash {
|
|
1889
|
+
/**
|
|
1890
|
+
* Statistics for requirements that encountered an error during assessment.
|
|
1891
|
+
*/
|
|
1892
|
+
error?: StatisticBlock;
|
|
1893
|
+
/**
|
|
1894
|
+
* Statistics for requirements that failed.
|
|
1895
|
+
*/
|
|
1896
|
+
failed?: StatisticBlock;
|
|
1897
|
+
/**
|
|
1898
|
+
* Statistics for requirements that are not applicable to the target.
|
|
1899
|
+
*/
|
|
1900
|
+
notApplicable?: StatisticBlock;
|
|
1901
|
+
/**
|
|
1902
|
+
* Statistics for requirements that were not reviewed (manual check required).
|
|
1903
|
+
*/
|
|
1904
|
+
notReviewed?: StatisticBlock;
|
|
1905
|
+
/**
|
|
1906
|
+
* Statistics for requirements that passed.
|
|
1907
|
+
*/
|
|
1908
|
+
passed?: StatisticBlock;
|
|
1909
|
+
[property: string]: any;
|
|
1910
|
+
}
|
|
1911
|
+
/**
|
|
1912
|
+
* Statistics for requirements that encountered an error during assessment.
|
|
1913
|
+
*
|
|
1914
|
+
* Statistics for a given item, such as the total count.
|
|
1915
|
+
*
|
|
1916
|
+
* Statistics for requirements that failed.
|
|
1917
|
+
*
|
|
1918
|
+
* Statistics for requirements that are not applicable to the target.
|
|
1919
|
+
*
|
|
1920
|
+
* Statistics for requirements that were not reviewed (manual check required).
|
|
1921
|
+
*
|
|
1922
|
+
* Statistics for requirements that passed.
|
|
1923
|
+
*/
|
|
1924
|
+
export interface StatisticBlock {
|
|
1925
|
+
/**
|
|
1926
|
+
* The total count. Example: the total number of requirements in a given category for a run.
|
|
1927
|
+
*/
|
|
1928
|
+
total: number;
|
|
1929
|
+
[property: string]: any;
|
|
1930
|
+
}
|
|
1931
|
+
/**
|
|
1932
|
+
* The security tool that produced the assessment data in this file.
|
|
1933
|
+
*
|
|
1934
|
+
* The security tool that produced the assessment data represented in this HDF file. Aligns
|
|
1935
|
+
* with SARIF, OSCAL, and CycloneDX terminology.
|
|
1936
|
+
*
|
|
1937
|
+
* The security tool that produced the assessment data in this source.
|
|
1938
|
+
*/
|
|
1939
|
+
export interface Tool {
|
|
1940
|
+
/**
|
|
1941
|
+
* The file format, if it is a recognized named format shared by multiple tools. Examples:
|
|
1942
|
+
* 'SARIF', 'XCCDF'. Omit for tool-specific formats where the tool name already implies the
|
|
1943
|
+
* format (Nessus XML, gosec JSON).
|
|
1944
|
+
*/
|
|
1945
|
+
format?: string;
|
|
1946
|
+
/**
|
|
1947
|
+
* The name of the security tool that produced the data. Examples: 'gosec', 'Semgrep',
|
|
1948
|
+
* 'OpenSCAP', 'AWS Config', 'Nessus'. Omit if the tool cannot be identified.
|
|
1949
|
+
*/
|
|
1950
|
+
name?: string;
|
|
1951
|
+
/**
|
|
1952
|
+
* Version of the source tool, if available in the tool's output. Example: '5.22.3'.
|
|
1953
|
+
*/
|
|
1954
|
+
version?: string;
|
|
1955
|
+
[property: string]: any;
|
|
1956
|
+
}
|
|
1957
|
+
/**
|
|
1958
|
+
* Information on the set of requirements that can be assessed, including baseline metadata
|
|
1959
|
+
* and requirement definitions.
|
|
1960
|
+
*
|
|
1961
|
+
* Shared metadata fields for baselines. Used in both standalone baseline documents and
|
|
1962
|
+
* evaluated baseline results.
|
|
1963
|
+
*/
|
|
1964
|
+
export interface HDFBaseline {
|
|
1965
|
+
/**
|
|
1966
|
+
* The set of dependencies this baseline depends on.
|
|
1967
|
+
*/
|
|
1968
|
+
depends?: Dependency[];
|
|
1969
|
+
/**
|
|
1970
|
+
* The tool that generated this file.
|
|
1971
|
+
*/
|
|
1972
|
+
generator?: Generator;
|
|
1973
|
+
/**
|
|
1974
|
+
* A set of descriptions for the requirement groups.
|
|
1975
|
+
*/
|
|
1976
|
+
groups?: RequirementGroup[];
|
|
1977
|
+
/**
|
|
1978
|
+
* The input(s) or attribute(s) to be used in the run.
|
|
1979
|
+
*/
|
|
1980
|
+
inputs?: Input[];
|
|
1981
|
+
/**
|
|
1982
|
+
* Cryptographic integrity information for verifying this baseline has not been tampered
|
|
1983
|
+
* with.
|
|
1984
|
+
*/
|
|
1985
|
+
integrity?: Integrity;
|
|
1986
|
+
/**
|
|
1987
|
+
* Optional reference to automated remediation resources (Ansible playbooks, Terraform
|
|
1988
|
+
* scripts, etc.) for implementing the security controls defined in this baseline.
|
|
1989
|
+
*/
|
|
1990
|
+
remediation?: Remediation;
|
|
1991
|
+
/**
|
|
1992
|
+
* The set of requirements - contains no findings as the assessment has not yet occurred.
|
|
1993
|
+
*/
|
|
1994
|
+
requirements: BaselineRequirement[];
|
|
1995
|
+
/**
|
|
1996
|
+
* The name - must be unique.
|
|
1997
|
+
*/
|
|
1998
|
+
name: string;
|
|
1999
|
+
/**
|
|
2000
|
+
* The copyright holder(s).
|
|
2001
|
+
*/
|
|
2002
|
+
copyright?: string;
|
|
2003
|
+
/**
|
|
2004
|
+
* The email address or other contact information of the copyright holder(s).
|
|
2005
|
+
*/
|
|
2006
|
+
copyrightEmail?: string;
|
|
2007
|
+
/**
|
|
2008
|
+
* Optional key-value labels for flexible grouping. Well-known keys: system, component,
|
|
2009
|
+
* environment, region, team. Values must be strings.
|
|
2010
|
+
*/
|
|
2011
|
+
labels?: {
|
|
2012
|
+
[key: string]: string;
|
|
2013
|
+
};
|
|
2014
|
+
/**
|
|
2015
|
+
* The copyright license. Example: 'Apache-2.0'.
|
|
2016
|
+
*/
|
|
2017
|
+
license?: string;
|
|
2018
|
+
/**
|
|
2019
|
+
* The maintainer(s).
|
|
2020
|
+
*/
|
|
2021
|
+
maintainer?: string;
|
|
2022
|
+
/**
|
|
2023
|
+
* The status. Example: 'loaded'.
|
|
2024
|
+
*/
|
|
2025
|
+
status?: string;
|
|
2026
|
+
/**
|
|
2027
|
+
* The summary. Example: the Security Technical Implementation Guide (STIG) header.
|
|
2028
|
+
*/
|
|
2029
|
+
summary?: string;
|
|
2030
|
+
/**
|
|
2031
|
+
* The set of supported platform targets.
|
|
2032
|
+
*/
|
|
2033
|
+
supports?: SupportedPlatform[];
|
|
2034
|
+
/**
|
|
2035
|
+
* The title - should be human readable.
|
|
2036
|
+
*/
|
|
2037
|
+
title?: string;
|
|
2038
|
+
/**
|
|
2039
|
+
* The version of the baseline.
|
|
2040
|
+
*/
|
|
2041
|
+
version?: string;
|
|
2042
|
+
[property: string]: any;
|
|
2043
|
+
}
|
|
2044
|
+
/**
|
|
2045
|
+
* A requirement definition without assessment results.
|
|
2046
|
+
*
|
|
2047
|
+
* Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
2048
|
+
* Contains the fundamental requirement definition without assessment results.
|
|
2049
|
+
*/
|
|
2050
|
+
export interface BaselineRequirement {
|
|
2051
|
+
/**
|
|
2052
|
+
* Array of labeled descriptions. At least one description with label 'default' must be
|
|
2053
|
+
* present. Convention: place default description first. Common labels: 'default', 'check',
|
|
2054
|
+
* 'fix', 'rationale'.
|
|
2055
|
+
*/
|
|
2056
|
+
descriptions: Description[];
|
|
2057
|
+
/**
|
|
2058
|
+
* Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
2059
|
+
* clarity.
|
|
2060
|
+
*/
|
|
2061
|
+
severity?: Severity;
|
|
2062
|
+
/**
|
|
2063
|
+
* The requirement identifier. Example: 'SV-238196'.
|
|
2064
|
+
*/
|
|
2065
|
+
id: string;
|
|
2066
|
+
/**
|
|
2067
|
+
* The impactfulness or severity (0.0 to 1.0).
|
|
2068
|
+
*/
|
|
2069
|
+
impact: number;
|
|
2070
|
+
/**
|
|
2071
|
+
* A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
2072
|
+
*/
|
|
2073
|
+
tags: {
|
|
2074
|
+
[key: string]: any;
|
|
2075
|
+
};
|
|
2076
|
+
/**
|
|
2077
|
+
* Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
2078
|
+
* weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
2079
|
+
* FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
2080
|
+
* memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
2081
|
+
* Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
2082
|
+
* convention.
|
|
2083
|
+
*/
|
|
2084
|
+
applicability?: Applicability;
|
|
2085
|
+
/**
|
|
2086
|
+
* The raw source code of the requirement. Set to null for manual-only requirements or
|
|
2087
|
+
* requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
2088
|
+
* from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
2089
|
+
* underlying source code.
|
|
2090
|
+
*/
|
|
2091
|
+
code?: string;
|
|
2092
|
+
/**
|
|
2093
|
+
* Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
2094
|
+
* categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
2095
|
+
* process; 'technical' = an enforced technical configuration; 'management' = a
|
|
2096
|
+
* programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
2097
|
+
* AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
2098
|
+
* family/id but should not assume a default.
|
|
2099
|
+
*/
|
|
2100
|
+
controlType?: ControlType;
|
|
2101
|
+
/**
|
|
2102
|
+
* The set of references to external documents.
|
|
2103
|
+
*/
|
|
2104
|
+
refs?: Reference[];
|
|
2105
|
+
/**
|
|
2106
|
+
* The explicit location of the requirement within the source code.
|
|
2107
|
+
*/
|
|
2108
|
+
sourceLocation?: SourceLocation;
|
|
2109
|
+
/**
|
|
2110
|
+
* The title - is nullable.
|
|
2111
|
+
*/
|
|
2112
|
+
title?: string;
|
|
2113
|
+
/**
|
|
2114
|
+
* How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
2115
|
+
* 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
2116
|
+
* to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
2117
|
+
* exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
2118
|
+
* runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
2119
|
+
* omitted, consumers should not infer a default.
|
|
2120
|
+
*/
|
|
2121
|
+
verificationMethod?: VerificationMethodEnum;
|
|
2122
|
+
[property: string]: any;
|
|
2123
|
+
}
|
|
2124
|
+
/**
|
|
2125
|
+
* Structured comparison between two or more HDF security assessment documents. Supports
|
|
2126
|
+
* temporal, baseline, fleet, and multi-source comparison modes.
|
|
2127
|
+
*/
|
|
2128
|
+
export interface HDFComparison {
|
|
2129
|
+
/**
|
|
2130
|
+
* Map of annotation IDs to annotation objects, providing context or action items for
|
|
2131
|
+
* requirement diffs.
|
|
2132
|
+
*/
|
|
2133
|
+
annotations?: {
|
|
2134
|
+
[key: string]: Annotation;
|
|
2135
|
+
};
|
|
2136
|
+
/**
|
|
2137
|
+
* Comparison of baselines between sources.
|
|
2138
|
+
*/
|
|
2139
|
+
baselineDiffs?: BaselineDiff[];
|
|
2140
|
+
/**
|
|
2141
|
+
* The mode of comparison being performed.
|
|
2142
|
+
*/
|
|
2143
|
+
comparisonMode: ComparisonMode;
|
|
2144
|
+
/**
|
|
2145
|
+
* Comparison of components between two system documents. Used in systemDrift mode.
|
|
2146
|
+
*/
|
|
2147
|
+
componentDiffs?: ComponentDiff[];
|
|
2148
|
+
/**
|
|
2149
|
+
* External/metadata changes separate from status changes (Terraform pattern).
|
|
2150
|
+
*/
|
|
2151
|
+
drift?: RequirementDiff[];
|
|
2152
|
+
/**
|
|
2153
|
+
* Reserved for tool-specific data not defined in the HDF standard.
|
|
2154
|
+
*/
|
|
2155
|
+
extensions?: {
|
|
2156
|
+
[key: string]: any;
|
|
2157
|
+
};
|
|
2158
|
+
/**
|
|
2159
|
+
* Schema version for this comparison format.
|
|
2160
|
+
*/
|
|
2161
|
+
formatVersion: FormatVersion;
|
|
2162
|
+
/**
|
|
2163
|
+
* Information about the tool that generated this comparison.
|
|
2164
|
+
*/
|
|
2165
|
+
generator?: Generator;
|
|
2166
|
+
/**
|
|
2167
|
+
* Cryptographic integrity information for verifying this comparison document.
|
|
2168
|
+
*/
|
|
2169
|
+
integrity?: Integrity;
|
|
2170
|
+
/**
|
|
2171
|
+
* Configuration for how requirements were matched across sources.
|
|
2172
|
+
*/
|
|
2173
|
+
matching?: MatchingConfig;
|
|
2174
|
+
/**
|
|
2175
|
+
* Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
|
|
2176
|
+
*/
|
|
2177
|
+
packageDiffs?: PackageDiff[];
|
|
2178
|
+
/**
|
|
2179
|
+
* Detailed comparison of individual requirements between sources.
|
|
2180
|
+
*/
|
|
2181
|
+
requirementDiffs: RequirementDiff[];
|
|
2182
|
+
/**
|
|
2183
|
+
* The source documents being compared. At least two sources are required.
|
|
2184
|
+
*/
|
|
2185
|
+
sources: Source[];
|
|
2186
|
+
/**
|
|
2187
|
+
* Summary statistics for the overall comparison.
|
|
2188
|
+
*/
|
|
2189
|
+
summary: ComparisonSummary;
|
|
2190
|
+
/**
|
|
2191
|
+
* URI identifying the system being compared in systemDrift mode.
|
|
2192
|
+
*/
|
|
2193
|
+
systemRef?: string;
|
|
2194
|
+
/**
|
|
2195
|
+
* When this comparison was performed.
|
|
2196
|
+
*/
|
|
2197
|
+
timestamp?: Date;
|
|
2198
|
+
[property: string]: any;
|
|
2199
|
+
}
|
|
2200
|
+
/**
|
|
2201
|
+
* An annotation attached to a comparison, providing context or action items.
|
|
2202
|
+
*/
|
|
2203
|
+
export interface Annotation {
|
|
2204
|
+
/**
|
|
2205
|
+
* The category of this annotation.
|
|
2206
|
+
*/
|
|
2207
|
+
category?: AnnotationCategory;
|
|
2208
|
+
/**
|
|
2209
|
+
* Detailed description of the annotation.
|
|
2210
|
+
*/
|
|
2211
|
+
description?: string;
|
|
2212
|
+
/**
|
|
2213
|
+
* Human-readable label for this annotation.
|
|
2214
|
+
*/
|
|
2215
|
+
label: string;
|
|
2216
|
+
/**
|
|
2217
|
+
* Whether this annotation requires human confirmation before acting on it.
|
|
2218
|
+
*/
|
|
2219
|
+
needsConfirmation?: boolean;
|
|
2220
|
+
[property: string]: any;
|
|
2221
|
+
}
|
|
2222
|
+
/**
|
|
2223
|
+
* The category of this annotation.
|
|
2224
|
+
*
|
|
2225
|
+
* The category of an annotation attached to a comparison.
|
|
2226
|
+
*/
|
|
2227
|
+
export declare enum AnnotationCategory {
|
|
2228
|
+
BaselineChange = "baselineChange",
|
|
2229
|
+
Drift = "drift",
|
|
2230
|
+
Remediation = "remediation",
|
|
2231
|
+
ScannerNote = "scannerNote",
|
|
2232
|
+
Waiver = "waiver"
|
|
2233
|
+
}
|
|
2234
|
+
/**
|
|
2235
|
+
* Comparison of a baseline between sources.
|
|
2236
|
+
*/
|
|
2237
|
+
export interface BaselineDiff {
|
|
2238
|
+
/**
|
|
2239
|
+
* The source of any ID mapping used to correlate requirements across baseline versions.
|
|
2240
|
+
*/
|
|
2241
|
+
mappingSource?: string;
|
|
2242
|
+
/**
|
|
2243
|
+
* Name of the baseline being compared.
|
|
2244
|
+
*/
|
|
2245
|
+
name: string;
|
|
2246
|
+
/**
|
|
2247
|
+
* Version of the baseline in the new source.
|
|
2248
|
+
*/
|
|
2249
|
+
newVersion?: string;
|
|
2250
|
+
/**
|
|
2251
|
+
* Version of the baseline in the old source.
|
|
2252
|
+
*/
|
|
2253
|
+
oldVersion?: string;
|
|
2254
|
+
/**
|
|
2255
|
+
* The state of this baseline in the comparison.
|
|
2256
|
+
*/
|
|
2257
|
+
state: BaselineDiffState;
|
|
2258
|
+
[property: string]: any;
|
|
2259
|
+
}
|
|
2260
|
+
/**
|
|
2261
|
+
* The state of this baseline in the comparison.
|
|
2262
|
+
*
|
|
2263
|
+
* The state of this component in the comparison.
|
|
2264
|
+
*/
|
|
2265
|
+
export declare enum BaselineDiffState {
|
|
2266
|
+
Absent = "absent",
|
|
2267
|
+
New = "new",
|
|
2268
|
+
Unchanged = "unchanged",
|
|
2269
|
+
Updated = "updated"
|
|
2270
|
+
}
|
|
2271
|
+
/**
|
|
2272
|
+
* The mode of comparison being performed.
|
|
2273
|
+
*
|
|
2274
|
+
* The mode of comparison. 'temporal' compares the same target over time. 'baseline'
|
|
2275
|
+
* compares against a golden reference. 'fleet' compares across multiple systems.
|
|
2276
|
+
* 'multiSource' compares outputs from different scanners. 'baselineEvolution' compares two
|
|
2277
|
+
* baseline documents to detect requirement changes between versions. 'systemDrift' compares
|
|
2278
|
+
* two system documents to detect component-level changes.
|
|
2279
|
+
*/
|
|
2280
|
+
export declare enum ComparisonMode {
|
|
2281
|
+
Baseline = "baseline",
|
|
2282
|
+
BaselineEvolution = "baselineEvolution",
|
|
2283
|
+
Fleet = "fleet",
|
|
2284
|
+
MultiSource = "multiSource",
|
|
2285
|
+
SystemDrift = "systemDrift",
|
|
2286
|
+
Temporal = "temporal"
|
|
2287
|
+
}
|
|
2288
|
+
/**
|
|
2289
|
+
* Comparison of a single component between two system document versions.
|
|
2290
|
+
*/
|
|
2291
|
+
export interface ComponentDiff {
|
|
2292
|
+
/**
|
|
2293
|
+
* Component snapshot from the new system document. Null when state is 'absent'.
|
|
2294
|
+
*/
|
|
2295
|
+
after?: any;
|
|
2296
|
+
/**
|
|
2297
|
+
* Component snapshot from the old system document. Null when state is 'new'.
|
|
2298
|
+
*/
|
|
2299
|
+
before?: any;
|
|
2300
|
+
/**
|
|
2301
|
+
* Detailed field-level changes between the before and after component snapshots.
|
|
2302
|
+
*/
|
|
2303
|
+
fieldChanges?: FieldChange[];
|
|
2304
|
+
/**
|
|
2305
|
+
* Component name used for matching across system versions.
|
|
2306
|
+
*/
|
|
2307
|
+
name: string;
|
|
2308
|
+
/**
|
|
2309
|
+
* The state of this component in the comparison.
|
|
2310
|
+
*/
|
|
2311
|
+
state: BaselineDiffState;
|
|
2312
|
+
[property: string]: any;
|
|
2313
|
+
}
|
|
2314
|
+
/**
|
|
2315
|
+
* A single field-level change between two versions of a requirement.
|
|
2316
|
+
*/
|
|
2317
|
+
export interface FieldChange {
|
|
2318
|
+
/**
|
|
2319
|
+
* The new value of the field (for 'add' and 'replace' operations).
|
|
2320
|
+
*/
|
|
2321
|
+
newValue?: any;
|
|
2322
|
+
/**
|
|
2323
|
+
* The previous value of the field (for 'remove' and 'replace' operations).
|
|
2324
|
+
*/
|
|
2325
|
+
oldValue?: any;
|
|
2326
|
+
/**
|
|
2327
|
+
* The type of change operation.
|
|
2328
|
+
*/
|
|
2329
|
+
op: Op;
|
|
2330
|
+
/**
|
|
2331
|
+
* JSON Pointer path to the changed field.
|
|
2332
|
+
*/
|
|
2333
|
+
path: string;
|
|
2334
|
+
[property: string]: any;
|
|
2335
|
+
}
|
|
2336
|
+
/**
|
|
2337
|
+
* The type of change operation.
|
|
2338
|
+
*/
|
|
2339
|
+
export declare enum Op {
|
|
2340
|
+
Add = "add",
|
|
2341
|
+
Remove = "remove",
|
|
2342
|
+
Replace = "replace"
|
|
2343
|
+
}
|
|
2344
|
+
/**
|
|
2345
|
+
* A comparison of a single requirement between sources, including state, changes, and full
|
|
2346
|
+
* before/after snapshots.
|
|
2347
|
+
*/
|
|
2348
|
+
export interface RequirementDiff {
|
|
2349
|
+
/**
|
|
2350
|
+
* The requirement as it appeared in the new source. Null when state is 'absent'.
|
|
2351
|
+
*/
|
|
2352
|
+
after: any;
|
|
2353
|
+
/**
|
|
2354
|
+
* Sensitive data from the new source that should not be included in the main after snapshot.
|
|
2355
|
+
*/
|
|
2356
|
+
afterSensitive?: {
|
|
2357
|
+
[key: string]: any;
|
|
2358
|
+
};
|
|
2359
|
+
/**
|
|
2360
|
+
* IDs of annotations attached to this requirement diff.
|
|
2361
|
+
*/
|
|
2362
|
+
annotationIds?: string[];
|
|
2363
|
+
/**
|
|
2364
|
+
* The requirement as it appeared in the old/reference source. Null when state is 'new'.
|
|
2365
|
+
*/
|
|
2366
|
+
before: any;
|
|
2367
|
+
/**
|
|
2368
|
+
* Sensitive data from the old source that should not be included in the main before
|
|
2369
|
+
* snapshot.
|
|
2370
|
+
*/
|
|
2371
|
+
beforeSensitive?: {
|
|
2372
|
+
[key: string]: any;
|
|
2373
|
+
};
|
|
2374
|
+
/**
|
|
2375
|
+
* The reasons for the state change.
|
|
2376
|
+
*/
|
|
2377
|
+
changeReasons: ChangeReason[];
|
|
2378
|
+
/**
|
|
2379
|
+
* Conflicts between multiple scanner results for this requirement.
|
|
2380
|
+
*/
|
|
2381
|
+
conflicts?: ScannerConflict[];
|
|
2382
|
+
/**
|
|
2383
|
+
* Detailed field-level changes between the before and after versions.
|
|
2384
|
+
*/
|
|
2385
|
+
fieldChanges: FieldChange[];
|
|
2386
|
+
/**
|
|
2387
|
+
* The canonical requirement identifier used for this diff.
|
|
2388
|
+
*/
|
|
2389
|
+
id: string;
|
|
2390
|
+
/**
|
|
2391
|
+
* Confidence score for the match (0-1).
|
|
2392
|
+
*/
|
|
2393
|
+
matchConfidence?: number;
|
|
2394
|
+
/**
|
|
2395
|
+
* Whether the match was manually confirmed by a human.
|
|
2396
|
+
*/
|
|
2397
|
+
matchManual?: boolean;
|
|
2398
|
+
/**
|
|
2399
|
+
* The strategy that was used to match this requirement across sources.
|
|
2400
|
+
*/
|
|
2401
|
+
matchStrategy?: MatchStrategy;
|
|
2402
|
+
/**
|
|
2403
|
+
* The effective status of the requirement in the new source.
|
|
2404
|
+
*/
|
|
2405
|
+
newEffectiveStatus?: string;
|
|
2406
|
+
/**
|
|
2407
|
+
* The requirement ID in the new source, if different from the canonical id.
|
|
2408
|
+
*/
|
|
2409
|
+
newId?: string;
|
|
2410
|
+
/**
|
|
2411
|
+
* The impact score of the requirement in the new source (0-1).
|
|
2412
|
+
*/
|
|
2413
|
+
newImpact?: number;
|
|
2414
|
+
/**
|
|
2415
|
+
* The effective status of the requirement in the old source.
|
|
2416
|
+
*/
|
|
2417
|
+
oldEffectiveStatus?: string;
|
|
2418
|
+
/**
|
|
2419
|
+
* The requirement ID in the old source, if different from the canonical id.
|
|
2420
|
+
*/
|
|
2421
|
+
oldId?: string;
|
|
2422
|
+
/**
|
|
2423
|
+
* The impact score of the requirement in the old source (0-1).
|
|
2424
|
+
*/
|
|
2425
|
+
oldImpact?: number;
|
|
2426
|
+
/**
|
|
2427
|
+
* Index into the sources array for multi-source comparisons.
|
|
2428
|
+
*/
|
|
2429
|
+
sourceIndex?: number;
|
|
2430
|
+
/**
|
|
2431
|
+
* The state of this requirement in the comparison.
|
|
2432
|
+
*/
|
|
2433
|
+
state: RequirementState;
|
|
2434
|
+
/**
|
|
2435
|
+
* The requirement title for human readability.
|
|
2436
|
+
*/
|
|
2437
|
+
title?: string;
|
|
2438
|
+
[property: string]: any;
|
|
2439
|
+
}
|
|
2440
|
+
/**
|
|
2441
|
+
* The reason a requirement's state changed between sources.
|
|
2442
|
+
*/
|
|
2443
|
+
export declare enum ChangeReason {
|
|
2444
|
+
BaselineUpgraded = "baselineUpgraded",
|
|
2445
|
+
ConfigChanged = "configChanged",
|
|
2446
|
+
ControlMapped = "controlMapped",
|
|
2447
|
+
ImpactChanged = "impactChanged",
|
|
2448
|
+
MetadataChanged = "metadataChanged",
|
|
2449
|
+
OverrideAdded = "overrideAdded",
|
|
2450
|
+
OverrideExpired = "overrideExpired",
|
|
2451
|
+
OverrideModified = "overrideModified",
|
|
2452
|
+
OverrideRemoved = "overrideRemoved",
|
|
2453
|
+
ResultChanged = "resultChanged",
|
|
2454
|
+
ScannerChanged = "scannerChanged",
|
|
2455
|
+
TargetChanged = "targetChanged"
|
|
2456
|
+
}
|
|
2457
|
+
/**
|
|
2458
|
+
* A conflict between scanner results for the same requirement.
|
|
2459
|
+
*/
|
|
2460
|
+
export interface ScannerConflict {
|
|
2461
|
+
/**
|
|
2462
|
+
* The field where the conflict occurs.
|
|
2463
|
+
*/
|
|
2464
|
+
field: string;
|
|
2465
|
+
/**
|
|
2466
|
+
* How the conflict was resolved.
|
|
2467
|
+
*/
|
|
2468
|
+
resolution?: ConflictResolution;
|
|
2469
|
+
/**
|
|
2470
|
+
* Index of the source whose value was chosen as the resolution.
|
|
2471
|
+
*/
|
|
2472
|
+
resolvedIndex?: number;
|
|
2473
|
+
/**
|
|
2474
|
+
* The conflicting values from each source.
|
|
2475
|
+
*/
|
|
2476
|
+
values: Value[];
|
|
2477
|
+
[property: string]: any;
|
|
2478
|
+
}
|
|
2479
|
+
/**
|
|
2480
|
+
* How the conflict was resolved.
|
|
2481
|
+
*
|
|
2482
|
+
* How a conflict between multiple scanner results was resolved.
|
|
2483
|
+
*/
|
|
2484
|
+
export declare enum ConflictResolution {
|
|
2485
|
+
Manual = "manual",
|
|
2486
|
+
MostRecent = "mostRecent",
|
|
2487
|
+
MostSevere = "mostSevere",
|
|
2488
|
+
Unresolved = "unresolved"
|
|
2489
|
+
}
|
|
2490
|
+
export interface Value {
|
|
2491
|
+
/**
|
|
2492
|
+
* Zero-based index into the sources array.
|
|
2493
|
+
*/
|
|
2494
|
+
sourceIndex: number;
|
|
2495
|
+
/**
|
|
2496
|
+
* Human-readable label for the source.
|
|
2497
|
+
*/
|
|
2498
|
+
sourceLabel: string;
|
|
2499
|
+
/**
|
|
2500
|
+
* The value reported by this source for the conflicting field.
|
|
2501
|
+
*/
|
|
2502
|
+
value: any;
|
|
2503
|
+
[property: string]: any;
|
|
2504
|
+
}
|
|
2505
|
+
/**
|
|
2506
|
+
* The strategy that was used to match this requirement across sources.
|
|
2507
|
+
*
|
|
2508
|
+
* The strategy used to match requirements across sources. 'exactId' matches by identical
|
|
2509
|
+
* IDs. 'mappedId' uses an ID mapping table. 'cciMatch'/'nistMatch' match by framework
|
|
2510
|
+
* identifiers. 'fuzzyTitle'/'fuzzyContent' use text similarity.
|
|
2511
|
+
*
|
|
2512
|
+
* The primary strategy used to match requirements across sources.
|
|
2513
|
+
*/
|
|
2514
|
+
export declare enum MatchStrategy {
|
|
2515
|
+
CciMatch = "cciMatch",
|
|
2516
|
+
ExactID = "exactId",
|
|
2517
|
+
FuzzyContent = "fuzzyContent",
|
|
2518
|
+
FuzzyTitle = "fuzzyTitle",
|
|
2519
|
+
MappedID = "mappedId",
|
|
2520
|
+
NISTMatch = "nistMatch"
|
|
2521
|
+
}
|
|
2522
|
+
/**
|
|
2523
|
+
* The state of this requirement in the comparison.
|
|
2524
|
+
*
|
|
2525
|
+
* SARIF-compatible vocabulary extended for security. 'new' = present only in new source,
|
|
2526
|
+
* 'absent' = present only in old, 'unchanged' = same effective status, 'updated' = status
|
|
2527
|
+
* changed (generic), 'fixed' = was failing now passing, 'regressed' = was passing now
|
|
2528
|
+
* failing, 'moved' = reorganized same content, 'split'/'merged' = reserved for v1.1.
|
|
2529
|
+
*/
|
|
2530
|
+
export declare enum RequirementState {
|
|
2531
|
+
Absent = "absent",
|
|
2532
|
+
Fixed = "fixed",
|
|
2533
|
+
Merged = "merged",
|
|
2534
|
+
Moved = "moved",
|
|
2535
|
+
New = "new",
|
|
2536
|
+
Regressed = "regressed",
|
|
2537
|
+
Split = "split",
|
|
2538
|
+
Unchanged = "unchanged",
|
|
2539
|
+
Updated = "updated"
|
|
2540
|
+
}
|
|
2541
|
+
export declare enum FormatVersion {
|
|
2542
|
+
The100 = "1.0.0"
|
|
2543
|
+
}
|
|
2544
|
+
/**
|
|
2545
|
+
* Configuration for how requirements were matched across sources.
|
|
2546
|
+
*
|
|
2547
|
+
* Configuration for how requirements are matched across sources.
|
|
2548
|
+
*/
|
|
2549
|
+
export interface MatchingConfig {
|
|
2550
|
+
/**
|
|
2551
|
+
* Ordered list of fallback strategies tried when the primary strategy fails to find a match.
|
|
2552
|
+
*/
|
|
2553
|
+
fallbackStrategies?: MatchStrategy[];
|
|
2554
|
+
/**
|
|
2555
|
+
* Fields used to compute a fingerprint for fuzzy matching.
|
|
2556
|
+
*/
|
|
2557
|
+
fingerprintFields?: string[];
|
|
2558
|
+
/**
|
|
2559
|
+
* URI pointing to an external mapping table used for ID translation.
|
|
2560
|
+
*/
|
|
2561
|
+
mappingTableUri?: string;
|
|
2562
|
+
/**
|
|
2563
|
+
* Minimum confidence score (0-1) required to accept a match.
|
|
2564
|
+
*/
|
|
2565
|
+
minimumConfidence?: number;
|
|
2566
|
+
/**
|
|
2567
|
+
* The primary strategy used to match requirements across sources.
|
|
2568
|
+
*/
|
|
2569
|
+
primaryStrategy: MatchStrategy;
|
|
2570
|
+
[property: string]: any;
|
|
2571
|
+
}
|
|
2572
|
+
/**
|
|
2573
|
+
* Comparison of a single package between two SBOM versions, matched by purl.
|
|
2574
|
+
*/
|
|
2575
|
+
export interface PackageDiff {
|
|
2576
|
+
/**
|
|
2577
|
+
* License identifiers for this package.
|
|
2578
|
+
*/
|
|
2579
|
+
licenses?: string[];
|
|
2580
|
+
/**
|
|
2581
|
+
* Human-readable package name.
|
|
2582
|
+
*/
|
|
2583
|
+
name?: string;
|
|
2584
|
+
/**
|
|
2585
|
+
* Package version in the new SBOM.
|
|
2586
|
+
*/
|
|
2587
|
+
newVersion?: string;
|
|
2588
|
+
/**
|
|
2589
|
+
* Package version in the old SBOM.
|
|
2590
|
+
*/
|
|
2591
|
+
oldVersion?: string;
|
|
2592
|
+
/**
|
|
2593
|
+
* Package URL (purl) used as the identity key for matching across SBOMs.
|
|
2594
|
+
*/
|
|
2595
|
+
purl: string;
|
|
2596
|
+
/**
|
|
2597
|
+
* The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
2598
|
+
* updated (version changed), unchanged.
|
|
2599
|
+
*/
|
|
2600
|
+
state: PackageDiffState;
|
|
2601
|
+
[property: string]: any;
|
|
2602
|
+
}
|
|
2603
|
+
/**
|
|
2604
|
+
* The state of this package: added (new in new SBOM), removed (absent from new SBOM),
|
|
2605
|
+
* updated (version changed), unchanged.
|
|
2606
|
+
*/
|
|
2607
|
+
export declare enum PackageDiffState {
|
|
2608
|
+
Added = "added",
|
|
2609
|
+
Removed = "removed",
|
|
2610
|
+
Unchanged = "unchanged",
|
|
2611
|
+
Updated = "updated"
|
|
2612
|
+
}
|
|
2613
|
+
/**
|
|
2614
|
+
* A source document participating in the comparison.
|
|
2615
|
+
*/
|
|
2616
|
+
export interface Source {
|
|
2617
|
+
/**
|
|
2618
|
+
* When the source assessment was performed. ISO 8601 format.
|
|
2619
|
+
*/
|
|
2620
|
+
assessmentTimestamp?: Date;
|
|
2621
|
+
/**
|
|
2622
|
+
* Reference to the baseline used in this source assessment.
|
|
2623
|
+
*/
|
|
2624
|
+
baselineRef?: BaselineRef;
|
|
2625
|
+
/**
|
|
2626
|
+
* Cryptographic checksum of the source document for integrity verification.
|
|
2627
|
+
*/
|
|
2628
|
+
checksum?: Checksum;
|
|
2629
|
+
/**
|
|
2630
|
+
* The components assessed in this source.
|
|
2631
|
+
*/
|
|
2632
|
+
components?: Component[];
|
|
2633
|
+
/**
|
|
2634
|
+
* Human-readable label for this source. Example: 'Before remediation scan'.
|
|
2635
|
+
*/
|
|
2636
|
+
label: string;
|
|
2637
|
+
/**
|
|
2638
|
+
* The original format of the source document before conversion to HDF.
|
|
2639
|
+
*/
|
|
2640
|
+
originalFormat?: OriginalFormat;
|
|
2641
|
+
/**
|
|
2642
|
+
* The role of this source in the comparison.
|
|
2643
|
+
*/
|
|
2644
|
+
role: SourceRole;
|
|
2645
|
+
/**
|
|
2646
|
+
* The security tool that produced the assessment data in this source.
|
|
2647
|
+
*/
|
|
2648
|
+
tool?: Tool;
|
|
2649
|
+
/**
|
|
2650
|
+
* URI pointing to the source document.
|
|
2651
|
+
*/
|
|
2652
|
+
uri?: string;
|
|
2653
|
+
[property: string]: any;
|
|
2654
|
+
}
|
|
2655
|
+
/**
|
|
2656
|
+
* Reference to the baseline used in this source assessment.
|
|
2657
|
+
*/
|
|
2658
|
+
export interface BaselineRef {
|
|
2659
|
+
/**
|
|
2660
|
+
* Name of the baseline used in this source.
|
|
2661
|
+
*/
|
|
2662
|
+
name: string;
|
|
2663
|
+
/**
|
|
2664
|
+
* Version of the baseline used in this source.
|
|
2665
|
+
*/
|
|
2666
|
+
version?: string;
|
|
2667
|
+
[property: string]: any;
|
|
2668
|
+
}
|
|
2669
|
+
/**
|
|
2670
|
+
* The original format of the source document before conversion to HDF.
|
|
2671
|
+
*/
|
|
2672
|
+
export declare enum OriginalFormat {
|
|
2673
|
+
HdfV2 = "hdf-v2",
|
|
2674
|
+
InspecV1 = "inspec-v1",
|
|
2675
|
+
OscalAr = "oscal-ar",
|
|
2676
|
+
Sarif = "sarif",
|
|
2677
|
+
Xccdf = "xccdf"
|
|
2678
|
+
}
|
|
2679
|
+
/**
|
|
2680
|
+
* The role of this source in the comparison.
|
|
2681
|
+
*
|
|
2682
|
+
* The role of a source document in the comparison.
|
|
2683
|
+
*/
|
|
2684
|
+
export declare enum SourceRole {
|
|
2685
|
+
Golden = "golden",
|
|
2686
|
+
New = "new",
|
|
2687
|
+
Old = "old",
|
|
2688
|
+
Reference = "reference",
|
|
2689
|
+
System = "system"
|
|
2690
|
+
}
|
|
2691
|
+
/**
|
|
2692
|
+
* Summary statistics for the overall comparison.
|
|
2693
|
+
*/
|
|
2694
|
+
export interface ComparisonSummary {
|
|
2695
|
+
/**
|
|
2696
|
+
* Number of requirements present only in the old source.
|
|
2697
|
+
*/
|
|
2698
|
+
absent?: number;
|
|
2699
|
+
/**
|
|
2700
|
+
* Average confidence score across all requirement matches (0-1).
|
|
2701
|
+
*/
|
|
2702
|
+
averageMatchConfidence?: number;
|
|
2703
|
+
/**
|
|
2704
|
+
* State counts broken down by severity level.
|
|
2705
|
+
*/
|
|
2706
|
+
bySeverity?: SeverityBreakdown;
|
|
2707
|
+
/**
|
|
2708
|
+
* Change in compliance percentage (new - old).
|
|
2709
|
+
*/
|
|
2710
|
+
complianceDelta?: number;
|
|
2711
|
+
/**
|
|
2712
|
+
* Number of requirements that changed from failing to passing.
|
|
2713
|
+
*/
|
|
2714
|
+
fixed?: number;
|
|
2715
|
+
/**
|
|
2716
|
+
* Number of requirements successfully matched between sources.
|
|
2717
|
+
*/
|
|
2718
|
+
matchedCount: number;
|
|
2719
|
+
/**
|
|
2720
|
+
* Number of requirements that were reorganized without content change.
|
|
2721
|
+
*/
|
|
2722
|
+
moved?: number;
|
|
2723
|
+
/**
|
|
2724
|
+
* Number of requirements present only in the new source.
|
|
2725
|
+
*/
|
|
2726
|
+
new?: number;
|
|
2727
|
+
/**
|
|
2728
|
+
* Compliance percentage of the new source (0-100).
|
|
2729
|
+
*/
|
|
2730
|
+
newCompliancePercent?: number;
|
|
2731
|
+
/**
|
|
2732
|
+
* Compliance percentage of the old source (0-100).
|
|
2733
|
+
*/
|
|
2734
|
+
oldCompliancePercent?: number;
|
|
2735
|
+
/**
|
|
2736
|
+
* Summary statistics for each individual source in a multi-source comparison.
|
|
2737
|
+
*/
|
|
2738
|
+
perSource?: PerSourceSummary[];
|
|
2739
|
+
/**
|
|
2740
|
+
* Number of requirements that changed from passing to failing.
|
|
2741
|
+
*/
|
|
2742
|
+
regressed?: number;
|
|
2743
|
+
/**
|
|
2744
|
+
* Total number of unique requirements across all sources.
|
|
2745
|
+
*/
|
|
2746
|
+
total: number;
|
|
2747
|
+
/**
|
|
2748
|
+
* Number of requirements with the same effective status.
|
|
2749
|
+
*/
|
|
2750
|
+
unchanged?: number;
|
|
2751
|
+
/**
|
|
2752
|
+
* Number of requirements in the new source with no match in the old source.
|
|
2753
|
+
*/
|
|
2754
|
+
unmatchedNewCount: number;
|
|
2755
|
+
/**
|
|
2756
|
+
* Number of requirements in the old source with no match in the new source.
|
|
2757
|
+
*/
|
|
2758
|
+
unmatchedOldCount: number;
|
|
2759
|
+
/**
|
|
2760
|
+
* Number of requirements with a generic status change.
|
|
2761
|
+
*/
|
|
2762
|
+
updated?: number;
|
|
2763
|
+
[property: string]: any;
|
|
2764
|
+
}
|
|
2765
|
+
/**
|
|
2766
|
+
* State counts broken down by severity level.
|
|
2767
|
+
*
|
|
2768
|
+
* Breakdown of state counts by severity level.
|
|
2769
|
+
*/
|
|
2770
|
+
export interface SeverityBreakdown {
|
|
2771
|
+
/**
|
|
2772
|
+
* State counts for critical severity requirements.
|
|
2773
|
+
*/
|
|
2774
|
+
critical?: StateCounts;
|
|
2775
|
+
/**
|
|
2776
|
+
* State counts for high severity requirements.
|
|
2777
|
+
*/
|
|
2778
|
+
high?: StateCounts;
|
|
2779
|
+
/**
|
|
2780
|
+
* State counts for low severity requirements.
|
|
2781
|
+
*/
|
|
2782
|
+
low?: StateCounts;
|
|
2783
|
+
/**
|
|
2784
|
+
* State counts for medium severity requirements.
|
|
2785
|
+
*/
|
|
2786
|
+
medium?: StateCounts;
|
|
2787
|
+
[property: string]: any;
|
|
2788
|
+
}
|
|
2789
|
+
/**
|
|
2790
|
+
* State counts for critical severity requirements.
|
|
2791
|
+
*
|
|
2792
|
+
* Counts of requirements in each state.
|
|
2793
|
+
*
|
|
2794
|
+
* State counts for high severity requirements.
|
|
2795
|
+
*
|
|
2796
|
+
* State counts for low severity requirements.
|
|
2797
|
+
*
|
|
2798
|
+
* State counts for medium severity requirements.
|
|
2799
|
+
*/
|
|
2800
|
+
export interface StateCounts {
|
|
2801
|
+
/**
|
|
2802
|
+
* Number of requirements present only in the old source.
|
|
2803
|
+
*/
|
|
2804
|
+
absent?: number;
|
|
2805
|
+
/**
|
|
2806
|
+
* Number of requirements that changed from failing to passing.
|
|
2807
|
+
*/
|
|
2808
|
+
fixed?: number;
|
|
2809
|
+
/**
|
|
2810
|
+
* Number of requirements that were reorganized without content change.
|
|
2811
|
+
*/
|
|
2812
|
+
moved?: number;
|
|
2813
|
+
/**
|
|
2814
|
+
* Number of requirements present only in the new source.
|
|
2815
|
+
*/
|
|
2816
|
+
new?: number;
|
|
2817
|
+
/**
|
|
2818
|
+
* Number of requirements that changed from passing to failing.
|
|
2819
|
+
*/
|
|
2820
|
+
regressed?: number;
|
|
2821
|
+
/**
|
|
2822
|
+
* Number of requirements with the same effective status.
|
|
2823
|
+
*/
|
|
2824
|
+
unchanged?: number;
|
|
2825
|
+
/**
|
|
2826
|
+
* Number of requirements with a generic status change.
|
|
2827
|
+
*/
|
|
2828
|
+
updated?: number;
|
|
2829
|
+
[property: string]: any;
|
|
2830
|
+
}
|
|
2831
|
+
/**
|
|
2832
|
+
* Summary statistics for a single source in a multi-source comparison.
|
|
2833
|
+
*/
|
|
2834
|
+
export interface PerSourceSummary {
|
|
2835
|
+
/**
|
|
2836
|
+
* Number of requirements present only in the old source.
|
|
2837
|
+
*/
|
|
2838
|
+
absent?: number;
|
|
2839
|
+
/**
|
|
2840
|
+
* Number of requirements that changed from failing to passing.
|
|
2841
|
+
*/
|
|
2842
|
+
fixed?: number;
|
|
2843
|
+
/**
|
|
2844
|
+
* Human-readable label for this source.
|
|
2845
|
+
*/
|
|
2846
|
+
label: string;
|
|
2847
|
+
/**
|
|
2848
|
+
* Number of requirements that were reorganized without content change.
|
|
2849
|
+
*/
|
|
2850
|
+
moved?: number;
|
|
2851
|
+
/**
|
|
2852
|
+
* Number of requirements present only in the new source.
|
|
2853
|
+
*/
|
|
2854
|
+
new?: number;
|
|
2855
|
+
/**
|
|
2856
|
+
* Number of requirements that changed from passing to failing.
|
|
2857
|
+
*/
|
|
2858
|
+
regressed?: number;
|
|
2859
|
+
/**
|
|
2860
|
+
* Zero-based index into the sources array identifying which source this summary is for.
|
|
2861
|
+
*/
|
|
2862
|
+
sourceIndex: number;
|
|
2863
|
+
/**
|
|
2864
|
+
* Number of requirements with the same effective status.
|
|
2865
|
+
*/
|
|
2866
|
+
unchanged?: number;
|
|
2867
|
+
/**
|
|
2868
|
+
* Number of requirements with a generic status change.
|
|
2869
|
+
*/
|
|
2870
|
+
updated?: number;
|
|
2871
|
+
[property: string]: any;
|
|
2872
|
+
}
|
|
2873
|
+
/**
|
|
2874
|
+
* Describes a system's authorization boundary, components, and interconnections. Maps to
|
|
2875
|
+
* OSCAL SSP system-characteristics and FedRAMP system inventory.
|
|
2876
|
+
*/
|
|
2877
|
+
export interface HDFSystem {
|
|
2878
|
+
/**
|
|
2879
|
+
* Date the current authorization status was granted. ISO 8601 format.
|
|
2880
|
+
*/
|
|
2881
|
+
authorizationDate?: Date;
|
|
2882
|
+
/**
|
|
2883
|
+
* Current Authorization to Operate (ATO) status.
|
|
2884
|
+
*/
|
|
2885
|
+
authorizationStatus?: AuthorizationStatus;
|
|
2886
|
+
/**
|
|
2887
|
+
* Description of the system's authorization boundary. Example: network CIDR blocks, cloud
|
|
2888
|
+
* VPC IDs, physical locations.
|
|
2889
|
+
*/
|
|
2890
|
+
boundaryDescription?: string;
|
|
2891
|
+
/**
|
|
2892
|
+
* FIPS 199 security categorization (impact level).
|
|
2893
|
+
*/
|
|
2894
|
+
categorizationLevel?: CategorizationLevel;
|
|
2895
|
+
/**
|
|
2896
|
+
* System components within the authorization boundary. Uses the full polymorphic Component
|
|
2897
|
+
* type with stable identity (componentId), external references, and SBOM support.
|
|
2898
|
+
*/
|
|
2899
|
+
components: Component[];
|
|
2900
|
+
/**
|
|
2901
|
+
* Declares which controls are common, hybrid, or system-specific, and which component
|
|
2902
|
+
* provides them. Maps to NIST SP 800-53 control designations and OSCAL
|
|
2903
|
+
* leveraged-authorizations.
|
|
2904
|
+
*/
|
|
2905
|
+
controlDesignations?: ControlDesignation[];
|
|
2906
|
+
/**
|
|
2907
|
+
* Inter-component data flows describing how components communicate. Supports local,
|
|
2908
|
+
* cross-system, and external flows. Replaces the interconnections[] field.
|
|
2909
|
+
*/
|
|
2910
|
+
dataFlows?: DataFlow[];
|
|
2911
|
+
/**
|
|
2912
|
+
* Description of the system's purpose and mission.
|
|
2913
|
+
*/
|
|
2914
|
+
description?: string;
|
|
2915
|
+
/**
|
|
2916
|
+
* Information about the tool that generated this system document.
|
|
2917
|
+
*/
|
|
2918
|
+
generator?: Generator;
|
|
2919
|
+
/**
|
|
2920
|
+
* System identifier from an authoritative source. Example: eMASS system ID, FedRAMP package
|
|
2921
|
+
* ID.
|
|
2922
|
+
*/
|
|
2923
|
+
identifier?: string;
|
|
2924
|
+
/**
|
|
2925
|
+
* URI identifying the scheme of the system identifier. Example: 'https://emass.mil',
|
|
2926
|
+
* 'https://fedramp.gov'.
|
|
2927
|
+
*/
|
|
2928
|
+
identifierScheme?: string;
|
|
2929
|
+
/**
|
|
2930
|
+
* Cryptographic integrity information for verifying this system document has not been
|
|
2931
|
+
* tampered with.
|
|
2932
|
+
*/
|
|
2933
|
+
integrity?: Integrity;
|
|
2934
|
+
/**
|
|
2935
|
+
* Optional key-value labels for grouping and querying systems.
|
|
2936
|
+
*/
|
|
2937
|
+
labels?: {
|
|
2938
|
+
[key: string]: string;
|
|
2939
|
+
};
|
|
2940
|
+
/**
|
|
2941
|
+
* Human-readable system name. Example: 'Enterprise Portal Production'.
|
|
2942
|
+
*/
|
|
2943
|
+
name: string;
|
|
2944
|
+
/**
|
|
2945
|
+
* Team or individual responsible for this system's authorization and compliance. Maps to
|
|
2946
|
+
* OSCAL responsible-party with role 'system-owner'.
|
|
2947
|
+
*/
|
|
2948
|
+
owner?: Identity;
|
|
2949
|
+
/**
|
|
2950
|
+
* Stable UUID (RFC 4122) for this system. Enables cross-document correlation independent of
|
|
2951
|
+
* file location. Optional in casual use, expected in production documents.
|
|
2952
|
+
*/
|
|
2953
|
+
systemId?: string;
|
|
2954
|
+
/**
|
|
2955
|
+
* Version of this system document.
|
|
2956
|
+
*/
|
|
2957
|
+
version?: string;
|
|
2958
|
+
[property: string]: any;
|
|
2959
|
+
}
|
|
2960
|
+
/**
|
|
2961
|
+
* Current Authorization to Operate (ATO) status.
|
|
2962
|
+
*
|
|
2963
|
+
* Authorization to Operate (ATO) status for the system.
|
|
2964
|
+
*/
|
|
2965
|
+
export declare enum AuthorizationStatus {
|
|
2966
|
+
Authorized = "authorized",
|
|
2967
|
+
ConditionallyAuthorized = "conditionallyAuthorized",
|
|
2968
|
+
Denied = "denied",
|
|
2969
|
+
NotYetRequested = "notYetRequested",
|
|
2970
|
+
PendingAuthorization = "pendingAuthorization",
|
|
2971
|
+
Revoked = "revoked"
|
|
2972
|
+
}
|
|
2973
|
+
/**
|
|
2974
|
+
* FIPS 199 security categorization (impact level).
|
|
2975
|
+
*
|
|
2976
|
+
* FIPS 199 security categorization level (impact level).
|
|
2977
|
+
*/
|
|
2978
|
+
export declare enum CategorizationLevel {
|
|
2979
|
+
High = "high",
|
|
2980
|
+
Low = "low",
|
|
2981
|
+
Moderate = "moderate"
|
|
2982
|
+
}
|
|
2983
|
+
/**
|
|
2984
|
+
* Declares a control's designation within a system — whether it is common (provided by
|
|
2985
|
+
* another component or system), system-specific (implemented locally), or hybrid (shared
|
|
2986
|
+
* responsibility). Maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP
|
|
2987
|
+
* by-component provided/inherited semantics.
|
|
2988
|
+
*/
|
|
2989
|
+
export interface ControlDesignation {
|
|
2990
|
+
/**
|
|
2991
|
+
* The control identifier (e.g., 'SC-7', 'AC-2 (1)'). Must match a NIST tag in a baseline
|
|
2992
|
+
* requirement's tags.
|
|
2993
|
+
*/
|
|
2994
|
+
controlId: string;
|
|
2995
|
+
/**
|
|
2996
|
+
* Justification for this designation — who provides the control, why it's inherited, and
|
|
2997
|
+
* any relevant authorization references.
|
|
2998
|
+
*/
|
|
2999
|
+
description: string;
|
|
3000
|
+
/**
|
|
3001
|
+
* NIST SP 800-53 control designation. 'common': fully provided by another component or
|
|
3002
|
+
* system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
|
|
3003
|
+
* shared responsibility between provider and inheritor.
|
|
3004
|
+
*/
|
|
3005
|
+
designation: Designation;
|
|
3006
|
+
/**
|
|
3007
|
+
* componentIds that inherit this control. If omitted, all components in the system inherit
|
|
3008
|
+
* it.
|
|
3009
|
+
*/
|
|
3010
|
+
inheritedBy?: string[];
|
|
3011
|
+
/**
|
|
3012
|
+
* componentId of a local component that provides this control. Omit when the provider is an
|
|
3013
|
+
* external system.
|
|
3014
|
+
*/
|
|
3015
|
+
providedBy?: string;
|
|
3016
|
+
/**
|
|
3017
|
+
* Reference to another hdf-system document whose component provides this control. Use when
|
|
3018
|
+
* the provider is in a different system. Omit when the provider is local.
|
|
3019
|
+
*/
|
|
3020
|
+
systemRef?: string;
|
|
3021
|
+
[property: string]: any;
|
|
3022
|
+
}
|
|
3023
|
+
/**
|
|
3024
|
+
* NIST SP 800-53 control designation. 'common': fully provided by another component or
|
|
3025
|
+
* system. 'system-specific': implemented by the inheriting component(s) only. 'hybrid':
|
|
3026
|
+
* shared responsibility between provider and inheritor.
|
|
3027
|
+
*/
|
|
3028
|
+
export declare enum Designation {
|
|
3029
|
+
Common = "common",
|
|
3030
|
+
Hybrid = "hybrid",
|
|
3031
|
+
SystemSpecific = "system-specific"
|
|
3032
|
+
}
|
|
3033
|
+
/**
|
|
3034
|
+
* A data flow between two endpoints. The 'from' endpoint is always a local component; the
|
|
3035
|
+
* 'to' endpoint can be local, cross-system, or external. Use 'direction' to indicate
|
|
3036
|
+
* whether data flows one-way or both ways.
|
|
3037
|
+
*/
|
|
3038
|
+
export interface DataFlow {
|
|
3039
|
+
/**
|
|
3040
|
+
* Authentication mechanism used for this connection. Examples: 'mTLS', 'OAuth2', 'API key',
|
|
3041
|
+
* 'SAML', 'Kerberos'.
|
|
3042
|
+
*/
|
|
3043
|
+
authentication?: string;
|
|
3044
|
+
/**
|
|
3045
|
+
* Human-readable description of this data flow's purpose and the data exchanged.
|
|
3046
|
+
*/
|
|
3047
|
+
description?: string;
|
|
3048
|
+
/**
|
|
3049
|
+
* Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
|
|
3050
|
+
* means data flows in both directions (e.g., request/response).
|
|
3051
|
+
*/
|
|
3052
|
+
direction?: Direction;
|
|
3053
|
+
/**
|
|
3054
|
+
* UUID of the local component that is one end of this data flow. Always references a
|
|
3055
|
+
* component in the current system document.
|
|
3056
|
+
*/
|
|
3057
|
+
from: string;
|
|
3058
|
+
/**
|
|
3059
|
+
* Network port number.
|
|
3060
|
+
*/
|
|
3061
|
+
port?: number;
|
|
3062
|
+
/**
|
|
3063
|
+
* Communication protocol. Examples: 'http', 'https', 'grpc', 'ssh', 'jdbc', 'k8s-api',
|
|
3064
|
+
* 'socket', 'sftp'.
|
|
3065
|
+
*/
|
|
3066
|
+
protocol?: string;
|
|
3067
|
+
/**
|
|
3068
|
+
* The other end of this data flow. Can be a local component (UUID), a cross-system
|
|
3069
|
+
* component reference, or an external endpoint.
|
|
3070
|
+
*/
|
|
3071
|
+
to: any;
|
|
3072
|
+
[property: string]: any;
|
|
3073
|
+
}
|
|
3074
|
+
/**
|
|
3075
|
+
* Data flow direction. 'unidirectional' means data flows from→to only. 'bidirectional'
|
|
3076
|
+
* means data flows in both directions (e.g., request/response).
|
|
3077
|
+
*/
|
|
3078
|
+
export declare enum Direction {
|
|
3079
|
+
Bidirectional = "bidirectional",
|
|
3080
|
+
Unidirectional = "unidirectional"
|
|
3081
|
+
}
|
|
3082
|
+
/**
|
|
3083
|
+
* Defines an assessment plan — what baselines to run against which targets, with resolved
|
|
3084
|
+
* inputs and scheduling. Maps to OSCAL Assessment Plan.
|
|
3085
|
+
*/
|
|
3086
|
+
export interface HDFPlan {
|
|
3087
|
+
/**
|
|
3088
|
+
* The assessments to perform. Each assessment pairs a baseline with targets and resolved
|
|
3089
|
+
* inputs.
|
|
3090
|
+
*/
|
|
3091
|
+
assessments: Assessment[];
|
|
3092
|
+
/**
|
|
3093
|
+
* Description of the plan's purpose and scope.
|
|
3094
|
+
*/
|
|
3095
|
+
description?: string;
|
|
3096
|
+
/**
|
|
3097
|
+
* Information about the tool that generated this plan.
|
|
3098
|
+
*/
|
|
3099
|
+
generator?: Generator;
|
|
3100
|
+
/**
|
|
3101
|
+
* Cryptographic integrity information for verifying this plan document has not been
|
|
3102
|
+
* tampered with.
|
|
3103
|
+
*/
|
|
3104
|
+
integrity?: Integrity;
|
|
3105
|
+
/**
|
|
3106
|
+
* Optional key-value labels for grouping and querying plans.
|
|
3107
|
+
*/
|
|
3108
|
+
labels?: {
|
|
3109
|
+
[key: string]: string;
|
|
3110
|
+
};
|
|
3111
|
+
/**
|
|
3112
|
+
* Human-readable plan name. Example: 'Portal Monthly Assessment'.
|
|
3113
|
+
*/
|
|
3114
|
+
name: string;
|
|
3115
|
+
/**
|
|
3116
|
+
* Unique identifier for this plan. Optional in casual use, expected in production
|
|
3117
|
+
* documents. Auto-generated if omitted during creation.
|
|
3118
|
+
*/
|
|
3119
|
+
planId?: string;
|
|
3120
|
+
/**
|
|
3121
|
+
* Optional scheduling configuration for recurring assessments.
|
|
3122
|
+
*/
|
|
3123
|
+
schedule?: Schedule;
|
|
3124
|
+
/**
|
|
3125
|
+
* URI to the hdf-system document this plan targets. Example: 'portal-prod.hdf-system.json'.
|
|
3126
|
+
*/
|
|
3127
|
+
systemRef?: string;
|
|
3128
|
+
/**
|
|
3129
|
+
* The type of assessment plan.
|
|
3130
|
+
*/
|
|
3131
|
+
type?: PlanType;
|
|
3132
|
+
/**
|
|
3133
|
+
* Version of this plan document.
|
|
3134
|
+
*/
|
|
3135
|
+
version?: string;
|
|
3136
|
+
[property: string]: any;
|
|
3137
|
+
}
|
|
3138
|
+
/**
|
|
3139
|
+
* A single assessment within a plan — defines which baseline to run against which targets
|
|
3140
|
+
* with what configuration.
|
|
3141
|
+
*/
|
|
3142
|
+
export interface Assessment {
|
|
3143
|
+
/**
|
|
3144
|
+
* Reference to the baseline to evaluate. May be a baseline name (e.g. 'RHEL9-STIG'), a
|
|
3145
|
+
* relative path to an HDF Baseline document (e.g. 'rhel9-stig.hdf-baseline.json'), or an
|
|
3146
|
+
* absolute URI.
|
|
3147
|
+
*/
|
|
3148
|
+
baselineRef: string;
|
|
3149
|
+
/**
|
|
3150
|
+
* componentId of the system component this assessment targets. Use for direct component
|
|
3151
|
+
* binding. Alternative to targetSelector.
|
|
3152
|
+
*/
|
|
3153
|
+
componentRef?: string;
|
|
3154
|
+
/**
|
|
3155
|
+
* Description of this assessment's purpose.
|
|
3156
|
+
*/
|
|
3157
|
+
description?: string;
|
|
3158
|
+
/**
|
|
3159
|
+
* Resolved input values for this assessment. Keys are input names, values are the final
|
|
3160
|
+
* resolved values (after baseline defaults + system overrides).
|
|
3161
|
+
*/
|
|
3162
|
+
inputs?: {
|
|
3163
|
+
[key: string]: any;
|
|
3164
|
+
};
|
|
3165
|
+
/**
|
|
3166
|
+
* Runner/scanner configuration for this assessment.
|
|
3167
|
+
*/
|
|
3168
|
+
runner?: RunnerConfig;
|
|
3169
|
+
/**
|
|
3170
|
+
* Label selector to match targets for this assessment. Overrides the system component's
|
|
3171
|
+
* targetSelector if provided.
|
|
3172
|
+
*/
|
|
3173
|
+
targetSelector?: {
|
|
3174
|
+
[key: string]: string;
|
|
3175
|
+
};
|
|
3176
|
+
[property: string]: any;
|
|
3177
|
+
}
|
|
3178
|
+
/**
|
|
3179
|
+
* Runner/scanner configuration for this assessment.
|
|
3180
|
+
*
|
|
3181
|
+
* Configuration for the assessment runner/scanner.
|
|
3182
|
+
*/
|
|
3183
|
+
export interface RunnerConfig {
|
|
3184
|
+
/**
|
|
3185
|
+
* Name of the assessment runner. Example: 'cinc-auditor', 'inspec', 'openscap'.
|
|
3186
|
+
*/
|
|
3187
|
+
name?: string;
|
|
3188
|
+
/**
|
|
3189
|
+
* Version of the runner.
|
|
3190
|
+
*/
|
|
3191
|
+
version?: string;
|
|
3192
|
+
[property: string]: any;
|
|
3193
|
+
}
|
|
3194
|
+
/**
|
|
3195
|
+
* Optional scheduling configuration for recurring assessments.
|
|
3196
|
+
*
|
|
3197
|
+
* Scheduling configuration for recurring assessments.
|
|
3198
|
+
*/
|
|
3199
|
+
export interface Schedule {
|
|
3200
|
+
/**
|
|
3201
|
+
* Cron expression for recurring assessments. Example: '0 2 1 * *' (2 AM on the 1st of each
|
|
3202
|
+
* month).
|
|
3203
|
+
*/
|
|
3204
|
+
cron?: string;
|
|
3205
|
+
/**
|
|
3206
|
+
* Date after which assessments should no longer run. ISO 8601 format.
|
|
3207
|
+
*/
|
|
3208
|
+
endDate?: Date;
|
|
3209
|
+
/**
|
|
3210
|
+
* Email addresses or notification endpoints to alert when assessments complete.
|
|
3211
|
+
*/
|
|
3212
|
+
notifyOnCompletion?: string[];
|
|
3213
|
+
/**
|
|
3214
|
+
* Email addresses or notification endpoints to alert when regressions are detected.
|
|
3215
|
+
*/
|
|
3216
|
+
notifyOnRegression?: string[];
|
|
3217
|
+
/**
|
|
3218
|
+
* Earliest date to begin assessments. ISO 8601 format.
|
|
3219
|
+
*/
|
|
3220
|
+
startDate?: Date;
|
|
3221
|
+
[property: string]: any;
|
|
3222
|
+
}
|
|
3223
|
+
/**
|
|
3224
|
+
* The type of assessment plan.
|
|
3225
|
+
*
|
|
3226
|
+
* The type of assessment. 'automated' for scanner-driven, 'manual' for human-performed,
|
|
3227
|
+
* 'hybrid' for both.
|
|
3228
|
+
*/
|
|
3229
|
+
export declare enum PlanType {
|
|
3230
|
+
Automated = "automated",
|
|
3231
|
+
Hybrid = "hybrid",
|
|
3232
|
+
Manual = "manual"
|
|
3233
|
+
}
|
|
3234
|
+
/**
|
|
3235
|
+
* Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
|
|
3236
|
+
* Amendments are standalone documents that can be applied to results via merge operations.
|
|
3237
|
+
*/
|
|
3238
|
+
export interface HDFAmendments {
|
|
3239
|
+
/**
|
|
3240
|
+
* Unique identifier for this amendments document. Useful for cross-referencing when
|
|
3241
|
+
* multiple amendment documents target the same results.
|
|
3242
|
+
*/
|
|
3243
|
+
amendmentId?: string;
|
|
3244
|
+
/**
|
|
3245
|
+
* Default identity of who created this amendments document. Individual overrides may
|
|
3246
|
+
* specify their own appliedBy.
|
|
3247
|
+
*/
|
|
3248
|
+
appliedBy?: Identity;
|
|
3249
|
+
/**
|
|
3250
|
+
* Identity of the authorizing official who approved these amendments.
|
|
3251
|
+
*/
|
|
3252
|
+
approvedBy?: Identity;
|
|
3253
|
+
/**
|
|
3254
|
+
* Description of the amendments' purpose and scope.
|
|
3255
|
+
*/
|
|
3256
|
+
description?: string;
|
|
3257
|
+
/**
|
|
3258
|
+
* Information about the tool that generated this document.
|
|
3259
|
+
*/
|
|
3260
|
+
generator?: Generator;
|
|
3261
|
+
/**
|
|
3262
|
+
* Cryptographic integrity information for verifying this amendments document has not been
|
|
3263
|
+
* tampered with.
|
|
3264
|
+
*/
|
|
3265
|
+
integrity?: Integrity;
|
|
3266
|
+
/**
|
|
3267
|
+
* Optional key-value labels for grouping and querying amendments.
|
|
3268
|
+
*/
|
|
3269
|
+
labels?: {
|
|
3270
|
+
[key: string]: string;
|
|
3271
|
+
};
|
|
3272
|
+
/**
|
|
3273
|
+
* Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
|
|
3274
|
+
*/
|
|
3275
|
+
name: string;
|
|
3276
|
+
/**
|
|
3277
|
+
* The set of amendments (waivers, attestations, POA&Ms, and other overrides).
|
|
3278
|
+
*/
|
|
3279
|
+
overrides: StandaloneOverride[];
|
|
3280
|
+
/**
|
|
3281
|
+
* Document-level digital signature covering all amendments.
|
|
3282
|
+
*/
|
|
3283
|
+
signature?: Signature;
|
|
3284
|
+
/**
|
|
3285
|
+
* URI to the hdf-system document these amendments apply to.
|
|
3286
|
+
*/
|
|
3287
|
+
systemRef?: string;
|
|
3288
|
+
/**
|
|
3289
|
+
* Version of this amendments document.
|
|
3290
|
+
*/
|
|
3291
|
+
version?: string;
|
|
3292
|
+
[property: string]: any;
|
|
3293
|
+
}
|
|
3294
|
+
/**
|
|
3295
|
+
* A standalone override to a requirement's compliance status or risk impact. Validation has
|
|
3296
|
+
* two branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor
|
|
3297
|
+
* 'impact' may be set — the override records accepted risk without changing the finding
|
|
3298
|
+
* (documentation-only). For all other types, at least one of 'status' or 'impact' must be
|
|
3299
|
+
* set. This rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
|
|
3300
|
+
* finding.associated-risk[].facet[] are separate axes
|
|
3301
|
+
* (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
|
|
3302
|
+
* FedRAMP deviation request types — Risk Adjustment changes impact only, Operational
|
|
3303
|
+
* Requirement documents acceptance only, False Positive changes status
|
|
3304
|
+
* (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
|
|
3305
|
+
* NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from
|
|
3306
|
+
* control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
|
|
3307
|
+
*/
|
|
3308
|
+
export interface StandaloneOverride {
|
|
3309
|
+
/**
|
|
3310
|
+
* Software packages this amendment is scoped to, distinct from componentRef (which scopes
|
|
3311
|
+
* to an HDF-internal Component by UUID). Use when the source amendment format references
|
|
3312
|
+
* packages by purl/cpe/name+version — e.g., VEX `affects[]` / `products[]`, OSCAL POA&M
|
|
3313
|
+
* `subjects[]`, FedRAMP component-aware amendments. Symmetric with
|
|
3314
|
+
* Evaluated_Requirement.affectedPackages, which scopes findings to the same package
|
|
3315
|
+
* vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when
|
|
3316
|
+
* that is set).
|
|
3317
|
+
*/
|
|
3318
|
+
affectedPackages?: AffectedPackage[];
|
|
3319
|
+
/**
|
|
3320
|
+
* When this amendment was applied. ISO 8601 format.
|
|
3321
|
+
*/
|
|
3322
|
+
appliedAt: Date;
|
|
3323
|
+
/**
|
|
3324
|
+
* Identity of who applied this amendment.
|
|
3325
|
+
*/
|
|
3326
|
+
appliedBy: Identity;
|
|
3327
|
+
/**
|
|
3328
|
+
* Name of the baseline containing the requirement. Required when the system has multiple
|
|
3329
|
+
* baselines with potentially overlapping requirement IDs.
|
|
3330
|
+
*/
|
|
3331
|
+
baselineRef?: string;
|
|
3332
|
+
/**
|
|
3333
|
+
* componentId of the component this amendment is scoped to. When set, the amendment only
|
|
3334
|
+
* applies to the specified component. When omitted, the amendment applies system-wide.
|
|
3335
|
+
*/
|
|
3336
|
+
componentRef?: string;
|
|
3337
|
+
/**
|
|
3338
|
+
* Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
3339
|
+
* Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
3340
|
+
* a riskAdjustment. For other override types this is optional context.
|
|
3341
|
+
*/
|
|
3342
|
+
cvss?: Cvss;
|
|
3343
|
+
/**
|
|
3344
|
+
* Supporting evidence (screenshots, logs, URLs, documents).
|
|
3345
|
+
*/
|
|
3346
|
+
evidence?: Evidence[];
|
|
3347
|
+
/**
|
|
3348
|
+
* When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
3349
|
+
* format.
|
|
3350
|
+
*/
|
|
3351
|
+
expiresAt: Date;
|
|
3352
|
+
/**
|
|
3353
|
+
* Override to the requirement's impact score. At least one of status or impact must be set.
|
|
3354
|
+
*/
|
|
3355
|
+
impact?: ImpactOverride;
|
|
3356
|
+
/**
|
|
3357
|
+
* componentId of the local component that provides this control. Set when the provider is
|
|
3358
|
+
* in the same system. Omit for external or cross-system providers; the reason field
|
|
3359
|
+
* explains the source. Primarily used with type 'inherited'.
|
|
3360
|
+
*/
|
|
3361
|
+
inheritedFrom?: string;
|
|
3362
|
+
/**
|
|
3363
|
+
* Structured controlled-vocabulary classification for why this override applies.
|
|
3364
|
+
* Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
3365
|
+
* and attestation overrides where the structured category enables filtering and lossless
|
|
3366
|
+
* round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
3367
|
+
* precedent vocabulary and rationale.
|
|
3368
|
+
*/
|
|
3369
|
+
justification?: Justification;
|
|
3370
|
+
/**
|
|
3371
|
+
* Remediation milestones (primarily for POA&M type amendments).
|
|
3372
|
+
*/
|
|
3373
|
+
milestones?: Milestone[];
|
|
3374
|
+
/**
|
|
3375
|
+
* Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
|
|
3376
|
+
* for the first amendment.
|
|
3377
|
+
*/
|
|
3378
|
+
previousChecksum?: Checksum;
|
|
3379
|
+
/**
|
|
3380
|
+
* Justification for this amendment.
|
|
3381
|
+
*/
|
|
3382
|
+
reason: string;
|
|
3383
|
+
/**
|
|
3384
|
+
* The ID of the requirement being amended. Must match a requirement ID in the referenced
|
|
3385
|
+
* baseline.
|
|
3386
|
+
*/
|
|
3387
|
+
requirementId: string;
|
|
3388
|
+
/**
|
|
3389
|
+
* Digital signature for non-repudiation.
|
|
3390
|
+
*/
|
|
3391
|
+
signature?: Signature;
|
|
3392
|
+
/**
|
|
3393
|
+
* The new status this amendment sets. Optional when only impact is being overridden.
|
|
3394
|
+
*/
|
|
3395
|
+
status?: ResultStatus;
|
|
3396
|
+
/**
|
|
3397
|
+
* The type of amendment.
|
|
3398
|
+
*/
|
|
3399
|
+
type: OverrideType;
|
|
3400
|
+
[property: string]: any;
|
|
3401
|
+
}
|
|
3402
|
+
/**
|
|
3403
|
+
* Bundles references to all HDF documents for audit, authorization, and compliance review.
|
|
3404
|
+
* Each content entry references a document by type, URI, and checksum for integrity
|
|
3405
|
+
* verification.
|
|
3406
|
+
*/
|
|
3407
|
+
export interface HDFEvidencePackage {
|
|
3408
|
+
/**
|
|
3409
|
+
* Summary of assessment completeness and compliance status.
|
|
3410
|
+
*/
|
|
3411
|
+
completenessCheck?: CompletenessCheck;
|
|
3412
|
+
/**
|
|
3413
|
+
* References to HDF documents included in this evidence package.
|
|
3414
|
+
*/
|
|
3415
|
+
contents: ContentReference[];
|
|
3416
|
+
/**
|
|
3417
|
+
* Description of the evidence package's purpose and scope.
|
|
3418
|
+
*/
|
|
3419
|
+
description?: string;
|
|
3420
|
+
/**
|
|
3421
|
+
* Information about the tool that generated this document.
|
|
3422
|
+
*/
|
|
3423
|
+
generator?: Generator;
|
|
3424
|
+
/**
|
|
3425
|
+
* Cryptographic integrity information for verifying this evidence package has not been
|
|
3426
|
+
* tampered with.
|
|
3427
|
+
*/
|
|
3428
|
+
integrity?: Integrity;
|
|
3429
|
+
/**
|
|
3430
|
+
* Optional key-value labels for grouping and querying evidence packages.
|
|
3431
|
+
*/
|
|
3432
|
+
labels?: {
|
|
3433
|
+
[key: string]: string;
|
|
3434
|
+
};
|
|
3435
|
+
/**
|
|
3436
|
+
* Human-readable name for this evidence package. Example: 'Enterprise Portal ATO Evidence -
|
|
3437
|
+
* Q1 2026'.
|
|
3438
|
+
*/
|
|
3439
|
+
name: string;
|
|
3440
|
+
/**
|
|
3441
|
+
* Unique identifier for this evidence package. Optional in casual use, expected in
|
|
3442
|
+
* production ATO submissions. Auto-generated if omitted during creation.
|
|
3443
|
+
*/
|
|
3444
|
+
packageId?: string;
|
|
3445
|
+
/**
|
|
3446
|
+
* URI to the hdf-plan document that drove this assessment. Used for completeness
|
|
3447
|
+
* verification — every baseline in the plan should have a corresponding results document in
|
|
3448
|
+
* this package.
|
|
3449
|
+
*/
|
|
3450
|
+
planRef?: string;
|
|
3451
|
+
/**
|
|
3452
|
+
* When this evidence package was prepared. ISO 8601 format.
|
|
3453
|
+
*/
|
|
3454
|
+
preparedAt?: Date;
|
|
3455
|
+
/**
|
|
3456
|
+
* Identity of who prepared this evidence package.
|
|
3457
|
+
*/
|
|
3458
|
+
preparedBy?: Identity;
|
|
3459
|
+
/**
|
|
3460
|
+
* Digital signature covering the entire evidence package.
|
|
3461
|
+
*/
|
|
3462
|
+
signature?: Signature;
|
|
3463
|
+
/**
|
|
3464
|
+
* URI to the hdf-system document this evidence package covers.
|
|
3465
|
+
*/
|
|
3466
|
+
systemRef?: string;
|
|
3467
|
+
/**
|
|
3468
|
+
* Version of this evidence package.
|
|
3469
|
+
*/
|
|
3470
|
+
version?: string;
|
|
3471
|
+
[property: string]: any;
|
|
3472
|
+
}
|
|
3473
|
+
/**
|
|
3474
|
+
* Summary of assessment completeness and compliance status.
|
|
3475
|
+
*
|
|
3476
|
+
* Informational summary of assessment completeness. Not authoritative — tools should
|
|
3477
|
+
* compute these from the referenced documents.
|
|
3478
|
+
*/
|
|
3479
|
+
export interface CompletenessCheck {
|
|
3480
|
+
/**
|
|
3481
|
+
* Whether all baselines referenced by system components have assessment results.
|
|
3482
|
+
*/
|
|
3483
|
+
allBaselinesAssessed?: boolean;
|
|
3484
|
+
/**
|
|
3485
|
+
* Whether all system components have at least one matching target in the results.
|
|
3486
|
+
*/
|
|
3487
|
+
allComponentsCovered?: boolean;
|
|
3488
|
+
/**
|
|
3489
|
+
* Overall compliance percentage across all assessments.
|
|
3490
|
+
*/
|
|
3491
|
+
compliancePercent?: number;
|
|
3492
|
+
/**
|
|
3493
|
+
* Number of waivers/amendments that have expired.
|
|
3494
|
+
*/
|
|
3495
|
+
expiredWaivers?: number;
|
|
3496
|
+
/**
|
|
3497
|
+
* SBOM coverage across system components.
|
|
3498
|
+
*/
|
|
3499
|
+
sbomCoverage?: SBOMCoverage;
|
|
3500
|
+
/**
|
|
3501
|
+
* Number of POA&M items that are still open (not completed).
|
|
3502
|
+
*/
|
|
3503
|
+
unresolvedPoams?: number;
|
|
3504
|
+
[property: string]: any;
|
|
3505
|
+
}
|
|
3506
|
+
/**
|
|
3507
|
+
* SBOM coverage across system components.
|
|
3508
|
+
*
|
|
3509
|
+
* SBOM coverage statistics for the system.
|
|
3510
|
+
*/
|
|
3511
|
+
export interface SBOMCoverage {
|
|
3512
|
+
/**
|
|
3513
|
+
* Number of system components that have an associated SBOM.
|
|
3514
|
+
*/
|
|
3515
|
+
componentsWithSbom?: number;
|
|
3516
|
+
/**
|
|
3517
|
+
* Total number of components in the system.
|
|
3518
|
+
*/
|
|
3519
|
+
totalComponents?: number;
|
|
3520
|
+
[property: string]: any;
|
|
3521
|
+
}
|
|
3522
|
+
/**
|
|
3523
|
+
* A reference to an HDF document or SBOM included in the evidence package.
|
|
3524
|
+
*/
|
|
3525
|
+
export interface ContentReference {
|
|
3526
|
+
/**
|
|
3527
|
+
* Cryptographic checksum for verifying the referenced document's integrity.
|
|
3528
|
+
*/
|
|
3529
|
+
checksum?: Checksum;
|
|
3530
|
+
/**
|
|
3531
|
+
* componentId of the component this content entry relates to. Use to link SBOMs, results,
|
|
3532
|
+
* or other documents to a specific system component.
|
|
3533
|
+
*/
|
|
3534
|
+
componentRef?: string;
|
|
3535
|
+
/**
|
|
3536
|
+
* Optional description of this content entry.
|
|
3537
|
+
*/
|
|
3538
|
+
description?: string;
|
|
3539
|
+
/**
|
|
3540
|
+
* The type of HDF document being referenced.
|
|
3541
|
+
*/
|
|
3542
|
+
type: ContentType;
|
|
3543
|
+
/**
|
|
3544
|
+
* URI to the document. Can be a relative path or absolute URL.
|
|
3545
|
+
*/
|
|
3546
|
+
uri: string;
|
|
3547
|
+
[property: string]: any;
|
|
3548
|
+
}
|
|
3549
|
+
/**
|
|
3550
|
+
* The type of HDF document being referenced.
|
|
3551
|
+
*
|
|
3552
|
+
* The type of document referenced in the evidence package.
|
|
3553
|
+
*/
|
|
3554
|
+
export declare enum ContentType {
|
|
3555
|
+
HdfAmendments = "hdf-amendments",
|
|
3556
|
+
HdfBaseline = "hdf-baseline",
|
|
3557
|
+
HdfComparison = "hdf-comparison",
|
|
3558
|
+
HdfPlan = "hdf-plan",
|
|
3559
|
+
HdfResults = "hdf-results",
|
|
3560
|
+
HdfSystem = "hdf-system",
|
|
3561
|
+
Sbom = "sbom"
|
|
3562
|
+
}
|