Skip to content

Heimdall Data Format (HDF) v3.4.0 Specification

Version: 3.4.0 Schema: JSON Schema draft 2020-12 License: Apache-2.0 | The MITRE Corporation

Overview

HDF is a JSON format for representing security assessment data. It normalizes outputs from vulnerability scanners, compliance checkers, and configuration auditors into a unified data model. Seven document types cover the full assessment lifecycle.

DocumentPurposeKey Fields
ResultsAssessment findings (pass/fail)baselines, components, statistics
BaselineRequirements sets (without findings attached)requirements, groups, inputs
SystemDescription of system under assessmentcomponents, dataFlows, controlDesignations
PlanAssessment planassessments, schedule
AmendmentsStatus overrides (waivers, POAMs)overrides
ComparisonDiff between assessmentsrequirementDiffs, summary
Evidence PackageAudit bundlecontents (references to other docs)

Documents reference each other via URI strings: systemRef, planRef.

Conventions

  • All documents use "unevaluatedProperties": false — unknown fields are rejected.
  • Date/time values use ISO 8601 (2026-01-15T10:30:00Z).
  • UUIDs use RFC 4122 format.
  • Checksums use {algorithm, value} pairs. Algorithms: sha256, sha384, sha512, blake3.
  • generator (optional on all documents): {name, version} of the producing tool.
  • labels (optional on most documents): {key: value} string map for flexible grouping. Well-known keys: system, component, environment, region, team.

Cardinality invariants

Several arrays in the schema declare minItems: 1:

PathConstraint
Evaluated_Baseline.requirementsminItems: 1
Evaluated_Requirement.resultsminItems: 1
Evaluated_Requirement.descriptionsminItems: 1 (must include label default)
Baseline.requirementsminItems: 1
Baseline_Requirement.descriptionsminItems: 1 (must include label default)
Components (system)minItems: 1

Rationale. An HDF Results document records the outcome of an assessment. A baseline with zero requirements (or a requirement with zero results) is structurally meaningless — it implies the producer claims an assessment happened but recorded no work. The cardinality invariants force producers to commit to a non-empty record, and let consumers (Heimdall app, hdf query, dashboards, downstream OSCAL exporters) safely access baselines[0], requirements[0].results[0], and requirements[0].descriptions[0] without defensive null-checking. Empty arrays would also be semantically ambiguous: clean scan? filter excluded everything? truncated input? converter bug? An explicit record disambiguates. The constraint matches peer formats — OSCAL AssessmentResult and InSpec profiles have equivalent non-empty-collection guarantees.

Migration note. Legacy HDF (the InSpec-ExecJSON-shaped output that the original Heimdall2 mappers produced) did not enforce these cardinality invariants. A clean Heimdall2 scan emitted profiles[0].controls: [] and the consumer was expected to tolerate empty arrays. The v3 schema deliberately tightened the contract: producers MUST emit non-empty arrays, and clean scans MUST synthesize a passed placeholder per the convention below. Consumers reading v3 HDF can rely on first-element access being safe; producers translating from legacy HDF v1 (InSpec-shaped) data MUST add synthesis at the converter boundary.

Clean-scan convention: synthesize a passed placeholder

A direct consequence of the cardinality invariants: a scanner that runs cleanly (zero findings) still must produce at least one requirement and one result. Converters MUST synthesize a placeholder rather than emitting an empty array.

Shape:

FieldValue
id<source>-no-findings (kebab-case converter source name) — or <sub-tool>-no-findings for multi-baseline converters where each baseline represents a distinct sub-tool (e.g. SARIF per-run, MSDO per-scanner)
title"No findings reported"
impact0
tags{}
descriptions[0]{label: "default", data: <codeDesc>}
results[0].statuspassed
results[0].codeDesc<Tool> <verb> <target> and reported zero <noun>. (verb: scanned default, analyzed for SCA tools, ran for multi-tool wrappers; noun: findings default, vulnerable components for SCA/dependency/container-vuln tools)
results[0].startTimescan timestamp from source, or current time if unavailable

Spec-backed semantics for passed. This is not a "no information" placeholder — it is a positive assertion that the scan ran against in-scope inputs and detected nothing wrong. The framing aligns with: NIST SP 800-53A Satisfied, OSCAL satisfied, XCCDF pass, STIG Not_a_Finding, and SARIF v2.1.0 §3.7.2 ("an empty results array shall be interpreted to mean that the analysis tool did not detect any results").

