@mitre/hdf-schema 3.1.0 → 3.3.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/README.md +20 -14
- package/dist/go/go.mod +2 -2
- package/dist/go/hdf.go +570 -210
- package/dist/helpers.d.ts +5 -1
- package/dist/index.d.ts +27 -52
- package/dist/index.js +30 -48
- package/dist/schemas/hdf-amendments.schema.json +565 -45
- package/dist/schemas/hdf-baseline.schema.json +570 -50
- package/dist/schemas/hdf-comparison.schema.json +820 -103
- package/dist/schemas/hdf-evidence-package.schema.json +564 -44
- package/dist/schemas/hdf-plan.schema.json +571 -50
- package/dist/schemas/hdf-results.schema.json +777 -80
- package/dist/schemas/hdf-system.schema.json +596 -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 -472
- package/dist/ts/hdf-baseline.js +0 -58
- package/dist/ts/hdf-baseline.ts +0 -483
- 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 -1511
- package/dist/ts/hdf-results.js +0 -194
- package/dist/ts/hdf-results.ts +0 -1536
- 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/go/hdf.go
CHANGED
|
@@ -253,7 +253,7 @@ type Input struct {
|
|
|
253
253
|
// The data type of this input.
|
|
254
254
|
Type *InputType `json:"type,omitempty"`
|
|
255
255
|
// The input value. Type should match the declared type field. Accepts any JSON value.
|
|
256
|
-
Value
|
|
256
|
+
Value interface{} `json:"value,omitempty"`
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
// Validation constraints for the input value.
|
|
@@ -338,56 +338,190 @@ type Checksum struct {
|
|
|
338
338
|
// Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
339
339
|
// Contains the fundamental requirement definition without assessment results.
|
|
340
340
|
type EvaluatedRequirement struct {
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
//
|
|
348
|
-
//
|
|
349
|
-
|
|
350
|
-
//
|
|
351
|
-
//
|
|
352
|
-
//
|
|
353
|
-
|
|
354
|
-
//
|
|
355
|
-
//
|
|
356
|
-
//
|
|
357
|
-
|
|
358
|
-
//
|
|
359
|
-
//
|
|
360
|
-
|
|
361
|
-
//
|
|
362
|
-
|
|
363
|
-
//
|
|
364
|
-
|
|
365
|
-
//
|
|
366
|
-
|
|
367
|
-
//
|
|
368
|
-
//
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
//
|
|
373
|
-
//
|
|
374
|
-
|
|
375
|
-
//
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
//
|
|
380
|
-
|
|
381
|
-
//
|
|
382
|
-
|
|
383
|
-
//
|
|
384
|
-
|
|
385
|
-
// the
|
|
386
|
-
|
|
387
|
-
//
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
341
|
+
// Packages affected by this vulnerability finding. Vulnerability-finding-scoped — see
|
|
342
|
+
// components[] on hdf-system for component-level package inventories. One entry per matched
|
|
343
|
+
// package signature (scanners often report multiple CPE variations per CVE).
|
|
344
|
+
AffectedPackages []AffectedPackage `json:"affectedPackages,omitempty"`
|
|
345
|
+
// Structured CVSS scoring data for vulnerability findings. One entry per CVE — a finding
|
|
346
|
+
// may match multiple CVEs (common in vulnerability scanners). Captures vendor-supplied Base
|
|
347
|
+
// metrics plus optional consumer-owned Threat / Environmental / Supplemental groups for
|
|
348
|
+
// risk adjustment. See cvss.schema.json.
|
|
349
|
+
Cvss []Cvss `json:"cvss,omitempty"`
|
|
350
|
+
// Common Weakness Enumeration IDs associated with this finding. Use CWE-N format with no
|
|
351
|
+
// leading zeros (matches the MITRE catalog convention). For NIST control mappings derived
|
|
352
|
+
// from CWE, see tags.nist.
|
|
353
|
+
Cwe []string `json:"cwe,omitempty"`
|
|
354
|
+
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
355
|
+
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
356
|
+
// 'fix', 'rationale'.
|
|
357
|
+
Descriptions []Description `json:"descriptions"`
|
|
358
|
+
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
359
|
+
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
360
|
+
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
361
|
+
// POAMs apply.
|
|
362
|
+
Disposition *OverrideType `json:"disposition,omitempty"`
|
|
363
|
+
// The current effective impact score (0.0–1.0) after applying the most recent non-expired
|
|
364
|
+
// override with an impact field. Absent when no impact overrides apply; consumers should
|
|
365
|
+
// use the requirement's impact field in that case.
|
|
366
|
+
EffectiveImpact *float64 `json:"effectiveImpact,omitempty"`
|
|
367
|
+
// The current effective compliance status of this requirement after applying the most
|
|
368
|
+
// recent non-expired override with a status field, or computed from results (worst-wins) if
|
|
369
|
+
// no status-bearing overrides exist.
|
|
370
|
+
EffectiveStatus *ResultStatus `json:"effectiveStatus,omitempty"`
|
|
371
|
+
// FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
372
|
+
// alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
373
|
+
// exploited.
|
|
374
|
+
Epss *Epss `json:"epss,omitempty"`
|
|
375
|
+
// Supporting evidence for this requirement's findings, such as screenshots, code samples,
|
|
376
|
+
// or log excerpts.
|
|
377
|
+
Evidence []Evidence `json:"evidence,omitempty"`
|
|
378
|
+
// CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
379
|
+
// dueDate carry the federal patching deadline.
|
|
380
|
+
Kev *Kev `json:"kev,omitempty"`
|
|
381
|
+
// Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
382
|
+
// POAMs do NOT change effectiveStatus - they track the work being done to address a
|
|
383
|
+
// failure. Separate from statusOverrides which DO change status.
|
|
384
|
+
Poams []PoamElement `json:"poams,omitempty"`
|
|
385
|
+
// The set of all tests within the requirement and their results.
|
|
386
|
+
Results []RequirementResult `json:"results"`
|
|
387
|
+
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
388
|
+
// clarity.
|
|
389
|
+
Severity *Severity `json:"severity,omitempty"`
|
|
390
|
+
// The explicit location of the requirement within the source code.
|
|
391
|
+
SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
|
|
392
|
+
// Chronological history of all overrides applied to this requirement. Overrides are
|
|
393
|
+
// intentional changes to the compliance status and/or impact score (waivers, attestations,
|
|
394
|
+
// false positives, risk adjustments). Most recent override should be first in array.
|
|
395
|
+
// Preserves full audit trail.
|
|
396
|
+
StatusOverrides []StatusOverride `json:"statusOverrides,omitempty"`
|
|
397
|
+
// The requirement identifier. Example: 'SV-238196'.
|
|
398
|
+
ID string `json:"id"`
|
|
399
|
+
// The impactfulness or severity (0.0 to 1.0).
|
|
400
|
+
Impact float64 `json:"impact"`
|
|
401
|
+
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
402
|
+
Tags map[string]interface{} `json:"tags"`
|
|
403
|
+
// Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
404
|
+
// weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
405
|
+
// FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
406
|
+
// memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
407
|
+
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
408
|
+
// convention.
|
|
409
|
+
Applicability *Applicability `json:"applicability,omitempty"`
|
|
410
|
+
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
411
|
+
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
412
|
+
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
413
|
+
// underlying source code.
|
|
414
|
+
Code *string `json:"code,omitempty"`
|
|
415
|
+
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
416
|
+
// categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
417
|
+
// process; 'technical' = an enforced technical configuration; 'management' = a
|
|
418
|
+
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
419
|
+
// AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
420
|
+
// family/id but should not assume a default.
|
|
421
|
+
ControlType *ControlType `json:"controlType,omitempty"`
|
|
422
|
+
// The set of references to external documents.
|
|
423
|
+
Refs []Reference `json:"refs,omitempty"`
|
|
424
|
+
// The title - is nullable.
|
|
425
|
+
Title *string `json:"title,omitempty"`
|
|
426
|
+
// How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
427
|
+
// 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
428
|
+
// to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
429
|
+
// exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
430
|
+
// runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
431
|
+
// omitted, consumers should not infer a default.
|
|
432
|
+
VerificationMethod *VerificationMethodEnum `json:"verificationMethod,omitempty"`
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Represents a package referenced by a vulnerability finding or by an amendment's scope. On
|
|
436
|
+
// Evaluated_Requirement.affectedPackages it says 'this CVE affects these package versions'.
|
|
437
|
+
// On Standalone_Override.affectedPackages it says 'this amendment is scoped to these
|
|
438
|
+
// packages' (used by VEX, OSCAL POA&M, FedRAMP component-aware amendments). NOT a
|
|
439
|
+
// system-level component identifier — see `components[]` on hdf-system for those. Validity
|
|
440
|
+
// requires at least one of: (name + version + ecosystem), purl alone, or cpe alone. purl
|
|
441
|
+
// and cpe are self-describing identifiers that encode name/version implicitly, so either
|
|
442
|
+
// may stand on its own; the name+version+ecosystem combination is the explicit form for
|
|
443
|
+
// sources without formal identifiers.
|
|
444
|
+
type AffectedPackage struct {
|
|
445
|
+
// Optional CPE 2.3 URI identifying the affected product. Validated leniently: only the
|
|
446
|
+
// 'cpe:2.3:' prefix and the part-type letter ('a' application, 'h' hardware, 'o' operating
|
|
447
|
+
// system) are enforced here. Use `hdf-utilities.parseCpe` for full-grammar parsing.
|
|
448
|
+
// Example: 'cpe:2.3:a:openssl:openssl:1.1.1k:*:*:*:*:*:*:*'.
|
|
449
|
+
Cpe *string `json:"cpe,omitempty"`
|
|
450
|
+
// The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
451
|
+
// anything outside the listed language/OS package managers.
|
|
452
|
+
Ecosystem *Ecosystem `json:"ecosystem,omitempty"`
|
|
453
|
+
// Optional version string identifying the first release that contains the fix for the
|
|
454
|
+
// vulnerability. Use the same version syntax as `version`. Example: '1.1.1l' fixes
|
|
455
|
+
// 'openssl@1.1.1k'.
|
|
456
|
+
FixedInVersion *string `json:"fixedInVersion,omitempty"`
|
|
457
|
+
// The package name as published in its ecosystem. Examples: 'openssl' (rpm), 'lodash'
|
|
458
|
+
// (npm), 'org.apache.logging.log4j:log4j-core' (maven, group:artifact).
|
|
459
|
+
Name *string `json:"name,omitempty"`
|
|
460
|
+
// Optional Package URL (PURL) identifying the affected package. Validated leniently: only
|
|
461
|
+
// the 'pkg:TYPE/' scheme prefix is enforced here, where TYPE follows the PURL grammar (a
|
|
462
|
+
// letter followed by letters, digits, '.', '+', or '-') and is matched case-insensitively
|
|
463
|
+
// to mirror `hdf-utilities.parsePurl`'s accept-and-warn behavior. Use `parsePurl` for full
|
|
464
|
+
// PURL parsing. Example: 'pkg:rpm/redhat/openssl@1.1.1k-7.el8_4?arch=x86_64'.
|
|
465
|
+
Purl *string `json:"purl,omitempty"`
|
|
466
|
+
// The exact version of the package that the vulnerability scanner observed. Use the
|
|
467
|
+
// ecosystem's native version string verbatim (e.g., '1.1.1k-7.el8_4' for rpm, '4.17.20' for
|
|
468
|
+
// npm).
|
|
469
|
+
Version *string `json:"version,omitempty"`
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
473
|
+
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
474
|
+
// a riskAdjustment. For other override types this is optional context.
|
|
475
|
+
//
|
|
476
|
+
// A CVSS (Common Vulnerability Scoring System) score record for a vulnerability finding.
|
|
477
|
+
// Captures the vendor-supplied Base metric group and optional consumer-supplied Threat,
|
|
478
|
+
// Environmental, and Supplemental metric groups. Supports all four CVSS major versions
|
|
479
|
+
// (2.0, 3.0, 3.1, 4.0). Vector strings are validated against a permissive umbrella grammar;
|
|
480
|
+
// semantic validation (correct metrics per version, correct values per metric) is performed
|
|
481
|
+
// by the hdf-utilities `validateCvssVector` helper rather than at the schema layer.
|
|
482
|
+
type Cvss struct {
|
|
483
|
+
// The Base score (0.0–10.0) computed from the base vector. Reflects the intrinsic,
|
|
484
|
+
// vendor-published severity before consumer enrichment.
|
|
485
|
+
BaseScore *float64 `json:"baseScore,omitempty"`
|
|
486
|
+
// Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
487
|
+
// 'none' or 'critical' bands; map accordingly when populating.
|
|
488
|
+
BaseSeverity *CVSSSeverity `json:"baseSeverity,omitempty"`
|
|
489
|
+
// Optional Base metric group vector string as emitted by the source (e.g.,
|
|
490
|
+
// '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
|
|
491
|
+
// omitted. Some vendor tools emit a final baseScore without the vector — in that case this
|
|
492
|
+
// field is absent and the score cannot be recomputed or decomposed. The pattern accepts any
|
|
493
|
+
// version-prefixed or prefix-less metric token sequence; semantic validity of individual
|
|
494
|
+
// metrics is checked by hdf-utilities, not by the schema.
|
|
495
|
+
BaseVector *string `json:"baseVector,omitempty"`
|
|
496
|
+
// Optional final score after combining Base + Threat + Environmental metrics. This is the
|
|
497
|
+
// score consumers should treat as authoritative for risk decisions when present.
|
|
498
|
+
ComputedScore *float64 `json:"computedScore,omitempty"`
|
|
499
|
+
// Qualitative severity band corresponding to computedScore. Same band convention as
|
|
500
|
+
// baseSeverity.
|
|
501
|
+
ComputedSeverity *CVSSSeverity `json:"computedSeverity,omitempty"`
|
|
502
|
+
// Optional score (0.0–10.0) recomputed after applying Environmental metrics.
|
|
503
|
+
EnvironmentalScore *float64 `json:"environmentalScore,omitempty"`
|
|
504
|
+
// Optional Environmental metric group vector segment (e.g., 'MAV:N/CR:H/IR:H/AR:H').
|
|
505
|
+
// Consumer-supplied — reflects the deployment context (criticality, mitigations, network
|
|
506
|
+
// exposure).
|
|
507
|
+
EnvironmentalVector *string `json:"environmentalVector,omitempty"`
|
|
508
|
+
// Optional identifier the CVSS data is associated with — most commonly a CVE ID (e.g.,
|
|
509
|
+
// 'CVE-2024-12345'), but may also be a vendor advisory ID, GHSA, or similar.
|
|
510
|
+
Source *string `json:"source,omitempty"`
|
|
511
|
+
// Optional Supplemental metric group vector segment (CVSS 4.0 only). Examples:
|
|
512
|
+
// 'S:P/AU:N/V:C/RE:M/U:Amber'. Per CVSS 4.0 spec, supplemental metrics convey additional
|
|
513
|
+
// context but have no impact on the computed score.
|
|
514
|
+
SupplementalVector *string `json:"supplementalVector,omitempty"`
|
|
515
|
+
// Optional score (0.0–10.0) recomputed after applying Threat metrics. Always less than or
|
|
516
|
+
// equal to baseScore in practice.
|
|
517
|
+
ThreatScore *float64 `json:"threatScore,omitempty"`
|
|
518
|
+
// Optional Threat metric group vector segment (e.g., 'E:U/RL:O/RC:C' for CVSS 3.1, or 'E:A'
|
|
519
|
+
// for CVSS 4.0). Consumer-supplied — captures real-world exploitation and remediation
|
|
520
|
+
// context the vendor cannot know.
|
|
521
|
+
ThreatVector *string `json:"threatVector,omitempty"`
|
|
522
|
+
// The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
523
|
+
// or 4.0; legacy data may use 2.0 or 3.0.
|
|
524
|
+
Version Version `json:"version"`
|
|
391
525
|
}
|
|
392
526
|
|
|
393
527
|
type Description struct {
|
|
@@ -398,6 +532,26 @@ type Description struct {
|
|
|
398
532
|
Label string `json:"label"`
|
|
399
533
|
}
|
|
400
534
|
|
|
535
|
+
// FIRST.org EPSS (Exploit Prediction Scoring System) score for this CVE finding. Used
|
|
536
|
+
// alongside CVSS for prioritization — captures the probability the vulnerability will be
|
|
537
|
+
// exploited.
|
|
538
|
+
//
|
|
539
|
+
// FIRST.org Exploit Prediction Scoring System (EPSS) data for a single vulnerability. All
|
|
540
|
+
// three fields are required when an Epss object is present; the date disambiguates which
|
|
541
|
+
// day's score this is, since EPSS recomputes daily.
|
|
542
|
+
type Epss struct {
|
|
543
|
+
// ISO 8601 date (YYYY-MM-DD) on which FIRST.org published this EPSS score.
|
|
544
|
+
Date string `json:"date"`
|
|
545
|
+
// Rank of this score relative to all scored CVEs, expressed as a value between 0.0 and 1.0
|
|
546
|
+
// inclusive. A percentile of 0.99 means this CVE is scored at or above 99% of all scored
|
|
547
|
+
// CVEs.
|
|
548
|
+
Percentile float64 `json:"percentile"`
|
|
549
|
+
// Exploit probability as a value between 0.0 and 1.0 inclusive. Higher values indicate
|
|
550
|
+
// greater predicted likelihood of exploitation in the next 30 days. Example: 0.97532 means
|
|
551
|
+
// roughly a 97.5% predicted probability.
|
|
552
|
+
Score float64 `json:"score"`
|
|
553
|
+
}
|
|
554
|
+
|
|
401
555
|
// Supporting evidence for a finding or override, such as screenshots, code samples, log
|
|
402
556
|
// excerpts, or URLs.
|
|
403
557
|
type Evidence struct {
|
|
@@ -456,15 +610,32 @@ type Evidence struct {
|
|
|
456
610
|
//
|
|
457
611
|
// Identity of who prepared this evidence package.
|
|
458
612
|
type Identity struct {
|
|
459
|
-
// Optional description of the identity or identity system, particularly useful when type is
|
|
460
|
-
// 'other'.
|
|
461
|
-
Description *string
|
|
462
|
-
// The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
463
|
-
Identifier string
|
|
464
|
-
// The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
465
|
-
// 'system' for automated systems, 'simple' for basic string identifiers without additional
|
|
466
|
-
// classification, or 'other' for custom identity systems.
|
|
467
|
-
Type
|
|
613
|
+
// Optional description of the identity or identity system, particularly useful when type is
|
|
614
|
+
// 'other'.
|
|
615
|
+
Description *string `json:"description,omitempty"`
|
|
616
|
+
// The identifier value. Example: 'user@example.com', 'jdoe', 'automated-scanner-01'.
|
|
617
|
+
Identifier string `json:"identifier"`
|
|
618
|
+
// The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
619
|
+
// 'system' for automated systems, 'simple' for basic string identifiers without additional
|
|
620
|
+
// classification, or 'other' for custom identity systems.
|
|
621
|
+
Type IdentityType `json:"type"`
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
// CISA Known Exploited Vulnerabilities (KEV) catalog status. When inKev=true, dateAdded and
|
|
625
|
+
// dueDate carry the federal patching deadline.
|
|
626
|
+
type Kev struct {
|
|
627
|
+
// ISO 8601 calendar date (YYYY-MM-DD) the vulnerability was added to the CISA KEV catalog.
|
|
628
|
+
// Required when inKev is true.
|
|
629
|
+
DateAdded *string `json:"dateAdded,omitempty"`
|
|
630
|
+
// ISO 8601 calendar date (YYYY-MM-DD) by which federal agencies must remediate per CISA BOD
|
|
631
|
+
// 22-01. Normally later than dateAdded, but the schema does not enforce ordering because
|
|
632
|
+
// CISA occasionally adjusts published dates. Required when inKev is true.
|
|
633
|
+
DueDate *string `json:"dueDate,omitempty"`
|
|
634
|
+
// Whether this vulnerability is currently in the CISA Known Exploited Vulnerabilities
|
|
635
|
+
// catalog. When true, dateAdded and dueDate are required.
|
|
636
|
+
InKev bool `json:"inKev"`
|
|
637
|
+
// CISA's notes describing the vulnerability, observed exploitation, or remediation guidance.
|
|
638
|
+
Notes *string `json:"notes,omitempty"`
|
|
468
639
|
}
|
|
469
640
|
|
|
470
641
|
// Plan of Action and Milestones for tracking remediation, mitigation, or risk acceptance.
|
|
@@ -494,21 +665,21 @@ type PoamElement struct {
|
|
|
494
665
|
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
495
666
|
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
496
667
|
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
497
|
-
Type
|
|
668
|
+
Type POAMType `json:"type"`
|
|
498
669
|
}
|
|
499
670
|
|
|
500
671
|
// A milestone or task within a POA&M remediation plan.
|
|
501
672
|
type Milestone struct {
|
|
502
|
-
// Actual completion timestamp. ISO 8601 format.
|
|
503
|
-
CompletedAt *time.Time
|
|
504
|
-
// Identity of who completed this milestone.
|
|
505
|
-
CompletedBy *Identity
|
|
506
|
-
// Description of this milestone or task.
|
|
507
|
-
Description string
|
|
508
|
-
// Estimated completion date. ISO 8601 format.
|
|
509
|
-
EstimatedCompletion time.Time
|
|
510
|
-
// Current status of this milestone.
|
|
511
|
-
Status
|
|
673
|
+
// Actual completion timestamp. ISO 8601 format.
|
|
674
|
+
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
|
675
|
+
// Identity of who completed this milestone.
|
|
676
|
+
CompletedBy *Identity `json:"completedBy,omitempty"`
|
|
677
|
+
// Description of this milestone or task.
|
|
678
|
+
Description string `json:"description"`
|
|
679
|
+
// Estimated completion date. ISO 8601 format.
|
|
680
|
+
EstimatedCompletion time.Time `json:"estimatedCompletion"`
|
|
681
|
+
// Current status of this milestone.
|
|
682
|
+
Status MilestoneStatus `json:"status"`
|
|
512
683
|
}
|
|
513
684
|
|
|
514
685
|
// Optional digital signature for enhanced trust and non-repudiation.
|
|
@@ -576,7 +747,7 @@ type VerificationMethod struct {
|
|
|
576
747
|
//
|
|
577
748
|
// A URI pointing at the reference.
|
|
578
749
|
type Reference struct {
|
|
579
|
-
Ref *Ref
|
|
750
|
+
Ref *Ref `json:"ref,omitempty"`
|
|
580
751
|
URL *string `json:"url,omitempty"`
|
|
581
752
|
URI *string `json:"uri,omitempty"`
|
|
582
753
|
}
|
|
@@ -624,6 +795,10 @@ type StatusOverride struct {
|
|
|
624
795
|
// Identity of who applied this override. For simple cases, use type 'simple' with just an
|
|
625
796
|
// identifier.
|
|
626
797
|
AppliedBy Identity `json:"appliedBy"`
|
|
798
|
+
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
799
|
+
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
800
|
+
// a riskAdjustment. For other override types this is optional context.
|
|
801
|
+
Cvss *Cvss `json:"cvss,omitempty"`
|
|
627
802
|
// Supporting evidence for this override, such as screenshots demonstrating manual
|
|
628
803
|
// verification for attestations.
|
|
629
804
|
Evidence []Evidence `json:"evidence,omitempty"`
|
|
@@ -632,6 +807,12 @@ type StatusOverride struct {
|
|
|
632
807
|
ExpiresAt time.Time `json:"expiresAt"`
|
|
633
808
|
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
634
809
|
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
810
|
+
// Structured controlled-vocabulary classification for why this override applies.
|
|
811
|
+
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
812
|
+
// and attestation overrides where the structured category enables filtering and lossless
|
|
813
|
+
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
814
|
+
// precedent vocabulary and rationale.
|
|
815
|
+
Justification *Justification `json:"justification,omitempty"`
|
|
635
816
|
// SHA-256 checksum of the previous amendment in chronological order. Creates a
|
|
636
817
|
// tamper-evident chain of amendments (similar to blockchain). Null for the first amendment
|
|
637
818
|
// on a requirement.
|
|
@@ -722,9 +903,9 @@ type Component struct {
|
|
|
722
903
|
Owner *Identity `json:"owner,omitempty"`
|
|
723
904
|
// Embedded CycloneDX or SPDX SBOM document representing this component's software
|
|
724
905
|
// inventory. The sbomFormat field determines which format constraints apply.
|
|
725
|
-
Sbom
|
|
906
|
+
Sbom interface{} `json:"sbom,omitempty"`
|
|
726
907
|
// Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
727
|
-
SbomFormat *
|
|
908
|
+
SbomFormat *SBOMFormat `json:"sbomFormat,omitempty"`
|
|
728
909
|
// URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
|
|
729
910
|
// relative path, absolute URI, or fragment identifier.
|
|
730
911
|
SbomRef *string `json:"sbomRef,omitempty"`
|
|
@@ -732,7 +913,7 @@ type Component struct {
|
|
|
732
913
|
// with matching labels are automatically included.
|
|
733
914
|
TargetSelector map[string]string `json:"targetSelector,omitempty"`
|
|
734
915
|
// Component type discriminator. Same values as Target types.
|
|
735
|
-
Type
|
|
916
|
+
Type TargetType `json:"type"`
|
|
736
917
|
// Fully qualified domain name.
|
|
737
918
|
FQDN *string `json:"fqdn,omitempty"`
|
|
738
919
|
// IP address of the host.
|
|
@@ -776,7 +957,7 @@ type Component struct {
|
|
|
776
957
|
// Cloud account identifier.
|
|
777
958
|
AccountID *string `json:"accountId,omitempty"`
|
|
778
959
|
// Cloud provider.
|
|
779
|
-
Provider
|
|
960
|
+
Provider *CloudProvider `json:"provider,omitempty"`
|
|
780
961
|
// Cloud region, if applicable.
|
|
781
962
|
//
|
|
782
963
|
// Cloud region where the resource resides.
|
|
@@ -828,7 +1009,7 @@ type InputOverride struct {
|
|
|
828
1009
|
// Rationale for why this override is needed.
|
|
829
1010
|
Justification *string `json:"justification,omitempty"`
|
|
830
1011
|
// The overridden value. Should match the type of the original input.
|
|
831
|
-
Value
|
|
1012
|
+
Value interface{} `json:"value"`
|
|
832
1013
|
}
|
|
833
1014
|
|
|
834
1015
|
// Information about the tool that generated this file.
|
|
@@ -1012,29 +1193,51 @@ type HDFBaseline struct {
|
|
|
1012
1193
|
// Core requirement fields shared between baseline requirements and evaluated requirements.
|
|
1013
1194
|
// Contains the fundamental requirement definition without assessment results.
|
|
1014
1195
|
type BaselineRequirement struct {
|
|
1015
|
-
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
1016
|
-
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
1017
|
-
// 'fix', 'rationale'.
|
|
1018
|
-
Descriptions []Description
|
|
1019
|
-
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
1020
|
-
// clarity.
|
|
1021
|
-
Severity *Severity
|
|
1022
|
-
// The requirement identifier. Example: 'SV-238196'.
|
|
1023
|
-
ID string
|
|
1024
|
-
// The impactfulness or severity (0.0 to 1.0).
|
|
1025
|
-
Impact float64
|
|
1026
|
-
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
1027
|
-
Tags map[string]interface{}
|
|
1028
|
-
//
|
|
1029
|
-
//
|
|
1030
|
-
//
|
|
1031
|
-
|
|
1032
|
-
//
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
//
|
|
1037
|
-
|
|
1196
|
+
// Array of labeled descriptions. At least one description with label 'default' must be
|
|
1197
|
+
// present. Convention: place default description first. Common labels: 'default', 'check',
|
|
1198
|
+
// 'fix', 'rationale'.
|
|
1199
|
+
Descriptions []Description `json:"descriptions"`
|
|
1200
|
+
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
1201
|
+
// clarity.
|
|
1202
|
+
Severity *Severity `json:"severity,omitempty"`
|
|
1203
|
+
// The requirement identifier. Example: 'SV-238196'.
|
|
1204
|
+
ID string `json:"id"`
|
|
1205
|
+
// The impactfulness or severity (0.0 to 1.0).
|
|
1206
|
+
Impact float64 `json:"impact"`
|
|
1207
|
+
// A set of tags - usually metadata like CCI, STIG ID, severity.
|
|
1208
|
+
Tags map[string]interface{} `json:"tags"`
|
|
1209
|
+
// Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
1210
|
+
// weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
1211
|
+
// FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
1212
|
+
// memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
1213
|
+
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
1214
|
+
// convention.
|
|
1215
|
+
Applicability *Applicability `json:"applicability,omitempty"`
|
|
1216
|
+
// The raw source code of the requirement. Set to null for manual-only requirements or
|
|
1217
|
+
// requirements not yet implemented; use verificationMethod to disambiguate manual-by-design
|
|
1218
|
+
// from manual-pending-automation. Note that if this is an overlay, it does not include the
|
|
1219
|
+
// underlying source code.
|
|
1220
|
+
Code *string `json:"code,omitempty"`
|
|
1221
|
+
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
1222
|
+
// categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
1223
|
+
// process; 'technical' = an enforced technical configuration; 'management' = a
|
|
1224
|
+
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
1225
|
+
// AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
1226
|
+
// family/id but should not assume a default.
|
|
1227
|
+
ControlType *ControlType `json:"controlType,omitempty"`
|
|
1228
|
+
// The set of references to external documents.
|
|
1229
|
+
Refs []Reference `json:"refs,omitempty"`
|
|
1230
|
+
// The explicit location of the requirement within the source code.
|
|
1231
|
+
SourceLocation *SourceLocation `json:"sourceLocation,omitempty"`
|
|
1232
|
+
// The title - is nullable.
|
|
1233
|
+
Title *string `json:"title,omitempty"`
|
|
1234
|
+
// How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
1235
|
+
// 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
1236
|
+
// to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
1237
|
+
// exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
1238
|
+
// runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
1239
|
+
// omitted, consumers should not infer a default.
|
|
1240
|
+
VerificationMethod *VerificationMethodEnum `json:"verificationMethod,omitempty"`
|
|
1038
1241
|
}
|
|
1039
1242
|
|
|
1040
1243
|
// Structured comparison between two or more HDF security assessment documents. Supports
|
|
@@ -1103,10 +1306,10 @@ type BaselineDiff struct {
|
|
|
1103
1306
|
|
|
1104
1307
|
// Comparison of a single component between two system document versions.
|
|
1105
1308
|
type ComponentDiff struct {
|
|
1106
|
-
// Component snapshot from the new system document.
|
|
1107
|
-
After
|
|
1108
|
-
// Component snapshot from the old system document.
|
|
1109
|
-
Before
|
|
1309
|
+
// Component snapshot from the new system document. Null when state is 'absent'.
|
|
1310
|
+
After interface{} `json:"after,omitempty"`
|
|
1311
|
+
// Component snapshot from the old system document. Null when state is 'new'.
|
|
1312
|
+
Before interface{} `json:"before,omitempty"`
|
|
1110
1313
|
// Detailed field-level changes between the before and after component snapshots.
|
|
1111
1314
|
FieldChanges []FieldChange `json:"fieldChanges,omitempty"`
|
|
1112
1315
|
// Component name used for matching across system versions.
|
|
@@ -1118,9 +1321,9 @@ type ComponentDiff struct {
|
|
|
1118
1321
|
// A single field-level change between two versions of a requirement.
|
|
1119
1322
|
type FieldChange struct {
|
|
1120
1323
|
// The new value of the field (for 'add' and 'replace' operations).
|
|
1121
|
-
NewValue
|
|
1324
|
+
NewValue interface{} `json:"newValue,omitempty"`
|
|
1122
1325
|
// The previous value of the field (for 'remove' and 'replace' operations).
|
|
1123
|
-
OldValue
|
|
1326
|
+
OldValue interface{} `json:"oldValue,omitempty"`
|
|
1124
1327
|
// The type of change operation.
|
|
1125
1328
|
Op Op `json:"op"`
|
|
1126
1329
|
// JSON Pointer path to the changed field.
|
|
@@ -1131,13 +1334,13 @@ type FieldChange struct {
|
|
|
1131
1334
|
// before/after snapshots.
|
|
1132
1335
|
type RequirementDiff struct {
|
|
1133
1336
|
// The requirement as it appeared in the new source. Null when state is 'absent'.
|
|
1134
|
-
After
|
|
1337
|
+
After interface{} `json:"after"`
|
|
1135
1338
|
// Sensitive data from the new source that should not be included in the main after snapshot.
|
|
1136
1339
|
AfterSensitive map[string]interface{} `json:"afterSensitive,omitempty"`
|
|
1137
1340
|
// IDs of annotations attached to this requirement diff.
|
|
1138
1341
|
AnnotationIDS []string `json:"annotationIds,omitempty"`
|
|
1139
1342
|
// The requirement as it appeared in the old/reference source. Null when state is 'new'.
|
|
1140
|
-
Before
|
|
1343
|
+
Before interface{} `json:"before"`
|
|
1141
1344
|
// Sensitive data from the old source that should not be included in the main before
|
|
1142
1345
|
// snapshot.
|
|
1143
1346
|
BeforeSensitive map[string]interface{} `json:"beforeSensitive,omitempty"`
|
|
@@ -1193,7 +1396,7 @@ type Value struct {
|
|
|
1193
1396
|
// Human-readable label for the source.
|
|
1194
1397
|
SourceLabel string `json:"sourceLabel"`
|
|
1195
1398
|
// The value reported by this source for the conflicting field.
|
|
1196
|
-
Value
|
|
1399
|
+
Value interface{} `json:"value"`
|
|
1197
1400
|
}
|
|
1198
1401
|
|
|
1199
1402
|
// Configuration for how requirements were matched across sources.
|
|
@@ -1456,7 +1659,7 @@ type DataFlow struct {
|
|
|
1456
1659
|
Protocol *string `json:"protocol,omitempty"`
|
|
1457
1660
|
// The other end of this data flow. Can be a local component (UUID), a cross-system
|
|
1458
1661
|
// component reference, or an external endpoint.
|
|
1459
|
-
To
|
|
1662
|
+
To interface{} `json:"to"`
|
|
1460
1663
|
}
|
|
1461
1664
|
|
|
1462
1665
|
// Defines an assessment plan — what baselines to run against which targets, with resolved
|
|
@@ -1570,47 +1773,74 @@ type HDFAmendments struct {
|
|
|
1570
1773
|
Version *string `json:"version,omitempty"`
|
|
1571
1774
|
}
|
|
1572
1775
|
|
|
1573
|
-
// A standalone
|
|
1574
|
-
//
|
|
1575
|
-
//
|
|
1776
|
+
// A standalone override to a requirement's compliance status or risk impact. Validation has
|
|
1777
|
+
// two branches gated on 'type': when type is 'operationalRequirement', neither 'status' nor
|
|
1778
|
+
// 'impact' may be set — the override records accepted risk without changing the finding
|
|
1779
|
+
// (documentation-only). For all other types, at least one of 'status' or 'impact' must be
|
|
1780
|
+
// set. This rule aligns with: (1) OSCAL Assessment Results — finding.target.status and
|
|
1781
|
+
// finding.associated-risk[].facet[] are separate axes
|
|
1782
|
+
// (https://pages.nist.gov/OSCAL/learn/concepts/layer/assessment/assessment-results/); (2)
|
|
1783
|
+
// FedRAMP deviation request types — Risk Adjustment changes impact only, Operational
|
|
1784
|
+
// Requirement documents acceptance only, False Positive changes status
|
|
1785
|
+
// (https://www.ignyteplatform.com/blog/fedramp/fedramp-deviation-requests-submit/); (3)
|
|
1786
|
+
// NIST SP 800-37 RMF — risk response (accept/mitigate/transfer) is a separate step from
|
|
1787
|
+
// control assessment status (https://csrc.nist.gov/pubs/sp/800/37/r2/final).
|
|
1576
1788
|
type StandaloneOverride struct {
|
|
1577
|
-
//
|
|
1578
|
-
|
|
1579
|
-
//
|
|
1580
|
-
|
|
1581
|
-
//
|
|
1582
|
-
//
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
//
|
|
1586
|
-
|
|
1587
|
-
//
|
|
1588
|
-
|
|
1589
|
-
//
|
|
1590
|
-
//
|
|
1591
|
-
|
|
1592
|
-
//
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
//
|
|
1596
|
-
//
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
//
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
//
|
|
1607
|
-
|
|
1608
|
-
//
|
|
1609
|
-
|
|
1610
|
-
//
|
|
1611
|
-
|
|
1612
|
-
//
|
|
1613
|
-
|
|
1789
|
+
// Software packages this amendment is scoped to, distinct from componentRef (which scopes
|
|
1790
|
+
// to an HDF-internal Component by UUID). Use when the source amendment format references
|
|
1791
|
+
// packages by purl/cpe/name+version — e.g., VEX `affects[]` / `products[]`, OSCAL POA&M
|
|
1792
|
+
// `subjects[]`, FedRAMP component-aware amendments. Symmetric with
|
|
1793
|
+
// Evaluated_Requirement.affectedPackages, which scopes findings to the same package
|
|
1794
|
+
// vocabulary. When omitted, the amendment applies system-wide (or only to componentRef when
|
|
1795
|
+
// that is set).
|
|
1796
|
+
AffectedPackages []AffectedPackage `json:"affectedPackages,omitempty"`
|
|
1797
|
+
// When this amendment was applied. ISO 8601 format.
|
|
1798
|
+
AppliedAt time.Time `json:"appliedAt"`
|
|
1799
|
+
// Identity of who applied this amendment.
|
|
1800
|
+
AppliedBy Identity `json:"appliedBy"`
|
|
1801
|
+
// Name of the baseline containing the requirement. Required when the system has multiple
|
|
1802
|
+
// baselines with potentially overlapping requirement IDs.
|
|
1803
|
+
BaselineRef *string `json:"baselineRef,omitempty"`
|
|
1804
|
+
// componentId of the component this amendment is scoped to. When set, the amendment only
|
|
1805
|
+
// applies to the specified component. When omitted, the amendment applies system-wide.
|
|
1806
|
+
ComponentRef *string `json:"componentRef,omitempty"`
|
|
1807
|
+
// Structured CVSS scoring data backing this override. Captures the rubric (which
|
|
1808
|
+
// Environmental/Threat metrics the consumer modified, the recomputed score) used to justify
|
|
1809
|
+
// a riskAdjustment. For other override types this is optional context.
|
|
1810
|
+
Cvss *Cvss `json:"cvss,omitempty"`
|
|
1811
|
+
// Supporting evidence (screenshots, logs, URLs, documents).
|
|
1812
|
+
Evidence []Evidence `json:"evidence,omitempty"`
|
|
1813
|
+
// When this amendment expires and must be reviewed. No permanent amendments. ISO 8601
|
|
1814
|
+
// format.
|
|
1815
|
+
ExpiresAt time.Time `json:"expiresAt"`
|
|
1816
|
+
// Override to the requirement's impact score. At least one of status or impact must be set.
|
|
1817
|
+
Impact *ImpactOverride `json:"impact,omitempty"`
|
|
1818
|
+
// componentId of the local component that provides this control. Set when the provider is
|
|
1819
|
+
// in the same system. Omit for external or cross-system providers; the reason field
|
|
1820
|
+
// explains the source. Primarily used with type 'inherited'.
|
|
1821
|
+
InheritedFrom *string `json:"inheritedFrom,omitempty"`
|
|
1822
|
+
// Structured controlled-vocabulary classification for why this override applies.
|
|
1823
|
+
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
1824
|
+
// and attestation overrides where the structured category enables filtering and lossless
|
|
1825
|
+
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
1826
|
+
// precedent vocabulary and rationale.
|
|
1827
|
+
Justification *Justification `json:"justification,omitempty"`
|
|
1828
|
+
// Remediation milestones (primarily for POA&M type amendments).
|
|
1829
|
+
Milestones []Milestone `json:"milestones,omitempty"`
|
|
1830
|
+
// Checksum of the prior amendment in the chain. Creates a tamper-evident linked list. Null
|
|
1831
|
+
// for the first amendment.
|
|
1832
|
+
PreviousChecksum *Checksum `json:"previousChecksum,omitempty"`
|
|
1833
|
+
// Justification for this amendment.
|
|
1834
|
+
Reason string `json:"reason"`
|
|
1835
|
+
// The ID of the requirement being amended. Must match a requirement ID in the referenced
|
|
1836
|
+
// baseline.
|
|
1837
|
+
RequirementID string `json:"requirementId"`
|
|
1838
|
+
// Digital signature for non-repudiation.
|
|
1839
|
+
Signature *Signature `json:"signature,omitempty"`
|
|
1840
|
+
// The new status this amendment sets. Optional when only impact is being overridden.
|
|
1841
|
+
Status *ResultStatus `json:"status,omitempty"`
|
|
1842
|
+
// The type of amendment.
|
|
1843
|
+
Type OverrideType `json:"type"`
|
|
1614
1844
|
}
|
|
1615
1845
|
|
|
1616
1846
|
// Bundles references to all HDF documents for audit, authorization, and compliance review.
|
|
@@ -1740,6 +1970,83 @@ const (
|
|
|
1740
1970
|
Sha512 HashAlgorithm = "sha512"
|
|
1741
1971
|
)
|
|
1742
1972
|
|
|
1973
|
+
// The packaging ecosystem the package belongs to. Use 'generic' for hardware, firmware, or
|
|
1974
|
+
// anything outside the listed language/OS package managers.
|
|
1975
|
+
type Ecosystem string
|
|
1976
|
+
|
|
1977
|
+
const (
|
|
1978
|
+
Cargo Ecosystem = "cargo"
|
|
1979
|
+
Deb Ecosystem = "deb"
|
|
1980
|
+
Gem Ecosystem = "gem"
|
|
1981
|
+
Generic Ecosystem = "generic"
|
|
1982
|
+
Go Ecosystem = "go"
|
|
1983
|
+
Maven Ecosystem = "maven"
|
|
1984
|
+
Npm Ecosystem = "npm"
|
|
1985
|
+
Nuget Ecosystem = "nuget"
|
|
1986
|
+
Pypi Ecosystem = "pypi"
|
|
1987
|
+
RPM Ecosystem = "rpm"
|
|
1988
|
+
)
|
|
1989
|
+
|
|
1990
|
+
// Whether the requirement is mandatory within its baseline. Distinct from severity (risk
|
|
1991
|
+
// weight) and status (lifecycle state). Maps cleanly onto: FedRAMP rev5 OSCAL 'CORE' prop,
|
|
1992
|
+
// FedRAMP 20x inline 'Optional:' markers, CMMC sublevel rows, and CIS Implementation Group
|
|
1993
|
+
// memberships (IG1/IG2/IG3 may carry richer semantics; layer those onto props[]/tags{}).
|
|
1994
|
+
// Optional: when omitted, consumers should treat the requirement as 'required' by
|
|
1995
|
+
// convention.
|
|
1996
|
+
type Applicability string
|
|
1997
|
+
|
|
1998
|
+
const (
|
|
1999
|
+
Advisory Applicability = "advisory"
|
|
2000
|
+
Optional Applicability = "optional"
|
|
2001
|
+
Required Applicability = "required"
|
|
2002
|
+
)
|
|
2003
|
+
|
|
2004
|
+
// Classification of the control's nature, aligning with NIST SP 800-53 / SP 800-53A
|
|
2005
|
+
// categories. 'policy' = an authored governance statement; 'procedure' = a documented
|
|
2006
|
+
// process; 'technical' = an enforced technical configuration; 'management' = a
|
|
2007
|
+
// programmatic/management activity; 'operational' = a recurring operational activity (e.g.
|
|
2008
|
+
// AT, IR, MA families). Optional: when omitted, consumers may infer heuristically from
|
|
2009
|
+
// family/id but should not assume a default.
|
|
2010
|
+
type ControlType string
|
|
2011
|
+
|
|
2012
|
+
const (
|
|
2013
|
+
Management ControlType = "management"
|
|
2014
|
+
Operational ControlType = "operational"
|
|
2015
|
+
Policy ControlType = "policy"
|
|
2016
|
+
Procedure ControlType = "procedure"
|
|
2017
|
+
Technical ControlType = "technical"
|
|
2018
|
+
)
|
|
2019
|
+
|
|
2020
|
+
// Qualitative severity band corresponding to baseScore. CVSS 2.0 does not natively use
|
|
2021
|
+
// 'none' or 'critical' bands; map accordingly when populating.
|
|
2022
|
+
//
|
|
2023
|
+
// Qualitative CVSS severity band. Aligns with FIRST/NVD bands: none=0.0, low=0.1-3.9,
|
|
2024
|
+
// medium=4.0-6.9, high=7.0-8.9, critical=9.0-10.0. Distinct from the broader Severity enum
|
|
2025
|
+
// used on Requirement_Core (which includes 'informational').
|
|
2026
|
+
//
|
|
2027
|
+
// Qualitative severity band corresponding to computedScore. Same band convention as
|
|
2028
|
+
// baseSeverity.
|
|
2029
|
+
type CVSSSeverity string
|
|
2030
|
+
|
|
2031
|
+
const (
|
|
2032
|
+
CVSSSeverityCritical CVSSSeverity = "critical"
|
|
2033
|
+
CVSSSeverityHigh CVSSSeverity = "high"
|
|
2034
|
+
CVSSSeverityLow CVSSSeverity = "low"
|
|
2035
|
+
CVSSSeverityMedium CVSSSeverity = "medium"
|
|
2036
|
+
None CVSSSeverity = "none"
|
|
2037
|
+
)
|
|
2038
|
+
|
|
2039
|
+
// The CVSS specification version this entry conforms to. Vendor scanners typically emit 3.1
|
|
2040
|
+
// or 4.0; legacy data may use 2.0 or 3.0.
|
|
2041
|
+
type Version string
|
|
2042
|
+
|
|
2043
|
+
const (
|
|
2044
|
+
The20 Version = "2.0"
|
|
2045
|
+
The30 Version = "3.0"
|
|
2046
|
+
The31 Version = "3.1"
|
|
2047
|
+
The40 Version = "4.0"
|
|
2048
|
+
)
|
|
2049
|
+
|
|
1743
2050
|
// The type of the most recent non-expired override or POAM governing this requirement.
|
|
1744
2051
|
// Indicates why the requirement is in its current state (e.g., waiver, falsePositive,
|
|
1745
2052
|
// riskAdjustment) or what remediation is being tracked (poam). Absent when no overrides or
|
|
@@ -1802,47 +2109,47 @@ const (
|
|
|
1802
2109
|
// The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
|
|
1803
2110
|
// 'system' for automated systems, 'simple' for basic string identifiers without additional
|
|
1804
2111
|
// classification, or 'other' for custom identity systems.
|
|
1805
|
-
type
|
|
2112
|
+
type IdentityType string
|
|
1806
2113
|
|
|
1807
2114
|
const (
|
|
1808
|
-
Email
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
Username
|
|
2115
|
+
Email IdentityType = "email"
|
|
2116
|
+
IdentityTypeOther IdentityType = "other"
|
|
2117
|
+
IdentityTypeSystem IdentityType = "system"
|
|
2118
|
+
Simple IdentityType = "simple"
|
|
2119
|
+
Username IdentityType = "username"
|
|
1813
2120
|
)
|
|
1814
2121
|
|
|
1815
2122
|
// The type of evidence being provided.
|
|
1816
2123
|
type EvidenceType string
|
|
1817
2124
|
|
|
1818
2125
|
const (
|
|
1819
|
-
Code
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
Log
|
|
1823
|
-
Screenshot
|
|
1824
|
-
URL
|
|
2126
|
+
Code EvidenceType = "code"
|
|
2127
|
+
EvidenceTypeOther EvidenceType = "other"
|
|
2128
|
+
File EvidenceType = "file"
|
|
2129
|
+
Log EvidenceType = "log"
|
|
2130
|
+
Screenshot EvidenceType = "screenshot"
|
|
2131
|
+
URL EvidenceType = "url"
|
|
1825
2132
|
)
|
|
1826
2133
|
|
|
1827
2134
|
// Current status of this milestone.
|
|
1828
|
-
type
|
|
2135
|
+
type MilestoneStatus string
|
|
1829
2136
|
|
|
1830
2137
|
const (
|
|
1831
|
-
Completed
|
|
1832
|
-
InProgress
|
|
1833
|
-
Pending
|
|
2138
|
+
Completed MilestoneStatus = "completed"
|
|
2139
|
+
InProgress MilestoneStatus = "inProgress"
|
|
2140
|
+
Pending MilestoneStatus = "pending"
|
|
1834
2141
|
)
|
|
1835
2142
|
|
|
1836
2143
|
// The type of POA&M. 'remediation' fixes root cause. 'mitigation' reduces risk via
|
|
1837
2144
|
// compensating controls. 'riskAcceptance' documents decision to accept risk.
|
|
1838
2145
|
// 'vendorDependency' tracks a fix that depends on a vendor releasing a patch or update.
|
|
1839
|
-
type
|
|
2146
|
+
type POAMType string
|
|
1840
2147
|
|
|
1841
2148
|
const (
|
|
1842
|
-
Mitigation
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
VendorDependency
|
|
2149
|
+
Mitigation POAMType = "mitigation"
|
|
2150
|
+
POAMTypeRemediation POAMType = "remediation"
|
|
2151
|
+
RiskAcceptance POAMType = "riskAcceptance"
|
|
2152
|
+
VendorDependency POAMType = "vendorDependency"
|
|
1846
2153
|
)
|
|
1847
2154
|
|
|
1848
2155
|
// Explicit severity rating. Typically derived from impact score but provided explicitly for
|
|
@@ -1852,11 +2159,71 @@ const (
|
|
|
1852
2159
|
type Severity string
|
|
1853
2160
|
|
|
1854
2161
|
const (
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
2162
|
+
Informational Severity = "informational"
|
|
2163
|
+
SeverityCritical Severity = "critical"
|
|
2164
|
+
SeverityHigh Severity = "high"
|
|
2165
|
+
SeverityLow Severity = "low"
|
|
2166
|
+
SeverityMedium Severity = "medium"
|
|
2167
|
+
)
|
|
2168
|
+
|
|
2169
|
+
// Structured controlled-vocabulary classification for why this override applies.
|
|
2170
|
+
// Complements (does not replace) the free-text 'reason' field. Most useful on falsePositive
|
|
2171
|
+
// and attestation overrides where the structured category enables filtering and lossless
|
|
2172
|
+
// round-trip with VEX / OSCAL / FedRAMP DR. See the Justification primitive for the
|
|
2173
|
+
// precedent vocabulary and rationale.
|
|
2174
|
+
//
|
|
2175
|
+
// Structured controlled-vocabulary reason for an override, complementing the free-text
|
|
2176
|
+
// 'reason' field. 'reason' carries the human-readable rationale an auditor reads;
|
|
2177
|
+
// 'justification' carries the machine-readable category enabling filtering, aggregation,
|
|
2178
|
+
// and lossless round-trip with structured ecosystems (VEX, OSCAL, FedRAMP DR). Both fields
|
|
2179
|
+
// may be present simultaneously and are NOT redundant: 'reason' explains the specific
|
|
2180
|
+
// circumstance; 'justification' classifies it. Authors SHOULD populate both when a
|
|
2181
|
+
// controlled-vocabulary value applies — the enum value alone is not self-explanatory to an
|
|
2182
|
+
// auditor. The vocabulary is drawn from the VEX ecosystem: the first five values are common
|
|
2183
|
+
// across OpenVEX, CSAF VEX, and CycloneDX VEX; the remaining six (requires_configuration /
|
|
2184
|
+
// requires_dependency / requires_environment / protected_by_compiler / protected_at_runtime
|
|
2185
|
+
// / protected_at_perimeter) are CycloneDX-specific and describe why the vulnerable code
|
|
2186
|
+
// path is unreachable in the deployed configuration. The enum is extended additively across
|
|
2187
|
+
// schema versions as other ecosystems' controlled vocabularies are integrated; documents
|
|
2188
|
+
// using values added in a newer schema version will fail validation against an older
|
|
2189
|
+
// schema. Consumers SHOULD validate against the schema version declared by the document
|
|
2190
|
+
// ($schema) rather than assume a fixed vocabulary.
|
|
2191
|
+
type Justification string
|
|
2192
|
+
|
|
2193
|
+
const (
|
|
2194
|
+
ComponentNotPresent Justification = "component_not_present"
|
|
2195
|
+
InlineMitigationsAlreadyExist Justification = "inline_mitigations_already_exist"
|
|
2196
|
+
ProtectedAtPerimeter Justification = "protected_at_perimeter"
|
|
2197
|
+
ProtectedAtRuntime Justification = "protected_at_runtime"
|
|
2198
|
+
ProtectedByCompiler Justification = "protected_by_compiler"
|
|
2199
|
+
RequiresConfiguration Justification = "requires_configuration"
|
|
2200
|
+
RequiresDependency Justification = "requires_dependency"
|
|
2201
|
+
RequiresEnvironment Justification = "requires_environment"
|
|
2202
|
+
VulnerableCodeCannotBeControlledByAdversary Justification = "vulnerable_code_cannot_be_controlled_by_adversary"
|
|
2203
|
+
VulnerableCodeNotInExecutePath Justification = "vulnerable_code_not_in_execute_path"
|
|
2204
|
+
VulnerableCodeNotPresent Justification = "vulnerable_code_not_present"
|
|
2205
|
+
)
|
|
2206
|
+
|
|
2207
|
+
// How this requirement is intended to be verified. Disambiguates the two cases that null
|
|
2208
|
+
// 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
2209
|
+
// to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
2210
|
+
// exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
2211
|
+
// runs without operator action; 'hybrid' = part automated, part manual. Optional: when
|
|
2212
|
+
// omitted, consumers should not infer a default.
|
|
2213
|
+
//
|
|
2214
|
+
// How a requirement is intended to be verified. Disambiguates the two cases that null
|
|
2215
|
+
// 'code' overloads: 'manual-by-design' (the requirement is statement-form and not amenable
|
|
2216
|
+
// to automation, e.g. FedRAMP 20x KSIs); 'manual-pending-automation' (automation could
|
|
2217
|
+
// exist but does not yet, e.g. a STIG rule lacking a fix). 'automated' = a check exists and
|
|
2218
|
+
// runs without operator action; 'hybrid' = part automated, part manual. Named '_Enum' to
|
|
2219
|
+
// disambiguate from the unrelated Verification_Method DID-context struct.
|
|
2220
|
+
type VerificationMethodEnum string
|
|
2221
|
+
|
|
2222
|
+
const (
|
|
2223
|
+
ManualByDesign VerificationMethodEnum = "manual-by-design"
|
|
2224
|
+
ManualPendingAutomation VerificationMethodEnum = "manual-pending-automation"
|
|
2225
|
+
VerificationMethodEnumAutomated VerificationMethodEnum = "automated"
|
|
2226
|
+
VerificationMethodEnumHybrid VerificationMethodEnum = "hybrid"
|
|
1860
2227
|
)
|
|
1861
2228
|
|
|
1862
2229
|
type CloudProvider string
|
|
@@ -1870,30 +2237,28 @@ const (
|
|
|
1870
2237
|
)
|
|
1871
2238
|
|
|
1872
2239
|
// Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
|
|
1873
|
-
type
|
|
2240
|
+
type SBOMFormat string
|
|
1874
2241
|
|
|
1875
2242
|
const (
|
|
1876
|
-
Cyclonedx
|
|
1877
|
-
Spdx
|
|
2243
|
+
Cyclonedx SBOMFormat = "cyclonedx"
|
|
2244
|
+
Spdx SBOMFormat = "spdx"
|
|
1878
2245
|
)
|
|
1879
2246
|
|
|
1880
|
-
//
|
|
1881
|
-
|
|
1882
|
-
// IP address of the host.
|
|
1883
|
-
type Copyright string
|
|
2247
|
+
// Component type discriminator. Same values as Target types.
|
|
2248
|
+
type TargetType string
|
|
1884
2249
|
|
|
1885
2250
|
const (
|
|
1886
|
-
Application
|
|
1887
|
-
Artifact
|
|
1888
|
-
CloudAccount
|
|
1889
|
-
CloudResource
|
|
1890
|
-
ContainerImage
|
|
1891
|
-
ContainerInstance
|
|
1892
|
-
ContainerPlatform
|
|
1893
|
-
Database
|
|
1894
|
-
Host
|
|
1895
|
-
Network
|
|
1896
|
-
Repository
|
|
2251
|
+
Application TargetType = "application"
|
|
2252
|
+
Artifact TargetType = "artifact"
|
|
2253
|
+
CloudAccount TargetType = "cloudAccount"
|
|
2254
|
+
CloudResource TargetType = "cloudResource"
|
|
2255
|
+
ContainerImage TargetType = "containerImage"
|
|
2256
|
+
ContainerInstance TargetType = "containerInstance"
|
|
2257
|
+
ContainerPlatform TargetType = "containerPlatform"
|
|
2258
|
+
Database TargetType = "database"
|
|
2259
|
+
Host TargetType = "host"
|
|
2260
|
+
Network TargetType = "network"
|
|
2261
|
+
Repository TargetType = "repository"
|
|
1897
2262
|
)
|
|
1898
2263
|
|
|
1899
2264
|
// The category of this annotation.
|
|
@@ -1915,10 +2280,10 @@ const (
|
|
|
1915
2280
|
type BaselineDiffState string
|
|
1916
2281
|
|
|
1917
2282
|
const (
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
2283
|
+
BaselineDiffStateAbsent BaselineDiffState = "absent"
|
|
2284
|
+
BaselineDiffStateNew BaselineDiffState = "new"
|
|
2285
|
+
BaselineDiffStateUnchanged BaselineDiffState = "unchanged"
|
|
2286
|
+
BaselineDiffStateUpdated BaselineDiffState = "updated"
|
|
1922
2287
|
)
|
|
1923
2288
|
|
|
1924
2289
|
// The mode of comparison being performed.
|
|
@@ -2027,10 +2392,10 @@ const (
|
|
|
2027
2392
|
type PackageDiffState string
|
|
2028
2393
|
|
|
2029
2394
|
const (
|
|
2030
|
-
Added
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
Removed
|
|
2395
|
+
Added PackageDiffState = "added"
|
|
2396
|
+
PackageDiffStateUnchanged PackageDiffState = "unchanged"
|
|
2397
|
+
PackageDiffStateUpdated PackageDiffState = "updated"
|
|
2398
|
+
Removed PackageDiffState = "removed"
|
|
2034
2399
|
)
|
|
2035
2400
|
|
|
2036
2401
|
// The original format of the source document before conversion to HDF.
|
|
@@ -2109,9 +2474,9 @@ const (
|
|
|
2109
2474
|
type PlanType string
|
|
2110
2475
|
|
|
2111
2476
|
const (
|
|
2112
|
-
|
|
2113
|
-
PlanTypeHybrid
|
|
2114
|
-
PlanTypeManual
|
|
2477
|
+
PlanTypeAutomated PlanType = "automated"
|
|
2478
|
+
PlanTypeHybrid PlanType = "hybrid"
|
|
2479
|
+
PlanTypeManual PlanType = "manual"
|
|
2115
2480
|
)
|
|
2116
2481
|
|
|
2117
2482
|
// The type of HDF document being referenced.
|
|
@@ -2261,8 +2626,3 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool,
|
|
|
2261
2626
|
}
|
|
2262
2627
|
return nil, errors.New("Union must not be null")
|
|
2263
2628
|
}
|
|
2264
|
-
|
|
2265
|
-
// Backward-compatible aliases for renamed constants.
|
|
2266
|
-
const (
|
|
2267
|
-
CopyrightApplication = Application
|
|
2268
|
-
)
|