@mitre/hdf-schema 3.0.1 → 3.1.0
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/LICENSE.md +55 -0
- package/README.md +83 -40
- package/dist/go/hdf.go +148 -104
- package/dist/index.d.ts +26 -1
- package/dist/index.js +26 -1
- package/dist/schemas/hdf-amendments.schema.json +178 -53
- package/dist/schemas/hdf-baseline.schema.json +181 -56
- package/dist/schemas/hdf-comparison.schema.json +523 -108
- package/dist/schemas/hdf-evidence-package.schema.json +175 -50
- package/dist/schemas/hdf-plan.schema.json +181 -56
- package/dist/schemas/hdf-results.schema.json +502 -87
- package/dist/schemas/hdf-system.schema.json +190 -65
- package/dist/ts/hdf-amendments.d.ts +43 -15
- package/dist/ts/hdf-amendments.js +18 -7
- package/dist/ts/hdf-amendments.ts +44 -15
- package/dist/ts/hdf-results.d.ts +91 -37
- package/dist/ts/hdf-results.js +40 -20
- package/dist/ts/hdf-results.ts +91 -36
- package/package.json +44 -45
- package/dist/python/hdf_amendments.py +0 -695
- package/dist/python/hdf_baseline.py +0 -782
- package/dist/python/hdf_comparison.py +0 -1771
- package/dist/python/hdf_evidence_package.py +0 -593
- package/dist/python/hdf_plan.py +0 -363
- package/dist/python/hdf_results.py +0 -2163
- package/dist/python/hdf_system.py +0 -904
- package/src/schemas/hdf-amendments.schema.json +0 -97
- package/src/schemas/hdf-baseline.schema.json +0 -190
- package/src/schemas/hdf-comparison.schema.json +0 -107
- package/src/schemas/hdf-evidence-package.schema.json +0 -227
- package/src/schemas/hdf-plan.schema.json +0 -92
- package/src/schemas/hdf-results.schema.json +0 -304
- package/src/schemas/hdf-system.schema.json +0 -136
- package/src/schemas/primitives/amendments.schema.json +0 -155
- package/src/schemas/primitives/common.schema.json +0 -814
- package/src/schemas/primitives/comparison.schema.json +0 -809
- package/src/schemas/primitives/component.schema.json +0 -518
- package/src/schemas/primitives/data-flow.schema.json +0 -158
- package/src/schemas/primitives/extensions.schema.json +0 -342
- package/src/schemas/primitives/parameter.schema.json +0 -128
- package/src/schemas/primitives/plan.schema.json +0 -128
- package/src/schemas/primitives/platform.schema.json +0 -32
- package/src/schemas/primitives/result.schema.json +0 -133
- package/src/schemas/primitives/runner.schema.json +0 -83
- package/src/schemas/primitives/statistics.schema.json +0 -71
- package/src/schemas/primitives/system.schema.json +0 -132
- package/src/schemas/primitives/target.schema.json +0 -523
package/LICENSE.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# License
|
|
2
|
+
|
|
3
|
+
Copyright © 2025 The MITRE Corporation.
|
|
4
|
+
|
|
5
|
+
Approved for Public Release; Distribution Unlimited. Case Number 18-3678.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
8
|
+
not use this file except in compliance with the License. You may obtain a
|
|
9
|
+
copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
15
|
+
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
16
|
+
License for the specific language governing permissions and limitations
|
|
17
|
+
under the License.
|
|
18
|
+
|
|
19
|
+
## Redistribution Terms
|
|
20
|
+
|
|
21
|
+
Redistribution and use in source and binary forms, with or without
|
|
22
|
+
modification, are permitted provided that the following conditions are
|
|
23
|
+
met:
|
|
24
|
+
|
|
25
|
+
- Redistributions of source code must retain the above copyright/digital
|
|
26
|
+
rights legend, this list of conditions and the following Notice.
|
|
27
|
+
- Redistributions in binary form must reproduce the above
|
|
28
|
+
copyright/digital rights legend, this list of conditions and the
|
|
29
|
+
following Notice in the documentation and/or other materials provided
|
|
30
|
+
with the distribution.
|
|
31
|
+
- Neither the name of The MITRE Corporation nor the names of its contributors
|
|
32
|
+
may be used to endorse or promote products derived from this software
|
|
33
|
+
without specific prior written permission.
|
|
34
|
+
|
|
35
|
+
## Notice
|
|
36
|
+
|
|
37
|
+
The MITRE Corporation grants permission to reproduce, distribute, modify, and
|
|
38
|
+
otherwise use this software to the extent permitted by the licensed terms
|
|
39
|
+
provided in the LICENSE file included with this project.
|
|
40
|
+
|
|
41
|
+
This software was produced by The MITRE Corporation for the U.S. Government
|
|
42
|
+
under contract. As such the U.S. Government has certain use and data
|
|
43
|
+
rights in this software. No use other than those granted to the U.S.
|
|
44
|
+
Government, or to those acting on behalf of the U.S. Government, under
|
|
45
|
+
these contract arrangements is authorized without the express written
|
|
46
|
+
permission of The MITRE Corporation.
|
|
47
|
+
|
|
48
|
+
Some files in this codebase were generated by generative AI, under the
|
|
49
|
+
direction and review of The MITRE Corporation employees, for the purpose of
|
|
50
|
+
development efficiency. All AI-generated code functionality was validated
|
|
51
|
+
by standard quality and assurance testing.
|
|
52
|
+
|
|
53
|
+
For further information, please contact The MITRE Corporation,
|
|
54
|
+
Contracts Management Office, 7515 Colshire Drive, McLean, VA 22102-7539,
|
|
55
|
+
(703) 983-6000.
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ JSON schemas and multi-language type definitions for **Heimdall Data Format (HDF
|
|
|
7
7
|
HDF is a standardized format for representing security assessment results. This package provides:
|
|
8
8
|
|
|
9
9
|
- **JSON Schemas** for validating HDF documents
|
|
10
|
-
- **Generated types** for TypeScript
|
|
10
|
+
- **Generated types** for TypeScript and Go
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
@@ -17,31 +17,67 @@ npm install @mitre/hdf-schema
|
|
|
17
17
|
|
|
18
18
|
## Schema Types
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Seven document types covering the full security assessment lifecycle:
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
### HDF Results (`hdf-results`)
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
- Evaluated baselines with requirement results
|
|
26
|
-
- Pass/fail status for each check
|
|
27
|
-
- Statistics and timing data
|
|
24
|
+
Assessment findings from running security checks against target systems. The primary output of converters. Contains evaluated baselines with requirement results, components (hosts, containers, cloud resources), status overrides with disposition tracking, and statistics.
|
|
28
25
|
|
|
29
|
-
### HDF Baseline
|
|
26
|
+
### HDF Baseline (`hdf-baseline`)
|
|
30
27
|
|
|
31
|
-
Security requirement definitions without results. Contains
|
|
28
|
+
Security requirement definitions without results — the "what to check" document. Contains requirement metadata (title, descriptions, severity, impact), check/fix instructions, framework mappings (NIST, CCI), and dependency information.
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
### HDF System (`hdf-system`)
|
|
31
|
+
|
|
32
|
+
Authorization boundary definition. Describes a system's components (with polymorphic types: host, container, cloud account, application, etc.), data flows between components, and control designations (common/hybrid/system-specific).
|
|
33
|
+
|
|
34
|
+
### HDF Plan (`hdf-plan`)
|
|
35
|
+
|
|
36
|
+
Assessment plan linking baselines to system components. Defines what will be assessed, how, and by whom. References baselines, systems, and runner configurations.
|
|
37
|
+
|
|
38
|
+
### HDF Amendments (`hdf-amendments`)
|
|
39
|
+
|
|
40
|
+
Standalone amendment documents containing waivers, attestations, POA&Ms, and other overrides. Applied to results via `hdf amend apply` to track adjudication decisions (false positives, risk adjustments, operational requirements).
|
|
41
|
+
|
|
42
|
+
### HDF Evidence Package (`hdf-evidence-package`)
|
|
43
|
+
|
|
44
|
+
Bundles references to all documents needed for a compliance review — results, baselines, system, plan, and amendments — with checksums for integrity verification.
|
|
45
|
+
|
|
46
|
+
### HDF Comparison (`hdf-comparison`)
|
|
47
|
+
|
|
48
|
+
Output of the diff engine. Structural comparison between two or more HDF documents showing requirement-level changes, status transitions, and field diffs.
|
|
37
49
|
|
|
38
50
|
## Usage
|
|
39
51
|
|
|
52
|
+
### Importing Schemas
|
|
53
|
+
|
|
54
|
+
Schemas can be imported in two ways:
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// Named exports from the barrel (all schemas available)
|
|
58
|
+
import { hdfResultsSchema, hdfBaselineSchema, hdfSystemSchema } from '@mitre/hdf-schema';
|
|
59
|
+
|
|
60
|
+
// Sub-path imports (one schema per import, tree-shakeable)
|
|
61
|
+
import type { HdfResults } from '@mitre/hdf-schema/hdf-results';
|
|
62
|
+
import type { HdfBaseline } from '@mitre/hdf-schema/hdf-baseline';
|
|
63
|
+
import type { HdfSystem } from '@mitre/hdf-schema/hdf-system';
|
|
64
|
+
import type { HdfPlan } from '@mitre/hdf-schema/hdf-plan';
|
|
65
|
+
import type { HdfAmendments } from '@mitre/hdf-schema/hdf-amendments';
|
|
66
|
+
import type { HdfEvidencePackage } from '@mitre/hdf-schema/hdf-evidence-package';
|
|
67
|
+
import type { HdfComparison } from '@mitre/hdf-schema/hdf-comparison';
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Helper functions (severity mapping, effective status computation):
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { severityToImpact, impactToSeverity, computeEffectiveStatus } from '@mitre/hdf-schema/helpers';
|
|
74
|
+
```
|
|
75
|
+
|
|
40
76
|
### Validating Documents (TypeScript/JavaScript)
|
|
41
77
|
|
|
42
78
|
```typescript
|
|
43
79
|
import Ajv from 'ajv';
|
|
44
|
-
import hdfResultsSchema from '@mitre/hdf-schema
|
|
80
|
+
import { hdfResultsSchema } from '@mitre/hdf-schema';
|
|
45
81
|
|
|
46
82
|
const ajv = new Ajv({ strict: false });
|
|
47
83
|
const validate = ajv.compile(hdfResultsSchema);
|
|
@@ -58,8 +94,8 @@ if (!isValid) {
|
|
|
58
94
|
import type { HdfResults, HdfBaseline } from '@mitre/hdf-schema';
|
|
59
95
|
|
|
60
96
|
function processResults(results: HdfResults) {
|
|
61
|
-
for (const baseline of results.
|
|
62
|
-
for (const requirement of baseline.
|
|
97
|
+
for (const baseline of results.baselines) {
|
|
98
|
+
for (const requirement of baseline.requirements) {
|
|
63
99
|
console.log(`${requirement.id}: ${requirement.results[0]?.status}`);
|
|
64
100
|
}
|
|
65
101
|
}
|
|
@@ -69,39 +105,33 @@ function processResults(results: HdfResults) {
|
|
|
69
105
|
### Using Generated Types (Go)
|
|
70
106
|
|
|
71
107
|
```go
|
|
72
|
-
import "github.com/mitre/hdf-libs/hdf-schema/dist/go
|
|
108
|
+
import hdf "github.com/mitre/hdf-libs/hdf-schema/dist/go"
|
|
73
109
|
|
|
74
110
|
func main() {
|
|
75
|
-
data := []byte(`{"
|
|
76
|
-
results, err := hdf.
|
|
111
|
+
data := []byte(`{"baselines": [...]}`)
|
|
112
|
+
results, err := hdf.UnmarshalHDFResults(data)
|
|
77
113
|
if err != nil {
|
|
78
114
|
panic(err)
|
|
79
115
|
}
|
|
80
|
-
|
|
116
|
+
for _, baseline := range results.Baselines {
|
|
117
|
+
fmt.Printf("%s: %d requirements\n", baseline.Name, len(baseline.Requirements))
|
|
118
|
+
}
|
|
81
119
|
}
|
|
82
120
|
```
|
|
83
121
|
|
|
84
|
-
### Using Generated Types (Python)
|
|
85
|
-
|
|
86
|
-
```python
|
|
87
|
-
from hdf_results import HdfResults
|
|
88
|
-
import json
|
|
89
|
-
|
|
90
|
-
with open('results.json') as f:
|
|
91
|
-
data = json.load(f)
|
|
92
|
-
results = HdfResults.from_dict(data)
|
|
93
|
-
print(results.version)
|
|
94
|
-
```
|
|
95
|
-
|
|
96
122
|
## Schema Files
|
|
97
123
|
|
|
98
124
|
| File | Description |
|
|
99
125
|
|------|-------------|
|
|
100
|
-
| `src/schemas/hdf-results.schema.json` |
|
|
101
|
-
| `src/schemas/hdf-baseline.schema.json` |
|
|
126
|
+
| `src/schemas/hdf-results.schema.json` | Assessment findings (modular, uses $ref) |
|
|
127
|
+
| `src/schemas/hdf-baseline.schema.json` | Requirement definitions without results |
|
|
128
|
+
| `src/schemas/hdf-system.schema.json` | Authorization boundary, components, data flows |
|
|
129
|
+
| `src/schemas/hdf-plan.schema.json` | Assessment plan linking baselines to components |
|
|
130
|
+
| `src/schemas/hdf-amendments.schema.json` | Waivers, attestations, POA&Ms |
|
|
131
|
+
| `src/schemas/hdf-evidence-package.schema.json` | Bundle of references to all documents |
|
|
132
|
+
| `src/schemas/hdf-comparison.schema.json` | Differential analysis between assessments |
|
|
102
133
|
| `src/schemas/primitives/*.schema.json` | Shared type definitions |
|
|
103
|
-
| `dist/schemas
|
|
104
|
-
| `dist/schemas/hdf-baseline.schema.json` | Bundled baseline schema (self-contained) |
|
|
134
|
+
| `dist/schemas/*.schema.json` | Bundled schemas (self-contained, all $refs inlined) |
|
|
105
135
|
|
|
106
136
|
### Modular vs Bundled Schemas
|
|
107
137
|
|
|
@@ -115,9 +145,8 @@ After building, types are available in:
|
|
|
115
145
|
|
|
116
146
|
| Language | Location |
|
|
117
147
|
|----------|----------|
|
|
118
|
-
| TypeScript | `dist/ts/hdf
|
|
119
|
-
| Go | `dist/go/
|
|
120
|
-
| Python | `dist/python/hdf_results.py`, `dist/python/hdf_baseline.py` |
|
|
148
|
+
| TypeScript | `dist/ts/hdf-*.ts` (7 files, one per schema) |
|
|
149
|
+
| Go | `dist/go/hdf.go` (single file containing all types) |
|
|
121
150
|
|
|
122
151
|
## Development
|
|
123
152
|
|
|
@@ -144,7 +173,7 @@ This package has two version numbers that serve different purposes:
|
|
|
144
173
|
|
|
145
174
|
- **Package version** (`package.json` `version`): Follows npm semver. Bumped on every release — bug fixes, new helpers, type generation improvements, dependency updates. This is what consumers see in `npm install @mitre/hdf-schema@3.0.1`.
|
|
146
175
|
|
|
147
|
-
- **Schema version** (`$id` URL in each `.schema.json`): Identifies the schema structure itself. Only changes when the schema structure changes — new fields, removed fields, type changes, constraint changes. Example: `https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.
|
|
176
|
+
- **Schema version** (`$id` URL in each `.schema.json`): Identifies the schema structure itself. Only changes when the schema structure changes — new fields, removed fields, type changes, constraint changes. Example: `https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.1.0`.
|
|
148
177
|
|
|
149
178
|
These versions are aligned at major boundaries (both are 3.x to signal this is the successor to the heimdall2 v2.x ecosystem) but can diverge at minor/patch levels. A package patch release (e.g., 3.0.1 → 3.0.2) that only fixes a converter bug or updates a helper function does not change the schema `$id`. A schema structural change (e.g., adding a new required field) bumps the schema version in the `$id` URL regardless of where the package version stands.
|
|
150
179
|
|
|
@@ -153,3 +182,17 @@ The `$id` URLs are also the canonical hosted location for each schema: `https://
|
|
|
153
182
|
### JSON Schema dialect
|
|
154
183
|
|
|
155
184
|
All schemas use **JSON Schema draft/2020-12**.
|
|
185
|
+
|
|
186
|
+
### Hosted schema documentation
|
|
187
|
+
|
|
188
|
+
Interactive schema reference documentation is published at:
|
|
189
|
+
**<https://mitre.github.io/hdf-libs/schemas/>**
|
|
190
|
+
|
|
191
|
+
### What's new in v3.1.0
|
|
192
|
+
|
|
193
|
+
- **`disposition`** field on `EvaluatedRequirement` — the type of the governing override or POAM (e.g., `waiver`, `falsePositive`, `riskAdjustment`). Indicates why a requirement is in its current state.
|
|
194
|
+
- **`effectiveImpact`** field on `EvaluatedRequirement` — the computed impact score (0.0–1.0) after applying the most recent non-expired impact override.
|
|
195
|
+
- **`Impact_Override`** type on `Status_Override` and `Standalone_Override` — object with a `value` field (0.0–1.0). At least one of `status` or `impact` must be set (enforced via `anyOf`).
|
|
196
|
+
- **`Override_Type` expansion** — added `falsePositive`, `riskAdjustment`, `operationalRequirement`; removed `exception` (use `waiver` with `status: "notApplicable"` instead).
|
|
197
|
+
- **`vendorDependency`** added to POAM type enum.
|
|
198
|
+
- **Breaking:** The `./schemas/<name>.schema.json` sub-path export was removed. Use named imports from the barrel (`import { hdfResultsSchema } from '@mitre/hdf-schema'`) instead.
|
package/dist/go/hdf.go
CHANGED
|
@@ -342,8 +342,18 @@ type EvaluatedRequirement struct {
|
|
|
342
342
|
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
343
343
|
// 'fix', 'rationale'.
|
|
344
344
|
Descriptions []Description `json:"descriptions"`
|
|
345
|
-
// The
|
|
346
|
-
//
|
|
345
|
+
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
346
|
+
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
347
|
+
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
348
|
+
// POAMs apply.
|
|
349
|
+
Disposition *OverrideType `json:"disposition,omitempty"`
|
|
350
|
+
// The current effective impact score (0.0–1.0) after applying the most recent non-expired
|
|
351
|
+
// override with an impact field. Absent when no impact overrides apply; consumers should
|
|
352
|
+
// use the requirement's impact field in that case.
|
|
353
|
+
EffectiveImpact *float64 `json:"effectiveImpact,omitempty"`
|
|
354
|
+
// The current effective compliance status of this requirement after applying the most
|
|
355
|
+
// recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
356
|
+
// no status-bearing overrides exist.
|
|
347
357
|
EffectiveStatus *ResultStatus `json:"effectiveStatus,omitempty"`
|
|
348
358
|
// Supporting evidence for this requirement's findings, such as screenshots, code samples,
|
|
349
359
|
// or log excerpts.
|
|
@@ -359,9 +369,10 @@ type EvaluatedRequirement struct {
|
|
|
359
369
|
Severity *Severity `json:"severity,omitempty"`
|
|
360
370
|
// The explicit location of the requirement within the source code.
|
|
361
371
|
SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
|
|
362
|
-
// Chronological history of all
|
|
363
|
-
//
|
|
364
|
-
// recent override should be first in array.
|
|
372
|
+
// Chronological history of all overrides applied to this requirement. Overrides are
|
|
373
|
+
// intentional changes to the compliance status and/or impact score (waivers, attestations,
|
|
374
|
+
// false positives, risk adjustments). Most recent override should be first in array.
|
|
375
|
+
// Preserves full audit trail.
|
|
365
376
|
StatusOverrides []StatusOverride `json:"statusOverrides,omitempty"`
|
|
366
377
|
// The requirement identifier. Example: 'SV-238196'.
|
|
367
378
|
ID string `json:"id"`
|
|
@@ -421,8 +432,8 @@ type Evidence struct {
|
|
|
421
432
|
//
|
|
422
433
|
// The identity that created this signature.
|
|
423
434
|
//
|
|
424
|
-
// Identity of who applied this
|
|
425
|
-
//
|
|
435
|
+
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
436
|
+
// identifier.
|
|
426
437
|
//
|
|
427
438
|
// Identity of the person or system that approved this override.
|
|
428
439
|
//
|
|
@@ -482,6 +493,7 @@ type PoamElement struct {
|
|
|
482
493
|
Signature *Signature `json:"signature,omitempty"`
|
|
483
494
|
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
484
495
|
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
496
|
+
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
485
497
|
Type PoamType `json:"type"`
|
|
486
498
|
}
|
|
487
499
|
|
|
@@ -603,36 +615,48 @@ type SourceLocation struct {
|
|
|
603
615
|
Ref *string `json:"ref,omitempty"`
|
|
604
616
|
}
|
|
605
617
|
|
|
606
|
-
// An intentional change to a requirement's compliance status
|
|
607
|
-
//
|
|
608
|
-
// have an expiration date to enforce periodic review.
|
|
618
|
+
// An intentional change to a requirement's compliance status and/or impact score. At least
|
|
619
|
+
// one of status or impact must be set. Overrides change the effectiveStatus or impact of
|
|
620
|
+
// the requirement. All overrides must have an expiration date to enforce periodic review.
|
|
609
621
|
type StatusOverride struct {
|
|
610
|
-
// Timestamp when this
|
|
611
|
-
AppliedAt
|
|
612
|
-
// Identity of who applied this
|
|
613
|
-
//
|
|
614
|
-
AppliedBy
|
|
615
|
-
// Supporting evidence for this
|
|
616
|
-
// verification for attestations.
|
|
617
|
-
Evidence
|
|
618
|
-
// Timestamp when this
|
|
619
|
-
// permanent
|
|
620
|
-
ExpiresAt
|
|
621
|
-
//
|
|
622
|
-
|
|
623
|
-
//
|
|
624
|
-
|
|
625
|
-
//
|
|
626
|
-
|
|
627
|
-
//
|
|
628
|
-
|
|
629
|
-
//
|
|
630
|
-
|
|
631
|
-
//
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
//
|
|
635
|
-
|
|
622
|
+
// Timestamp when this override was applied. ISO 8601 format.
|
|
623
|
+
AppliedAt time.Time `json:"appliedAt"`
|
|
624
|
+
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
625
|
+
// identifier.
|
|
626
|
+
AppliedBy Identity `json:"appliedBy"`
|
|
627
|
+
// Supporting evidence for this override, such as screenshots demonstrating manual
|
|
628
|
+
// verification for attestations.
|
|
629
|
+
Evidence []Evidence `json:"evidence,omitempty"`
|
|
630
|
+
// Timestamp when this override expires and must be reviewed/renewed. REQUIRED - no
|
|
631
|
+
// permanent overrides allowed. ISO 8601 format.
|
|
632
|
+
ExpiresAt time.Time `json:"expiresAt"`
|
|
633
|
+
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
634
|
+
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
635
|
+
// SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
636
|
+
// tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
637
|
+
// on a requirement.
|
|
638
|
+
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
639
|
+
// Explanation for why this override was applied.
|
|
640
|
+
Reason string `json:"reason"`
|
|
641
|
+
// Optional digital signature for enhanced trust and non-repudiation. Supports hardware
|
|
642
|
+
// security tokens (PKCS#11/PKCS#12), Yubikeys, GPG keys, passkeys, and other signing
|
|
643
|
+
// methods.
|
|
644
|
+
Signature *Signature `json:"signature,omitempty"`
|
|
645
|
+
// The new status this override sets for the requirement. Optional when only impact is being
|
|
646
|
+
// overridden.
|
|
647
|
+
Status *ResultStatus `json:"status,omitempty"`
|
|
648
|
+
// The type of override applied to this requirement.
|
|
649
|
+
Type OverrideType `json:"type"`
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// Override to the requirement's impact score. At least one of status or impact must be
|
|
653
|
+
// set.
|
|
654
|
+
//
|
|
655
|
+
// An override to the requirement's impact score. The prior impact is the original result
|
|
656
|
+
// value or the preceding override in the chain.
|
|
657
|
+
type ImpactOverride struct {
|
|
658
|
+
// The overridden impact score (0.0–1.0).
|
|
659
|
+
Value float64 `json:"value"`
|
|
636
660
|
}
|
|
637
661
|
|
|
638
662
|
// A supported platform target. Example: the platform name being 'ubuntu'.
|
|
@@ -1514,7 +1538,7 @@ type Schedule struct {
|
|
|
1514
1538
|
StartDate *time.Time `json:"startDate,omitempty"`
|
|
1515
1539
|
}
|
|
1516
1540
|
|
|
1517
|
-
// Waivers, attestations,
|
|
1541
|
+
// Waivers, attestations, and POA&Ms that modify requirement compliance status or impact.
|
|
1518
1542
|
// Amendments are standalone documents that can be applied to results via merge operations.
|
|
1519
1543
|
type HDFAmendments struct {
|
|
1520
1544
|
// Unique identifier for this amendments document. Useful for cross-referencing when
|
|
@@ -1536,7 +1560,7 @@ type HDFAmendments struct {
|
|
|
1536
1560
|
Labels map[string]string `json:"labels,omitempty"`
|
|
1537
1561
|
// Human-readable name for this amendments document. Example: 'Portal Q1 2026 Waivers'.
|
|
1538
1562
|
Name string `json:"name"`
|
|
1539
|
-
// The set of amendments (waivers, attestations,
|
|
1563
|
+
// The set of amendments (waivers, attestations, POA&Ms, and other overrides).
|
|
1540
1564
|
Overrides []StandaloneOverride `json:"overrides"`
|
|
1541
1565
|
// Document-level digital signature covering all amendments.
|
|
1542
1566
|
Signature *Signature `json:"signature,omitempty"`
|
|
@@ -1546,46 +1570,47 @@ type HDFAmendments struct {
|
|
|
1546
1570
|
Version *string `json:"version,omitempty"`
|
|
1547
1571
|
}
|
|
1548
1572
|
|
|
1549
|
-
// A standalone amendment that modifies a requirement's compliance status
|
|
1550
|
-
//
|
|
1551
|
-
// results documents.
|
|
1573
|
+
// A standalone amendment that modifies a requirement's compliance status and/or impact
|
|
1574
|
+
// score. At least one of status or impact must be set. Extends the inline Override concept
|
|
1575
|
+
// with requirementId and baselineRef for use outside of results documents.
|
|
1552
1576
|
type StandaloneOverride struct {
|
|
1553
|
-
// When this amendment was applied. ISO 8601 format.
|
|
1554
|
-
AppliedAt
|
|
1555
|
-
// Identity of who applied this amendment.
|
|
1556
|
-
AppliedBy
|
|
1557
|
-
// Name of the baseline containing the requirement. Required when the system has multiple
|
|
1558
|
-
// baselines with potentially overlapping requirement IDs.
|
|
1559
|
-
BaselineRef
|
|
1560
|
-
// componentId of the component this amendment is scoped to. When set, the amendment only
|
|
1561
|
-
// applies to the specified component. When omitted, the amendment applies system-wide.
|
|
1562
|
-
ComponentRef
|
|
1563
|
-
// Supporting evidence (screenshots, logs, URLs, documents).
|
|
1564
|
-
Evidence
|
|
1565
|
-
// When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
1566
|
-
// format.
|
|
1567
|
-
ExpiresAt
|
|
1568
|
-
//
|
|
1569
|
-
|
|
1570
|
-
//
|
|
1571
|
-
|
|
1572
|
-
//
|
|
1573
|
-
|
|
1574
|
-
//
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
//
|
|
1578
|
-
|
|
1579
|
-
//
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
//
|
|
1583
|
-
|
|
1584
|
-
//
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1577
|
+
// When this amendment was applied. ISO 8601 format.
|
|
1578
|
+
AppliedAt time.Time `json:"appliedAt"`
|
|
1579
|
+
// Identity of who applied this amendment.
|
|
1580
|
+
AppliedBy Identity `json:"appliedBy"`
|
|
1581
|
+
// Name of the baseline containing the requirement. Required when the system has multiple
|
|
1582
|
+
// baselines with potentially overlapping requirement IDs.
|
|
1583
|
+
BaselineRef *string `json:"baselineRef,omitempty"`
|
|
1584
|
+
// componentId of the component this amendment is scoped to. When set, the amendment only
|
|
1585
|
+
// applies to the specified component. When omitted, the amendment applies system-wide.
|
|
1586
|
+
ComponentRef *string `json:"componentRef,omitempty"`
|
|
1587
|
+
// Supporting evidence (screenshots, logs, URLs, documents).
|
|
1588
|
+
Evidence []Evidence `json:"evidence,omitempty"`
|
|
1589
|
+
// When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
1590
|
+
// format.
|
|
1591
|
+
ExpiresAt time.Time `json:"expiresAt"`
|
|
1592
|
+
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
1593
|
+
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
1594
|
+
// componentId of the local component that provides this control. Set when the provider is
|
|
1595
|
+
// in the same system. Omit for external or cross-system providers; the reason field
|
|
1596
|
+
// explains the source. Primarily used with type 'inherited'.
|
|
1597
|
+
InheritedFrom *string `json:"inheritedFrom,omitempty"`
|
|
1598
|
+
// Remediation milestones (primarily for POA&M type amendments).
|
|
1599
|
+
Milestones []Milestone `json:"milestones,omitempty"`
|
|
1600
|
+
// Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
|
|
1601
|
+
// for the first amendment.
|
|
1602
|
+
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
1603
|
+
// Justification for this amendment.
|
|
1604
|
+
Reason string `json:"reason"`
|
|
1605
|
+
// The ID of the requirement being amended. Must match a requirement ID in the referenced
|
|
1606
|
+
// baseline.
|
|
1607
|
+
RequirementID string `json:"requirementId"`
|
|
1608
|
+
// Digital signature for non-repudiation.
|
|
1609
|
+
Signature *Signature `json:"signature,omitempty"`
|
|
1610
|
+
// The new status this amendment sets. Optional when only impact is being overridden.
|
|
1611
|
+
Status *ResultStatus `json:"status,omitempty"`
|
|
1612
|
+
// The type of amendment.
|
|
1613
|
+
Type OverrideType `json:"type"`
|
|
1589
1614
|
}
|
|
1590
1615
|
|
|
1591
1616
|
// Bundles references to all HDF documents for audit, authorization, and compliance review.
|
|
@@ -1715,8 +1740,44 @@ const (
|
|
|
1715
1740
|
Sha512 HashAlgorithm = "sha512"
|
|
1716
1741
|
)
|
|
1717
1742
|
|
|
1718
|
-
// The
|
|
1719
|
-
//
|
|
1743
|
+
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
1744
|
+
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
1745
|
+
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
1746
|
+
// POAMs apply.
|
|
1747
|
+
//
|
|
1748
|
+
// The type of amendment, aligned with FedRAMP deviation request categories. 'waiver': risk
|
|
1749
|
+
// accepted by Authorizing Official. 'attestation': manually verified by assessor. 'poam':
|
|
1750
|
+
// remediation tracked (no status change). 'inherited': control provided by another
|
|
1751
|
+
// component or system. 'falsePositive': scanner incorrectly identified a finding — for
|
|
1752
|
+
// compliance scans (STIG, CIS), the check actually passes, so status is typically set to
|
|
1753
|
+
// 'passed'; for vulnerability scans (CVE, SCA), the flagged vulnerability does not apply to
|
|
1754
|
+
// this system, so status is typically set to 'notApplicable'. The disposition field on the
|
|
1755
|
+
// requirement distinguishes false positives from genuinely not-applicable findings.
|
|
1756
|
+
// 'riskAdjustment': impact score adjusted based on environmental context (FedRAMP Risk
|
|
1757
|
+
// Adjustment); does not change pass/fail status, only impact via the impact field.
|
|
1758
|
+
// 'operationalRequirement': deviation required by operational constraints (FedRAMP
|
|
1759
|
+
// Operational Requirement); the finding cannot be remediated because the system requires
|
|
1760
|
+
// the affected functionality. Remains an open risk. Migration note: 'exception' was removed
|
|
1761
|
+
// in v3.1.0 — use 'waiver' with status 'notApplicable' instead.
|
|
1762
|
+
//
|
|
1763
|
+
// The type of override applied to this requirement.
|
|
1764
|
+
//
|
|
1765
|
+
// The type of amendment.
|
|
1766
|
+
type OverrideType string
|
|
1767
|
+
|
|
1768
|
+
const (
|
|
1769
|
+
Attestation OverrideType = "attestation"
|
|
1770
|
+
FalsePositive OverrideType = "falsePositive"
|
|
1771
|
+
Inherited OverrideType = "inherited"
|
|
1772
|
+
OperationalRequirement OverrideType = "operationalRequirement"
|
|
1773
|
+
OverrideTypeWaiver OverrideType = "waiver"
|
|
1774
|
+
Poam OverrideType = "poam"
|
|
1775
|
+
RiskAdjustment OverrideType = "riskAdjustment"
|
|
1776
|
+
)
|
|
1777
|
+
|
|
1778
|
+
// The current effective compliance status of this requirement after applying the most
|
|
1779
|
+
// recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
1780
|
+
// no status-bearing overrides exist.
|
|
1720
1781
|
//
|
|
1721
1782
|
// The status of an individual test result. 'notApplicable' indicates the requirement does
|
|
1722
1783
|
// not apply to the target. 'notReviewed' indicates the requirement was not assessed (e.g.,
|
|
@@ -1724,11 +1785,10 @@ const (
|
|
|
1724
1785
|
//
|
|
1725
1786
|
// The status of this test within the requirement. Example: 'failed'.
|
|
1726
1787
|
//
|
|
1727
|
-
// The new status this override sets for the requirement.
|
|
1728
|
-
//
|
|
1788
|
+
// The new status this override sets for the requirement. Optional when only impact is being
|
|
1789
|
+
// overridden.
|
|
1729
1790
|
//
|
|
1730
|
-
// The new status this amendment sets.
|
|
1731
|
-
// work, they don't change status).
|
|
1791
|
+
// The new status this amendment sets. Optional when only impact is being overridden.
|
|
1732
1792
|
type ResultStatus string
|
|
1733
1793
|
|
|
1734
1794
|
const (
|
|
@@ -1775,12 +1835,14 @@ const (
|
|
|
1775
1835
|
|
|
1776
1836
|
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
1777
1837
|
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
1838
|
+
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
1778
1839
|
type PoamType string
|
|
1779
1840
|
|
|
1780
1841
|
const (
|
|
1781
|
-
Mitigation
|
|
1782
|
-
RiskAcceptance
|
|
1783
|
-
TypeRemediation
|
|
1842
|
+
Mitigation PoamType = "mitigation"
|
|
1843
|
+
RiskAcceptance PoamType = "riskAcceptance"
|
|
1844
|
+
TypeRemediation PoamType = "remediation"
|
|
1845
|
+
VendorDependency PoamType = "vendorDependency"
|
|
1784
1846
|
)
|
|
1785
1847
|
|
|
1786
1848
|
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
@@ -1797,24 +1859,6 @@ const (
|
|
|
1797
1859
|
SeverityLow Severity = "low"
|
|
1798
1860
|
)
|
|
1799
1861
|
|
|
1800
|
-
// The type of status override applied to this requirement.
|
|
1801
|
-
//
|
|
1802
|
-
// The type of amendment. 'waiver': risk accepted (AO). 'attestation': manually verified
|
|
1803
|
-
// (assessor). 'exception': not applicable (system owner + AO). 'poam': remediation tracked
|
|
1804
|
-
// (no status change). 'inherited': control provided by another component or system
|
|
1805
|
-
// (overrides to notApplicable/passed).
|
|
1806
|
-
//
|
|
1807
|
-
// The type of amendment.
|
|
1808
|
-
type OverrideType string
|
|
1809
|
-
|
|
1810
|
-
const (
|
|
1811
|
-
Attestation OverrideType = "attestation"
|
|
1812
|
-
Exception OverrideType = "exception"
|
|
1813
|
-
Inherited OverrideType = "inherited"
|
|
1814
|
-
OverrideTypeWaiver OverrideType = "waiver"
|
|
1815
|
-
Poam OverrideType = "poam"
|
|
1816
|
-
)
|
|
1817
|
-
|
|
1818
1862
|
type CloudProvider string
|
|
1819
1863
|
|
|
1820
1864
|
const (
|