Distinguish from notApplicable. Synthesize notApplicable (not passed) when the rule's applicability check itself didn't fire — e.g. a cloud-config rule with zero in-scope resources, where the rule never evaluated against anything. The two convey materially different audit positions: passed says "we checked and you're compliant"; notApplicable says "we didn't check this one." Producers SHOULD use whichever the source format's semantics support; consumers SHOULD treat them as distinct.

Reference helper implementations: shared.BuildNoFindingsRequirement (Go) and buildNoFindingsRequirement (TypeScript) in hdf-converters/shared/. Every in-tree converter that emits a passed placeholder for clean scans calls one of these.


1. Results

Assessment findings from running security checks against target systems.

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-results/v3.4.0

Top-Level Fields

A Results document is the primary output of HDF converters. It captures what was scanned (components), what was checked (baselines with requirements), and what happened (results with pass/fail status). The tool field identifies the original security tool; generator identifies the converter that produced the HDF file. Cross-document links (systemRef, planRef) connect results to the broader assessment context.

FieldTypeRequiredDescription
baselinesEvaluated_Baseline[]yesBaselines evaluated with findings
componentsComponent[]noSystem components assessed
statisticsStatisticsnoDuration, result counts
timestampdate-timenoWhen assessment ran
toolToolnoSecurity tool that produced scan data ({name, version, format})
generatorGeneratornoTool that produced this HDF file
runnerRunnernoExecution environment (distinct from components)
integrityIntegritynoCryptographic integrity metadata
systemRefURI-referencenoLink to System document
planRefURI-referencenoLink to Plan document
extensionsobjectnoTool-specific metadata
idUUIDnoUnique assessment run identifier
remediationRemediationnoReference to automated fix resources

Evaluated_Baseline

An evaluated baseline represents the results of a set of security tests that have been run against a target system, aligned back to a baseline. It contains the original baseline metadata (name, version, author information) plus the assessed requirements with their pass/fail results. For example, an Evaluated Baseline could represent a Security Content Automation Protocol (SCAP) benchmark after it is evaluated. In InSpec terms, an Evaluated Baseline is a profile after it has been executed against a target with inspec exec and produced results. HDF converters should produce one evaluated baseline per scan profile, scanner module, or logical grouping of checks in the source tool's output.

FieldTypeRequiredDescription
namestringyesUnique baseline name
requirementsEvaluated_Requirement[]yesAssessment findings; minItems: 1
titlestringnoHuman-readable title
versionstringnoBaseline version
descriptionstringnoDetailed description
maintainerstringnoMaintainer name/contact
summarystringnoe.g. STIG header
copyrightstringnoCopyright holder(s)
copyrightEmailstringnoCopyright contact email
licensestringnoe.g. "Apache-2.0"
statusstringnoe.g. "loaded"
statusMessagestringnoExplanation of status
groupsRequirementGroup[]noLogical groupings of requirements
inputsInput[]noTyped parameters for execution
dependsDependency[]noBaseline dependencies
supportsSupportedPlatform[]noSupported platform targets
checksumChecksumnoBaseline integrity hash
originalChecksumChecksumnoImmutable baseline definition hash
resultsChecksumChecksumnoRaw results hash (before amendments)
parentBaselinestringnoParent baseline name (overlay/wrapper)
labelsnoKey-value grouping metadata
extensionsobjectnoTool-specific metadata

Evaluated_Requirement

A single security requirement with test results. Each requirement maps to one testable security control — an InSpec control, a SonarQube rule, a Nessus plugin, or an OSCAL control objective. The impact score (0.0–1.0) indicates severity, tags carry framework mappings (NIST SP 800-53, CCI, CWE), and results holds the individual test executions. Multiple results occur when the same check runs against multiple resources or when findings are grouped by rule.

