@mitre/hdf-openapi 3.8.0-next.42532249979.1 → 3.8.0-next.42533588944.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hdf-components.oas.json +280 -101
- package/dist/hdf-components.oas.yaml +179 -74
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -40,10 +40,6 @@
|
|
|
40
40
|
"type": "string",
|
|
41
41
|
"description": "The name of the parent baseline if this is a dependency of another."
|
|
42
42
|
},
|
|
43
|
-
"description": {
|
|
44
|
-
"type": "string",
|
|
45
|
-
"description": "The description - should be more detailed than the summary."
|
|
46
|
-
},
|
|
47
43
|
"integrity": {
|
|
48
44
|
"$ref": "#/components/schemas/Integrity",
|
|
49
45
|
"description": "Cryptographic integrity information for verifying this baseline has not been tampered with."
|
|
@@ -54,7 +50,7 @@
|
|
|
54
50
|
},
|
|
55
51
|
"resultsChecksum": {
|
|
56
52
|
"$ref": "#/components/schemas/Checksum",
|
|
57
|
-
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results.
|
|
53
|
+
"description": "SHA-256 checksum of the raw results before any amendments (statusOverrides or POAMs). Used to detect tampering with test results. Amendment integrity is checked against the document-level preAmendmentChecksum at the root, not this per-baseline value: hdf amend apply writes it as the hash of the raw document bytes immediately before the most recent amendment application, one step back only."
|
|
58
54
|
},
|
|
59
55
|
"statusMessage": {
|
|
60
56
|
"type": "string",
|
|
@@ -426,7 +422,6 @@
|
|
|
426
422
|
"statusOverrides": [
|
|
427
423
|
{
|
|
428
424
|
"type": "operationalRequirement",
|
|
429
|
-
"status": "failed",
|
|
430
425
|
"reason": "Air-gapped system requires USB transfer for classified data ingestion per operational procedure OP-2026-003. Compensating controls: USB ports are physically secured, all transfers are logged and require two-person integrity.",
|
|
431
426
|
"appliedBy": {
|
|
432
427
|
"type": "email",
|
|
@@ -493,6 +488,19 @@
|
|
|
493
488
|
"description": "A requirement that has been evaluated, including any findings.",
|
|
494
489
|
"title": "Evaluated Requirement"
|
|
495
490
|
},
|
|
491
|
+
"External_Reference_Encoding": {
|
|
492
|
+
"type": "string",
|
|
493
|
+
"enum": [
|
|
494
|
+
"utf-8",
|
|
495
|
+
"base64"
|
|
496
|
+
],
|
|
497
|
+
"description": "How an embedded copy's bytes are read back: 'utf-8' for text, 'base64' for anything that is not valid UTF-8 text.",
|
|
498
|
+
"title": "External Reference Encoding",
|
|
499
|
+
"examples": [
|
|
500
|
+
"base64"
|
|
501
|
+
],
|
|
502
|
+
"$comment": "Examples, in order: 1) a binary artifact, embedded base64-encoded."
|
|
503
|
+
},
|
|
496
504
|
"External_Reference": {
|
|
497
505
|
"type": "object",
|
|
498
506
|
"title": "External Reference",
|
|
@@ -608,12 +616,7 @@
|
|
|
608
616
|
"description": "Optional lossless embedded copy of the artifact's bytes as a string, for artifacts `document` cannot hold: XML, CSV, NDJSON, plain text, a JSON array, or bytes that are not valid UTF-8 text at all.\n\n`encoding` states how to read it back and is required alongside it. Set `mediaType` so a consumer knows what the bytes are, and `checksum` so the copy can be verified against the source.\n\nCarried verbatim — never reformatted, re-indented, or re-serialized."
|
|
609
617
|
},
|
|
610
618
|
"encoding": {
|
|
611
|
-
"
|
|
612
|
-
"title": "External Reference Encoding",
|
|
613
|
-
"enum": [
|
|
614
|
-
"utf-8",
|
|
615
|
-
"base64"
|
|
616
|
-
],
|
|
619
|
+
"$ref": "#/components/schemas/External_Reference_Encoding",
|
|
617
620
|
"description": "How to read `content` back into the artifact's bytes. 'utf-8' for text (XML, CSV, NDJSON, plain text, JavaScript-wrapped JSON); 'base64' for anything that is not valid UTF-8 text.\n\nRequired whenever `content` is present, and meaningless without it — an embedded copy whose encoding a consumer has to guess is not lossless."
|
|
618
621
|
}
|
|
619
622
|
},
|
|
@@ -697,7 +700,7 @@
|
|
|
697
700
|
"sha512",
|
|
698
701
|
"blake3"
|
|
699
702
|
],
|
|
700
|
-
"description": "Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers container-image and other artifact digests that use it. HDF tooling verifies every algorithm in this enum, so any of them may be recorded where the checksum needs to be verifiable.",
|
|
703
|
+
"description": "Cryptographic hash algorithms a checksum or integrity record may name. blake3 covers container-image and other artifact digests that use it. HDF tooling verifies every algorithm in this enum, so any of them may be recorded where the checksum needs to be verifiable. md5 and sha1 are excluded deliberately: a checksum or integrity record exists to detect tampering, and both are collision-broken, so a digest in either would look verifiable while proving nothing. A source tool digest in an excluded algorithm is not recorded as a checksum. Admitting weak hashes as an application-level accept/reject decision was considered and rejected; widening this enum is a schema decision, not an oversight.",
|
|
701
704
|
"title": "Hash Algorithm"
|
|
702
705
|
},
|
|
703
706
|
"Requirement_Group": {
|
|
@@ -1399,6 +1402,10 @@
|
|
|
1399
1402
|
"type": "string",
|
|
1400
1403
|
"description": "The title - should be human readable."
|
|
1401
1404
|
},
|
|
1405
|
+
"description": {
|
|
1406
|
+
"type": "string",
|
|
1407
|
+
"description": "Prose description of the baseline, more detailed than summary. Carried verbatim, like every HDF prose field."
|
|
1408
|
+
},
|
|
1402
1409
|
"maintainer": {
|
|
1403
1410
|
"type": "string",
|
|
1404
1411
|
"description": "The maintainer(s)."
|
|
@@ -1477,7 +1484,7 @@
|
|
|
1477
1484
|
},
|
|
1478
1485
|
"id": {
|
|
1479
1486
|
"type": "string",
|
|
1480
|
-
"description": "The requirement identifier. Example: 'SV-238196'."
|
|
1487
|
+
"description": "The requirement identifier, naming the requirement itself rather than one finding of it. Example: 'SV-238196'. Several entries in one baseline may legitimately carry the same id (one scanner reporting one CVE against several packages, or an overlay restating what it inherits), so an id is not an instance key: index requirements as id to list, never id to one, and an amendment addressing an id applies to every entry carrying it."
|
|
1481
1488
|
},
|
|
1482
1489
|
"title": {
|
|
1483
1490
|
"type": "string",
|
|
@@ -2648,6 +2655,25 @@
|
|
|
2648
2655
|
}
|
|
2649
2656
|
]
|
|
2650
2657
|
},
|
|
2658
|
+
"Modality": {
|
|
2659
|
+
"type": [
|
|
2660
|
+
"string",
|
|
2661
|
+
"array"
|
|
2662
|
+
],
|
|
2663
|
+
"items": {
|
|
2664
|
+
"type": "string"
|
|
2665
|
+
},
|
|
2666
|
+
"description": "A content modality such as text, image, audio, tabular or timeseries: one string, or a list when the content spans several.",
|
|
2667
|
+
"title": "Modality",
|
|
2668
|
+
"examples": [
|
|
2669
|
+
"text",
|
|
2670
|
+
[
|
|
2671
|
+
"text",
|
|
2672
|
+
"image"
|
|
2673
|
+
]
|
|
2674
|
+
],
|
|
2675
|
+
"$comment": "Examples, in order: 1) a single modality; 2) multimodal content listed in full."
|
|
2676
|
+
},
|
|
2651
2677
|
"AI_Model_Extension": {
|
|
2652
2678
|
"type": "object",
|
|
2653
2679
|
"additionalProperties": true,
|
|
@@ -2749,13 +2775,7 @@
|
|
|
2749
2775
|
"description": "Input/output data types. Examples: string, byte[], float32, image."
|
|
2750
2776
|
},
|
|
2751
2777
|
"modality": {
|
|
2752
|
-
"
|
|
2753
|
-
"string",
|
|
2754
|
-
"array"
|
|
2755
|
-
],
|
|
2756
|
-
"items": {
|
|
2757
|
-
"type": "string"
|
|
2758
|
-
},
|
|
2778
|
+
"$ref": "#/components/schemas/Modality",
|
|
2759
2779
|
"description": "Input/output modalities. String or array of strings. Examples: text, image, audio. Symmetric with Dataset_Extension.modality."
|
|
2760
2780
|
},
|
|
2761
2781
|
"contextLength": {
|
|
@@ -2795,13 +2815,7 @@
|
|
|
2795
2815
|
"description": "Free-text statement of the dataset's intended use (CISA/G7 minimum element)."
|
|
2796
2816
|
},
|
|
2797
2817
|
"modality": {
|
|
2798
|
-
"
|
|
2799
|
-
"string",
|
|
2800
|
-
"array"
|
|
2801
|
-
],
|
|
2802
|
-
"items": {
|
|
2803
|
-
"type": "string"
|
|
2804
|
-
},
|
|
2818
|
+
"$ref": "#/components/schemas/Modality",
|
|
2805
2819
|
"description": "Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text, image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not physical format. String or array of strings."
|
|
2806
2820
|
},
|
|
2807
2821
|
"provenance": {
|
|
@@ -3233,16 +3247,71 @@
|
|
|
3233
3247
|
"appliedAt",
|
|
3234
3248
|
"expiresAt"
|
|
3235
3249
|
],
|
|
3236
|
-
"
|
|
3250
|
+
"allOf": [
|
|
3237
3251
|
{
|
|
3238
|
-
"
|
|
3239
|
-
"
|
|
3240
|
-
|
|
3252
|
+
"if": {
|
|
3253
|
+
"properties": {
|
|
3254
|
+
"type": {
|
|
3255
|
+
"enum": [
|
|
3256
|
+
"operationalRequirement"
|
|
3257
|
+
]
|
|
3258
|
+
}
|
|
3259
|
+
},
|
|
3260
|
+
"required": [
|
|
3261
|
+
"type"
|
|
3262
|
+
]
|
|
3263
|
+
},
|
|
3264
|
+
"then": {
|
|
3265
|
+
"not": {
|
|
3266
|
+
"anyOf": [
|
|
3267
|
+
{
|
|
3268
|
+
"required": [
|
|
3269
|
+
"status"
|
|
3270
|
+
]
|
|
3271
|
+
},
|
|
3272
|
+
{
|
|
3273
|
+
"required": [
|
|
3274
|
+
"impact"
|
|
3275
|
+
]
|
|
3276
|
+
}
|
|
3277
|
+
]
|
|
3278
|
+
}
|
|
3279
|
+
},
|
|
3280
|
+
"else": {
|
|
3281
|
+
"anyOf": [
|
|
3282
|
+
{
|
|
3283
|
+
"required": [
|
|
3284
|
+
"status"
|
|
3285
|
+
]
|
|
3286
|
+
},
|
|
3287
|
+
{
|
|
3288
|
+
"required": [
|
|
3289
|
+
"impact"
|
|
3290
|
+
]
|
|
3291
|
+
}
|
|
3292
|
+
]
|
|
3293
|
+
}
|
|
3241
3294
|
},
|
|
3242
3295
|
{
|
|
3243
|
-
"
|
|
3244
|
-
"
|
|
3245
|
-
|
|
3296
|
+
"if": {
|
|
3297
|
+
"properties": {
|
|
3298
|
+
"type": {
|
|
3299
|
+
"enum": [
|
|
3300
|
+
"riskAdjustment"
|
|
3301
|
+
]
|
|
3302
|
+
}
|
|
3303
|
+
},
|
|
3304
|
+
"required": [
|
|
3305
|
+
"type"
|
|
3306
|
+
]
|
|
3307
|
+
},
|
|
3308
|
+
"then": {
|
|
3309
|
+
"not": {
|
|
3310
|
+
"required": [
|
|
3311
|
+
"status"
|
|
3312
|
+
]
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3246
3315
|
}
|
|
3247
3316
|
],
|
|
3248
3317
|
"properties": {
|
|
@@ -3259,11 +3328,11 @@
|
|
|
3259
3328
|
},
|
|
3260
3329
|
"status": {
|
|
3261
3330
|
"$ref": "#/components/schemas/Result_Status",
|
|
3262
|
-
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden."
|
|
3331
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
3263
3332
|
},
|
|
3264
3333
|
"impact": {
|
|
3265
3334
|
"$ref": "#/components/schemas/Impact_Override",
|
|
3266
|
-
"description": "Override to the requirement's impact score.
|
|
3335
|
+
"description": "Override to the requirement's impact score. For every type except operationalRequirement, at least one of status or impact must be set; an operationalRequirement carries neither."
|
|
3267
3336
|
},
|
|
3268
3337
|
"reason": {
|
|
3269
3338
|
"type": "string",
|
|
@@ -3308,7 +3377,7 @@
|
|
|
3308
3377
|
"description": "Structured controlled-vocabulary classification for why this override applies. Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive and attestation overrides where the structured category enables filtering and lossless round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the precedent vocabulary and rationale."
|
|
3309
3378
|
}
|
|
3310
3379
|
},
|
|
3311
|
-
"$comment": "Example 3: Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute.",
|
|
3380
|
+
"$comment": "Example 3: Inline riskAdjustment carrying the STIX source that motivated it via externalReferences (the enrichment envelope, with the raw sighting embedded losslessly in document). This is the shape the enrich pass writes onto Evaluated_Requirement.overrides[] for the E:A recompute. Example 7: operationalRequirement as it sits on the requirement after apply: no status, no impact; the finding stays failed and disposition reports operationalRequirement.",
|
|
3312
3381
|
"examples": [
|
|
3313
3382
|
{
|
|
3314
3383
|
"type": "waiver",
|
|
@@ -3408,9 +3477,19 @@
|
|
|
3408
3477
|
}
|
|
3409
3478
|
}
|
|
3410
3479
|
]
|
|
3480
|
+
},
|
|
3481
|
+
{
|
|
3482
|
+
"type": "operationalRequirement",
|
|
3483
|
+
"reason": "Air-gapped ingest requires USB transfer per operational procedure OP-2026-003. Ports are physically secured, transfers are logged and need two-person integrity.",
|
|
3484
|
+
"appliedBy": {
|
|
3485
|
+
"type": "email",
|
|
3486
|
+
"identifier": "system-owner@agency.gov"
|
|
3487
|
+
},
|
|
3488
|
+
"appliedAt": "2026-01-20T10:00:00Z",
|
|
3489
|
+
"expiresAt": "2099-12-31T00:00:00Z"
|
|
3411
3490
|
}
|
|
3412
3491
|
],
|
|
3413
|
-
"description": "An intentional change to a requirement's compliance status and/or impact score.
|
|
3492
|
+
"description": "An intentional change to a requirement's compliance status and/or impact score, as it sits on the requirement once applied. The same type-conditional rule as Standalone_Override: when type is 'operationalRequirement', neither status nor impact may be set, because the override records an accepted deviation without adjudicating the finding; it still governs disposition, and effectiveStatus stays what the results decided. When type is 'riskAdjustment', status may not be set: it re-rates the risk through impact and never changes pass/fail. For every other type, at least one of status or impact must be set. All overrides must have an expiration date to enforce periodic review.",
|
|
3414
3493
|
"title": "Status Override"
|
|
3415
3494
|
},
|
|
3416
3495
|
"POAM": {
|
|
@@ -3685,7 +3764,7 @@
|
|
|
3685
3764
|
"riskAdjustment",
|
|
3686
3765
|
"operationalRequirement"
|
|
3687
3766
|
],
|
|
3688
|
-
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
3767
|
+
"description": "The type of amendment, aligned with FedRAMP deviation request categories.\n\n- 'waiver': risk accepted by Authorizing Official.\n- 'attestation': manually verified by assessor.\n- 'poam': remediation tracked (no status change).\n- 'inherited': control provided by another component or system.\n- 'falsePositive': scanner incorrectly identified a finding — for compliance scans (STIG, CIS), the check actually passes, so status is typically set to 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to this system, so status is typically set to 'notApplicable'. The disposition field on the requirement distinguishes false positives from genuinely not-applicable findings.\n- 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk Adjustment); does not change pass/fail status, only impact via the impact field; a status on it is rejected by validation.\n- 'operationalRequirement': deviation required by operational constraints (FedRAMP Operational Requirement); the finding cannot be remediated because the system requires the affected functionality. Remains an open risk.\n\nMigration note: 'exception' was removed in v3.1.0 — use 'waiver' with status 'notApplicable' instead.",
|
|
3689
3768
|
"title": "Override Type"
|
|
3690
3769
|
},
|
|
3691
3770
|
"Justification": {
|
|
@@ -3725,7 +3804,7 @@
|
|
|
3725
3804
|
},
|
|
3726
3805
|
"Standalone_Override": {
|
|
3727
3806
|
"type": "object",
|
|
3728
|
-
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation
|
|
3807
|
+
"description": "A standalone override to a requirement's compliance status or risk impact.\n\nValidation is gated on 'type': when type is 'operationalRequirement', neither 'status' nor 'impact' may be set — the override records accepted risk without changing the finding (documentation-only). When type is 'riskAdjustment', 'status' may not be set — it re-rates the risk through 'impact' and never changes the finding's pass/fail; an override that must change status is a waiver or falsePositive. For all other types, at least one of 'status' or 'impact' must be set.\n\nThis rule aligns with:\n- OSCAL Assessment Results — finding.target.status and finding.associated-risk[].facet[] are separate axes (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/)\n- FedRAMP deviation request types — Risk Adjustment changes impact only, Operational Requirement documents acceptance only, False Positive changes status (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/)\n- NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).",
|
|
3729
3808
|
"unevaluatedProperties": false,
|
|
3730
3809
|
"required": [
|
|
3731
3810
|
"type",
|
|
@@ -3735,48 +3814,73 @@
|
|
|
3735
3814
|
"appliedAt",
|
|
3736
3815
|
"expiresAt"
|
|
3737
3816
|
],
|
|
3738
|
-
"
|
|
3739
|
-
|
|
3740
|
-
"
|
|
3741
|
-
"
|
|
3742
|
-
"
|
|
3817
|
+
"allOf": [
|
|
3818
|
+
{
|
|
3819
|
+
"if": {
|
|
3820
|
+
"properties": {
|
|
3821
|
+
"type": {
|
|
3822
|
+
"enum": [
|
|
3823
|
+
"operationalRequirement"
|
|
3824
|
+
]
|
|
3825
|
+
}
|
|
3826
|
+
},
|
|
3827
|
+
"required": [
|
|
3828
|
+
"type"
|
|
3829
|
+
]
|
|
3830
|
+
},
|
|
3831
|
+
"then": {
|
|
3832
|
+
"not": {
|
|
3833
|
+
"anyOf": [
|
|
3834
|
+
{
|
|
3835
|
+
"required": [
|
|
3836
|
+
"status"
|
|
3837
|
+
]
|
|
3838
|
+
},
|
|
3839
|
+
{
|
|
3840
|
+
"required": [
|
|
3841
|
+
"impact"
|
|
3842
|
+
]
|
|
3843
|
+
}
|
|
3844
|
+
]
|
|
3845
|
+
}
|
|
3846
|
+
},
|
|
3847
|
+
"else": {
|
|
3848
|
+
"anyOf": [
|
|
3849
|
+
{
|
|
3850
|
+
"required": [
|
|
3851
|
+
"status"
|
|
3852
|
+
]
|
|
3853
|
+
},
|
|
3854
|
+
{
|
|
3855
|
+
"required": [
|
|
3856
|
+
"impact"
|
|
3857
|
+
]
|
|
3858
|
+
}
|
|
3743
3859
|
]
|
|
3744
3860
|
}
|
|
3745
3861
|
},
|
|
3746
|
-
|
|
3747
|
-
"
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
"required": [
|
|
3755
|
-
"status"
|
|
3756
|
-
]
|
|
3862
|
+
{
|
|
3863
|
+
"if": {
|
|
3864
|
+
"properties": {
|
|
3865
|
+
"type": {
|
|
3866
|
+
"enum": [
|
|
3867
|
+
"riskAdjustment"
|
|
3868
|
+
]
|
|
3869
|
+
}
|
|
3757
3870
|
},
|
|
3758
|
-
{
|
|
3759
|
-
"required": [
|
|
3760
|
-
"impact"
|
|
3761
|
-
]
|
|
3762
|
-
}
|
|
3763
|
-
]
|
|
3764
|
-
}
|
|
3765
|
-
},
|
|
3766
|
-
"else": {
|
|
3767
|
-
"anyOf": [
|
|
3768
|
-
{
|
|
3769
3871
|
"required": [
|
|
3770
|
-
"
|
|
3872
|
+
"type"
|
|
3771
3873
|
]
|
|
3772
3874
|
},
|
|
3773
|
-
{
|
|
3774
|
-
"
|
|
3775
|
-
"
|
|
3776
|
-
|
|
3875
|
+
"then": {
|
|
3876
|
+
"not": {
|
|
3877
|
+
"required": [
|
|
3878
|
+
"status"
|
|
3879
|
+
]
|
|
3880
|
+
}
|
|
3777
3881
|
}
|
|
3778
|
-
|
|
3779
|
-
|
|
3882
|
+
}
|
|
3883
|
+
],
|
|
3780
3884
|
"properties": {
|
|
3781
3885
|
"externalReferences": {
|
|
3782
3886
|
"type": "array",
|
|
@@ -3792,7 +3896,7 @@
|
|
|
3792
3896
|
"requirementId": {
|
|
3793
3897
|
"type": "string",
|
|
3794
3898
|
"minLength": 1,
|
|
3795
|
-
"description": "The
|
|
3899
|
+
"description": "The id of the requirement being amended. An id names the requirement, not one finding, so the override applies to every requirement entry carrying that id in the baseline(s) it targets."
|
|
3796
3900
|
},
|
|
3797
3901
|
"baselineRef": {
|
|
3798
3902
|
"type": "string",
|
|
@@ -3800,7 +3904,7 @@
|
|
|
3800
3904
|
},
|
|
3801
3905
|
"status": {
|
|
3802
3906
|
"$ref": "#/components/schemas/Result_Status",
|
|
3803
|
-
"description": "The new status this
|
|
3907
|
+
"description": "The new status this override sets for the requirement. Optional when only impact is being overridden; forbidden on an operationalRequirement, which adjudicates nothing, and on a riskAdjustment, which re-rates impact only."
|
|
3804
3908
|
},
|
|
3805
3909
|
"impact": {
|
|
3806
3910
|
"$ref": "#/components/schemas/Impact_Override",
|
|
@@ -4108,11 +4212,7 @@
|
|
|
4108
4212
|
"description": "The source tool's own record for this result, carrying every field the record had.\n\nCOMPLETE, NOT NECESSARILY BYTE-EXACT. A producer SHOULD write the record's bytes unchanged where it can. A producer that cannot — notably one implemented in two languages whose JSON serializers disagree on key order, HTML escaping and number rendering, and which therefore MUST canonicalize to stay byte-identical with its twin — MAY write a canonically serialized form instead. Such a form preserves every field and value but not the original key order, insignificant whitespace, or duplicate keys. A consumer MUST therefore compare records by parsing them, not by comparing bytes, and MUST NOT checksum this field and expect the result to match a checksum of the input.\n\nFor carriage that IS byte-exact, use `extensions.rawSourceArtifacts[]`, which forbids a parsed `document` precisely so the bytes and their checksum survive; `pointer` ties this record to its position within that artifact."
|
|
4109
4213
|
},
|
|
4110
4214
|
"encoding": {
|
|
4111
|
-
"
|
|
4112
|
-
"enum": [
|
|
4113
|
-
"utf-8",
|
|
4114
|
-
"base64"
|
|
4115
|
-
],
|
|
4215
|
+
"$ref": "#/components/schemas/External_Reference_Encoding",
|
|
4116
4216
|
"description": "How to read `content`: 'utf-8' for text, 'base64' for bytes that are not valid UTF-8 text."
|
|
4117
4217
|
},
|
|
4118
4218
|
"mediaType": {
|
|
@@ -4832,7 +4932,8 @@
|
|
|
4832
4932
|
},
|
|
4833
4933
|
"allowedValues": {
|
|
4834
4934
|
"type": "array",
|
|
4835
|
-
"
|
|
4935
|
+
"items": true,
|
|
4936
|
+
"description": "Enumeration of permitted values. Each entry may be any JSON value, the same freedom Input.value has: an Array or Hash input enumerates container values, so no element type is imposed."
|
|
4836
4937
|
}
|
|
4837
4938
|
},
|
|
4838
4939
|
"description": "Validation constraints for an input value.",
|
|
@@ -5467,7 +5568,7 @@
|
|
|
5467
5568
|
"total": {
|
|
5468
5569
|
"type": "integer",
|
|
5469
5570
|
"minimum": 0,
|
|
5470
|
-
"description": "Total number of
|
|
5571
|
+
"description": "Total number of distinct requirement ids across all sources; an id carried by several entries counts once."
|
|
5471
5572
|
},
|
|
5472
5573
|
"matchedCount": {
|
|
5473
5574
|
"type": "integer",
|
|
@@ -5552,6 +5653,21 @@
|
|
|
5552
5653
|
"description": "Summary statistics for the overall comparison.",
|
|
5553
5654
|
"title": "Comparison Summary"
|
|
5554
5655
|
},
|
|
5656
|
+
"Baseline_Diff_State": {
|
|
5657
|
+
"type": "string",
|
|
5658
|
+
"enum": [
|
|
5659
|
+
"new",
|
|
5660
|
+
"absent",
|
|
5661
|
+
"unchanged",
|
|
5662
|
+
"updated"
|
|
5663
|
+
],
|
|
5664
|
+
"description": "How a baseline or component fared across the compared documents: new (only in the newer), absent (only in the older), unchanged, or updated (present in both with a changed version).",
|
|
5665
|
+
"title": "Baseline Diff State",
|
|
5666
|
+
"examples": [
|
|
5667
|
+
"updated"
|
|
5668
|
+
],
|
|
5669
|
+
"$comment": "Examples, in order: 1) a baseline present in both documents whose version moved."
|
|
5670
|
+
},
|
|
5555
5671
|
"Baseline_Diff": {
|
|
5556
5672
|
"type": "object",
|
|
5557
5673
|
"unevaluatedProperties": false,
|
|
@@ -5565,14 +5681,7 @@
|
|
|
5565
5681
|
"description": "Name of the baseline being compared."
|
|
5566
5682
|
},
|
|
5567
5683
|
"state": {
|
|
5568
|
-
"
|
|
5569
|
-
"title": "Baseline Diff State",
|
|
5570
|
-
"enum": [
|
|
5571
|
-
"new",
|
|
5572
|
-
"absent",
|
|
5573
|
-
"unchanged",
|
|
5574
|
-
"updated"
|
|
5575
|
-
],
|
|
5684
|
+
"$ref": "#/components/schemas/Baseline_Diff_State",
|
|
5576
5685
|
"description": "The state of this baseline in the comparison."
|
|
5577
5686
|
},
|
|
5578
5687
|
"oldVersion": {
|
|
@@ -5604,14 +5713,7 @@
|
|
|
5604
5713
|
"description": "Component name used for matching across system versions."
|
|
5605
5714
|
},
|
|
5606
5715
|
"state": {
|
|
5607
|
-
"
|
|
5608
|
-
"title": "Baseline Diff State",
|
|
5609
|
-
"enum": [
|
|
5610
|
-
"new",
|
|
5611
|
-
"absent",
|
|
5612
|
-
"unchanged",
|
|
5613
|
-
"updated"
|
|
5614
|
-
],
|
|
5716
|
+
"$ref": "#/components/schemas/Baseline_Diff_State",
|
|
5615
5717
|
"description": "The state of this component in the comparison."
|
|
5616
5718
|
},
|
|
5617
5719
|
"before": {
|
|
@@ -5871,6 +5973,10 @@
|
|
|
5871
5973
|
"type": "string",
|
|
5872
5974
|
"description": "The requirement title for human readability."
|
|
5873
5975
|
},
|
|
5976
|
+
"baseline": {
|
|
5977
|
+
"type": "string",
|
|
5978
|
+
"description": "Name of the baseline the requirement belongs to, so a consumer can group diffs the way hdf diff --group-by baseline does. '(multiple)' when the id appears in more than one baseline of the same document."
|
|
5979
|
+
},
|
|
5874
5980
|
"oldEffectiveStatus": {
|
|
5875
5981
|
"type": "string",
|
|
5876
5982
|
"description": "The effective status of the requirement in the old source."
|
|
@@ -5936,7 +6042,79 @@
|
|
|
5936
6042
|
}
|
|
5937
6043
|
},
|
|
5938
6044
|
"description": "A comparison of a single requirement between sources, including state, changes, and full before/after snapshots.",
|
|
5939
|
-
"title": "Requirement Diff"
|
|
6045
|
+
"title": "Requirement Diff",
|
|
6046
|
+
"examples": [
|
|
6047
|
+
{
|
|
6048
|
+
"id": "SV-257777",
|
|
6049
|
+
"baseline": "rhel9-stig-baseline",
|
|
6050
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
6051
|
+
"state": "fixed",
|
|
6052
|
+
"changeReasons": [
|
|
6053
|
+
"resultChanged"
|
|
6054
|
+
],
|
|
6055
|
+
"before": {
|
|
6056
|
+
"id": "SV-257777",
|
|
6057
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
6058
|
+
"impact": 0.5,
|
|
6059
|
+
"tags": {
|
|
6060
|
+
"nist": [
|
|
6061
|
+
"CM-7"
|
|
6062
|
+
]
|
|
6063
|
+
},
|
|
6064
|
+
"sourceLocation": {},
|
|
6065
|
+
"descriptions": [
|
|
6066
|
+
{
|
|
6067
|
+
"label": "default",
|
|
6068
|
+
"data": "USB mass storage must be disabled unless an operational need is documented."
|
|
6069
|
+
}
|
|
6070
|
+
],
|
|
6071
|
+
"results": [
|
|
6072
|
+
{
|
|
6073
|
+
"status": "failed",
|
|
6074
|
+
"codeDesc": "Kernel module usb-storage is loadable",
|
|
6075
|
+
"startTime": "2026-03-01T10:00:00Z"
|
|
6076
|
+
}
|
|
6077
|
+
]
|
|
6078
|
+
},
|
|
6079
|
+
"after": {
|
|
6080
|
+
"id": "SV-257777",
|
|
6081
|
+
"title": "RHEL 9 must prevent the loading of the USB storage kernel module.",
|
|
6082
|
+
"impact": 0.5,
|
|
6083
|
+
"tags": {
|
|
6084
|
+
"nist": [
|
|
6085
|
+
"CM-7"
|
|
6086
|
+
]
|
|
6087
|
+
},
|
|
6088
|
+
"sourceLocation": {},
|
|
6089
|
+
"descriptions": [
|
|
6090
|
+
{
|
|
6091
|
+
"label": "default",
|
|
6092
|
+
"data": "USB mass storage must be disabled unless an operational need is documented."
|
|
6093
|
+
}
|
|
6094
|
+
],
|
|
6095
|
+
"results": [
|
|
6096
|
+
{
|
|
6097
|
+
"status": "passed",
|
|
6098
|
+
"codeDesc": "Kernel module usb-storage is blacklisted",
|
|
6099
|
+
"startTime": "2026-03-30T10:00:00Z"
|
|
6100
|
+
}
|
|
6101
|
+
]
|
|
6102
|
+
},
|
|
6103
|
+
"oldEffectiveStatus": "failed",
|
|
6104
|
+
"newEffectiveStatus": "passed",
|
|
6105
|
+
"fieldChanges": [
|
|
6106
|
+
{
|
|
6107
|
+
"op": "replace",
|
|
6108
|
+
"path": "/results/0/status",
|
|
6109
|
+
"oldValue": "failed",
|
|
6110
|
+
"newValue": "passed"
|
|
6111
|
+
}
|
|
6112
|
+
],
|
|
6113
|
+
"matchStrategy": "exactId",
|
|
6114
|
+
"matchConfidence": 1
|
|
6115
|
+
}
|
|
6116
|
+
],
|
|
6117
|
+
"$comment": "Examples, in order: 1) a requirement fixed between two scans of the same baseline, carrying the owning baseline name and the exact-id match that paired it."
|
|
5940
6118
|
},
|
|
5941
6119
|
"Cross_System_Reference": {
|
|
5942
6120
|
"type": "object",
|
|
@@ -6713,6 +6891,7 @@
|
|
|
6713
6891
|
{
|
|
6714
6892
|
"name": "ubuntu-2204-stig-baseline",
|
|
6715
6893
|
"title": "Canonical Ubuntu 22.04 LTS STIG Baseline",
|
|
6894
|
+
"description": "Requirements from the DISA STIG for Canonical Ubuntu 22.04 LTS, tailored for hosts in the CUI enclave; checks that need a graphical session are marked not applicable.",
|
|
6716
6895
|
"version": "1.2.0",
|
|
6717
6896
|
"maintainer": "DISA STIG Team",
|
|
6718
6897
|
"license": "Apache-2.0",
|