FieldTypeRequiredDescription
idstringyesRequirement identifier, e.g. "SV-238196"
impactnumberyesSeverity score 0.0–1.0
tagsyesMetadata; common keys: nist, cci, severity, cwe
resultsRequirementResult[]yesTest executions; minItems: 1
descriptionsDescription[]yesMust include label "default"; minItems: 1
titlestringnoHuman-readable title
codestringnoSource code of the check
severitySeveritynoExplicit severity rating
effectiveStatusResultStatusnoStatus after applying overrides
sourceLocationSourceLocationnoFile path and line number
refsReference[]noExternal document references
statusOverridesStatusOverride[]noAudit trail of status changes
poamsPoamElement[]noRemediation tracking (don't change status)
evidenceEvidence[]noScreenshots, logs, code samples
dispositionOverrideTypenoOverride disposition applied to this requirement
effectiveImpactnumbernoEffective impact after overrides (0.0–1.0)
controlTypeControlTypenoNIST SP 800-53 / SP 800-53A categorization: policy | procedure | technical | management | operational (v3.2.0)
verificationMethodVerificationMethodnoHow this requirement is verified: automated | manual-by-design | manual-pending-automation | hybrid. Disambiguates the two cases that null code previously overloaded (v3.2.0)
applicabilityApplicabilitynoWithin-baseline applicability: required | optional | advisory. Distinct from severity (risk weight) and status (lifecycle) (v3.2.0)
cvssCVSS[]noTyped CVSS scoring for the finding. Multi-entry to handle multi-CVE findings; all four major CVSS versions supported (v3.3.0)
epssEPSSnoEPSS exploit-probability data (percentile + score) (v3.3.0)
kevKevnoCISA Known Exploited Vulnerabilities catalog status (v3.3.0)
cwestring[]noCWE classification IDs (e.g. CWE-79). Replaces free-form tags.cwe (v3.3.0)
affectedPackagesAffected_Package[]noAffected-package identifiers (ecosystem + name + version) for vulnerability findings (v3.3.0)

RequirementResult

A single test execution within a requirement. Each result records what was tested (codeDesc), when (startTime), how long it took (runTime), and the outcome (status). For failed tests, message explains the failure. For errors, exception and backtrace capture the fault. The resource and resourceId fields identify the specific system resource that was tested (e.g. a file, service, or package).

FieldTypeRequiredDescription
statusResultStatusyesTest outcome
codeDescstringyesDescription of what was tested
startTimedate-timeyesWhen test started
runTimenumbernoExecution time in seconds
messagestringnoExplanation of result
exceptionstringnoException type if error occurred
resourcestringnoResource type tested, e.g. "file", "service"
resourceIdstringnoResource identifier, e.g. "/etc/passwd"
backtracestring[]noStack trace if exception occurred

Component

The system element that was assessed. Components are polymorphic — each has a type discriminator that determines which additional fields are available. All components share name, type, and optional fields for identity (componentId), external cross-references (externalIds), labels, BOM attachment (boms[] — SBOM, AI-model, or dataset), artifact integrity (integrity[]), and baseline references. Components in Results are typically populated with minimal fields by converters; components in System documents carry the full set including componentId for cross-document correlation.

FieldTypeRequiredDescription
namestringyesHuman-readable component name
typeComponentTypeyesDiscriminator (see types below)
componentIdUUIDnoStable identity for cross-document correlation
descriptionstringnoComponent role or purpose
externalIdsnoExternal ID map (aws, azure, cmdb, emass)
labelsnoKey-value grouping metadata
bomsBillOfMaterials[]noComponent-scoped BOMs (SBOM, ai-model, dataset, or reserved bomType), by passthrough or normalized. Replaces the former sbom/sbomRef/sbomFormat trio (v3.4.0)
integrityChecksum[]noCryptographic integrity of the component's artifact (model weights/shards, dataset archive, image, package bytes). Generic home replacing per-type digest/checksum (v3.4.0)
baselineRefsstring[]noNames of baselines that apply

Type-specific fields:

TypeExtra Fields
hosthostname, fqdn, domain, ipAddress, macAddress, osName, osVersion
containerImageimageId, registry, repository, tag
containerInstancecontainerId, image, runtime
containerPlatformplatformType, clusterName, namespace, version
cloudAccountprovider, accountId, region
cloudResourceprovider, resourceType, resourceId, arn, region
repositoryurl, branch, commit
applicationurl, version, environment
artifactpackageManager, packageName, version
networkcidr, gateway
databaseengine, version, host, port
aiModel (v3.4.0)modelId, version (detail in the attached ai-model BOM)
dataset (v3.4.0)datasetId, version (detail in the attached dataset BOM)

2. Baseline

Security requirements without results (before assessment).

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-baseline/v3.4.0

Shares most fields with Evaluated_Baseline but uses Baseline_Requirement (no results, no effectiveStatus) instead of Evaluated_Requirement.

FieldTypeRequiredDescription
namestringyesUnique baseline name
requirementsBaseline_Requirement[]yesSecurity requirements; minItems: 1
groupsRequirementGroup[]noLogical groupings of requirements
inputsInput[]noTyped parameters for execution
dependsDependency[]noBaseline dependencies
checksumChecksumnoBaseline integrity hash
remediationRemediationnoReference to automated fix resources
generatorGeneratornoTool that produced this file
titlestringnoHuman-readable title
versionstringnoBaseline version
descriptionstringnoDetailed description
maintainerstringnoMaintainer name/contact
summarystringnoe.g. STIG header
copyrightstringnoCopyright holder(s)
copyrightEmailstringnoCopyright contact email
licensestringnoe.g. "Apache-2.0"
statusstringnoe.g. "loaded"
statusMessagestringnoExplanation of status
supportsSupportedPlatform[]noSupported platform targets
labelsnoKey-value grouping metadata

Baseline_Requirement

A security requirement before assessment. Structurally identical to Evaluated_Requirement but without results, effectiveStatus, statusOverrides, poams, or evidence. Used to represent standalone baselines (STIG profiles, CIS benchmarks) and in OSCAL catalog/profile conversions where no assessment has occurred yet.

FieldTypeRequiredDescription
idstringyesRequirement identifier
impactnumberyesSeverity score 0.0–1.0
tagsyesMetadata; common keys: nist, cci, severity
descriptionsDescription[]yesMust include label "default"; minItems: 1
titlestringnoHuman-readable title
codestringnoSource code of the check
severitySeveritynoExplicit severity rating
sourceLocationSourceLocationnoFile path and line number
refsReference[]noExternal document references
controlTypeControlTypenoNIST SP 800-53 / SP 800-53A categorization: policy | procedure | technical | management | operational (v3.2.0)
verificationMethodVerificationMethodnoHow this requirement is verified: automated | manual-by-design | manual-pending-automation | hybrid (v3.2.0)
applicabilityApplicabilitynoWithin-baseline applicability: required | optional | advisory (v3.2.0)
cvssCVSS[]noTyped CVSS scoring; all four major versions supported (v3.3.0)
epssEPSSnoEPSS exploit-probability data (v3.3.0)
kevKevnoCISA Known Exploited Vulnerabilities catalog status (v3.3.0)
cwestring[]noCWE classification IDs (v3.3.0)
affectedPackagesAffected_Package[]noAffected-package identifiers for vulnerability findings (v3.3.0)

3. System

Describes a system under assessment. A system document defines the authorization boundary, including what components make up the system, its security categorization (FIPS 199), and its authorization status (ATO). This corresponds to a FedRAMP system or an OSCAL SSP's system characteristics. Results and amendments reference the system via systemRef to establish which system the assessment applies to.

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-system/v3.4.0

FieldTypeRequiredDescription
namestringyesSystem name
componentsComponent[]yesSystem components
identifierstringnoSystem identifier (e.g. FedRAMP ID)
identifierSchemestringnoIdentifier scheme (e.g. "fedramp")
descriptionstringnoSystem description
authorizationStatusAuthorizationStatusnoATO status
authorizationDatedatenoDate of authorization decision
categorizationLevelCategorizationLevelnoFIPS 199 categorization
boundaryDescriptionstringnoSystem boundary narrative
controlDesignationsControlDesignation[]noControl inheritance declarations
dataFlowsDataFlow[]noData flows between components or external endpoints
labelsnoKey-value grouping metadata
checksumChecksumnoDocument integrity hash
versionstringnoDocument version
generatorGeneratornoTool that produced this file

System Component

System components use the same polymorphic Component type as Results (see Section 1), with componentId required for stable cross-document references, data flow endpoints, and control designation binding.

Data Flow

Describes a data flow between components within the system or to external endpoints. Used for authorization boundary diagrams and data flow documentation.

FieldTypeRequiredDescription
fromUUIDyesSource componentId
toUUID or External_EndpointyesDestination (local component or external)
protocolstringnoProtocol (e.g. "HTTPS", "TCP")
portintegernoPort number (1–65535)
directionDirectionnoinbound, outbound, or bidirectional
descriptionstringnoFlow description
labelsnoKey-value metadata

Control Designation

Declares a control's designation within the system — whether it is common (provided by another component or external system), system-specific (implemented locally), or hybrid (shared responsibility). This maps to NIST SP 800-53 Appendix C control designations and OSCAL SSP by-component provided/inherited semantics. When providedBy is set, the control is provided by a local component; when systemRef is set, the provider is in another system's authorization boundary. When neither is set, the provider is external with no formal HDF representation (e.g. a cloud provider's physical security).

FieldTypeRequiredDescription
controlIdstringyesControl identifier (e.g. "SC-7", "AC-2 (1)")
designationControlDesignationTypeyescommon, system-specific, or hybrid
descriptionstringyesJustification for this designation
providedByUUIDnocomponentId of local provider
systemRefURI-referencenoReference to external system document
inheritedByUUID[]nocomponentIds that inherit (default: all)

4. Plan

Assessment plan defining what to assess and how. A plan document describes the scope, methodology, and schedule for an upcoming security assessment. It references the system under test via systemRef and lists the individual assessments to be performed. This corresponds to an OSCAL SAP (Security Assessment Plan) or a FedRAMP test plan.

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-plan/v3.4.0

FieldTypeRequiredDescription
namestringyesPlan name
assessmentsAssessment[]yesPlanned assessment activities
typePlanTypenoAssessment methodology
descriptionstringnoPlan description
systemRefURI-referencenoLink to System document
scheduleSchedulenoAssessment schedule
labelsnoKey-value grouping metadata
checksumChecksumnoDocument integrity hash
versionstringnoDocument version
generatorGeneratornoTool that produced this file

Assessment

A single assessment within a plan — defines which baseline to run against which component.

FieldTypeRequiredDescription
baselineRefURI-referenceyesReference to baseline to evaluate
componentRefUUIDnocomponentId of target component (direct binding)
targetSelectorTargetSelectornoLabel selector for target matching
inputsobjectnoResolved input values
runnerRunnerConfignoRunner/scanner configuration
descriptionstringnoAssessment purpose

5. Amendments

Status overrides applied after assessment (waivers, attestations, POAMs).

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-amendments/v3.4.0

FieldTypeRequiredDescription
namestringyesAmendment set name
overridesOverride[]yesStatus overrides
descriptionstringnoDescription of this amendment set
systemRefURI-referencenoLink to System document
appliedByIdentitynoWho applied the overrides
approvedByIdentitynoWho approved the overrides
labelsnoKey-value grouping metadata
checksumChecksumnoDocument integrity hash
signatureSignaturenoDigital signature
versionstringnoDocument version
generatorGeneratornoTool that produced this file

Override

A deliberate change to an assessed requirement's compliance status. Waivers grant temporary acceptance of a known risk. Attestations assert manual verification of a requirement that cannot be automatically tested. POAMs track planned remediation with milestones. False positives mark findings confirmed as not applicable. Risk adjustments modify severity based on contextual analysis. Operational requirements document accepted deviations due to mission needs. Inherited overrides indicate that a control is provided by another component or system (typically overriding to notApplicable or passed). Each override records who authorized it, why, and when it expires. The previousChecksum field creates a tamper-evident chain linking each override to the document state at the time it was applied.

FieldTypeRequiredDescription
typeOverrideTypeyesOverride category
requirementIdstringyesID of requirement being overridden
reasonstringyesFree-text auditor-readable rationale for the override
appliedByIdentityyesIdentity of who applied this amendment
appliedAtdate-timeyesWhen this amendment was applied
expiresAtdate-timeyesWhen this amendment expires. No permanent amendments
statusResultStatusconditionalNew effective status. At least one of status or impact must be set, except when type: operationalRequirement (which forbids both)
impactImpact_OverrideconditionalOverride to the requirement's impact score ({value: 0.0–1.0}). At least one of status or impact must be set; forbidden when type: operationalRequirement
baselineRefstringnoName of the baseline containing the requirement; needed when the system has multiple baselines with overlapping IDs
componentRefUUIDnocomponentId this amendment is scoped to; omit for system-wide
inheritedFromUUIDnocomponentId of the local control provider; primarily used with type: inherited
affectedPackagesAffected_Package[]noSoftware packages this amendment is scoped to (purl/cpe/name+version), distinct from componentRef
evidenceEvidence[]noSupporting evidence (screenshots, logs, URLs, documents)
signatureSignaturenoDigital signature for non-repudiation
previousChecksumChecksumnoChecksum of the prior amendment in the chain (tamper-evident linked list)
cvssCVSSnoStructured CVSS scoring backing this override; on riskAdjustment, impact.value should be approximately cvss.computedScore / 10.0 (v3.3.0)
justificationJustificationnoStructured controlled-vocabulary classification (VEX-aligned: component_not_present, vulnerable_code_not_present, vulnerable_code_not_in_execute_path, vulnerable_code_cannot_be_controlled_by_adversary, inline_mitigations_already_exist). Complements (does not replace) reason (v3.3.0)
milestonesMilestone[]noRemediation milestones (primarily for poam type)

6. Comparison

Diff between two or more assessment documents. A comparison captures how compliance posture changed between scans, across environments, or between baseline versions. The comparisonMode indicates the type of analysis (temporal drift, fleet comparison, baseline evolution, etc.). Each requirement diff records whether a control is new, absent, fixed, regressed, or unchanged. Comparisons are produced by hdf diff and consumed by dashboards to show trend data.

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-comparison/v3.4.0

FieldTypeRequiredDescription
formatVersionstringyesComparison format version
comparisonModeComparisonModeyesType of comparison
sourcesSource[]yesDocuments being compared
summarySummaryyesAggregate diff statistics
requirementDiffsRequirementDiff[]yesPer-requirement diffs
timestampdate-timenoWhen comparison was generated
generatorGeneratornoTool that produced this file
matchingMatchingConfignoHow requirements were matched
baselineDiffsBaselineDiff[]noPer-baseline diffs
componentDiffsComponentDiff[]noPer-component diffs
packageDiffsPackageDiff[]noPer-package diffs
systemRefURI-referencenoLink to System document
driftDriftAnalysisnoDrift analysis metadata
annotationsAnnotation[]noHuman/tool annotations on diffs
integrityIntegritynoCryptographic integrity metadata
extensionsobjectnoTool-specific metadata

7. Evidence Package

Bundles references to assessment artifacts for audit and compliance submission. An evidence package collects results, baselines, amendments, system descriptions, and supporting materials (screenshots, logs, SBOMs) into a single auditable unit. This corresponds to a FedRAMP security package or an OSCAL POA&M submission bundle. The completenessCheck field validates that all expected artifacts are present.

Schema ID: https://mitre.github.io/hdf-libs/schemas/hdf-evidence-package/v3.4.0

FieldTypeRequiredDescription
namestringyesPackage name
contentsContentReference[]yesReferences to bundled artifacts
descriptionstringnoPackage description
systemRefURI-referencenoLink to System document
preparedByIdentitynoWho prepared this package
preparedAtdate-timenoWhen package was prepared
completenessCheckCompletenessChecknoValidation of package contents
signatureSignaturenoDigital signature
labelsnoKey-value grouping metadata
checksumChecksumnoDocument integrity hash
versionstringnoDocument version
generatorGeneratornoTool that produced this file

Content Reference

A reference to an HDF document or SBOM included in the evidence package.

FieldTypeRequiredDescription
typeContentTypeyesDocument type
uriURI-referenceyesDocument location
checksumChecksumnoDocument integrity hash
descriptionstringnoEntry description
componentRefUUIDnocomponentId this content relates to

Enumerations

ResultStatus

passed | failed | notApplicable | notReviewed | error

Severity

critical | high | medium | low | informational

Impact Mapping

Impact is a float 0.0 to 1.0. Conventional mapping to severity:

ImpactSeverity
0.9critical
0.7high
0.5medium
0.3low
0.0informational / notApplicable

OverrideType

waiver | attestation | poam | inherited | falsePositive | riskAdjustment | operationalRequirement

PlanType

automated | manual | hybrid

ComparisonMode

temporal | baseline | fleet | multiSource | baselineEvolution | systemDrift

RequirementState (comparison)

new | absent | unchanged | updated | fixed | regressed | moved | split | merged

AuthorizationStatus

authorized | denied | pendingAuthorization | conditionallyAuthorized | notYetRequested | revoked

CategorizationLevel

low | moderate | high

ComponentType

host | containerImage | containerInstance | containerPlatform | cloudAccount | cloudResource | repository | application | artifact | network | database | aiModel | dataset

Direction (data flow)

inbound | outbound | bidirectional

ControlDesignationType

common | system-specific | hybrid

HashAlgorithm

sha256 | sha384 | sha512 | blake3


Shared Primitives

Checksum

json
{ "algorithm": "sha256", "value": "abc123..." }

Generator

json
{ "name": "sarif-to-hdf", "version": "1.0.0" }

Tool

json
{ "name": "Nessus", "version": "10.8.1", "format": "XML" }

Identity

json
{ "type": "email", "identifier": "compliance@agency.gov" }

Types: email, username, system, agent, simple, other. Use email for email addresses, username for user accounts, system for deterministic non-interactive automation (CI jobs, cron, scanners), agent for an AI/LLM agent acting with autonomy (kept distinct from system so AI-generated provenance can be audited separately), simple for a basic string identifier, or other for a custom identity system.

Description

json
{ "label": "default", "data": "The system must..." }

Labels: default (required), check, fix, rationale (conventional).

RequirementGroup

json
{ "id": "controls/ssh.rb", "title": "SSH Controls", "requirements": ["SV-1", "SV-2"] }

Dependency

json
{ "name": "os-baseline", "url": "https://...", "status": "loaded" }

Input

Typed parameters for baseline execution.

json
{
  "name": "max_sessions",
  "description": "Maximum concurrent sessions",
  "type": "Numeric",
  "value": 10,
  "constraints": { "operator": "le", "limit": 20 }
}

Input types: String | Numeric | Boolean | Array | Hash | Regexp. Comparison operators: eq | ne | lt | le | gt | ge | contains | matches | in | notIn.

SourceLocation

json
{ "ref": "controls/ssh.rb", "line": 42 }

SupportedPlatform

json
{ "platformName": "ubuntu", "platformFamily": "debian", "release": "22.04" }

Integrity Model

HDF supports 4 trust levels for tamper detection:

LevelMechanismFields
0None(default)
1ChecksumsoriginalChecksum, resultsChecksum on baselines
2Amendment chainpreviousChecksum on overrides
3Digital signaturessignature on amendments, evidence packages

Checksum Flow

  1. originalChecksum: SHA-256 of the baseline definition file (immutable)
  2. resultsChecksum: SHA-256 of raw results before amendments
  3. previousChecksum: Links each override to the prior state (chain)

Cross-Document References

Plan ---- baselineRef ---------> Baseline
Plan ---- systemRef -----------> System
Plan ---- componentRef --------> Component (by UUID)
Results - planRef -------------> Plan
Results - systemRef -----------> System
Results - baselines[] ---------> Baseline (embedded, not referenced)
Results - components[] --------> Component (embedded)
Amendments - systemRef --------> System
Amendments - componentRef -----> Component (by UUID)
Amendments - inheritedFrom ----> Component (by UUID)
Evidence Package - systemRef --> System
Evidence Package - componentRef -> Component (by UUID, on Content_Reference)
System - dataFlows[].from/to --> Component (by UUID)
System - controlDesignations --> Component (by UUID, providedBy/inheritedBy)

All *Ref fields are URI-reference strings (relative path, absolute URI, or fragment identifier) unless noted as UUID. Component references use componentId (UUID) for local binding. The baselines[] and components[] relationships in Results are composition — they embed the data rather than referencing external documents.


Schema Compliance

All schemas use JSON Schema draft 2020-12 with "unevaluatedProperties": false — documents containing unknown fields are invalid. Tool-specific data should go in the extensions field where available.

Schemas are published at https://mitre.github.io/hdf-libs/schemas/ and distributed as bundled JSON files in the hdf-schema package.

HDF Libraries

PackageLanguagePurpose
hdf-schemaTS/GoJSON schemas, generated types, validation helpers
hdf-validatorsTS/GoValidate documents against HDF schemas
hdf-convertersTS/GoConvert 30+ security tool formats to/from HDF
hdf-parsersTS/GoParse and flatten HDF documents
hdf-mappingsTS/GoCCI, CWE, OWASP, NIST framework mappings
hdf-generatorsTS/GoGenerate scanner profile stubs from HDF Baselines
hdf-diffTS/GoCompare HDF documents, produce Comparison documents
hdf-extension-graphTSResolve baseline overlay/extension dependency chains
hdf-utilitiesTSShared utilities: XML parsing, HTML stripping, hashing
hdf-cliGoCLI tool: hdf validate, hdf convert, hdf query, hdf diff

Released under the Apache 2.0 License.