Skip to main content

In this article

SBOM Verification

Stable and PreRelease HVE Core releases publish Software Bill of Materials (SBOM) files in SPDX 2.3 JSON format. The per-artifact SBOM describes the VSIX. dependencies.spdx.json describes the dependency tree used during the build. release-vsix-publish.yml produces these assets only after an exact protected tag push passes channel, source, branch, committed-state, and draft release validation.

What Gets Published

Each channel release publishes:

AssetChannelAttestation topology
hve-core-<version>.vsix.spdx.jsonStable and PreReleaseSPDX predicate over the VSIX subject
dependencies.spdx.jsonStable and PreReleaseSPDX predicate over the VSIX subject
hve-core.openvex.jsonStable onlySeparate VEX subject attestation

The SBOM files are predicate payloads in the channel package workflows. They are not independently attested SPDX subjects. Stable additionally uses dependencies.spdx.json as the subject of an OpenVEX predicate.

Verifying the SBOM Attestation

SBOM attestation verification uses the GitHub CLI. Install it if you have not already:

# Windows (winget)
winget install GitHub.cli

# macOS (Homebrew)
brew install gh

Download assets from the exact channel tag:

# PreRelease
gh release download prerelease-v<version> -R microsoft/hve-core \
-p '*.vsix' -p '*.vsix.spdx.json' -p 'dependencies.spdx.json'

# Stable
gh release download v<version> -R microsoft/hve-core \
-p '*.vsix' -p '*.vsix.spdx.json' -p 'dependencies.spdx.json'

Verify SPDX predicates through their primary artifact subjects:

# Stable VSIX
gh attestation verify hve-core-<version>.vsix -R microsoft/hve-core \
--signer-workflow microsoft/hve-core/.github/workflows/extension-provenance-signer.yml \
--signer-digest 3a09401536cef0c4559db1aa64b7d1010638fd67 \
--predicate-type https://spdx.dev/Document/v2.3

# PreRelease VSIX
gh attestation verify hve-core-<version>.vsix -R microsoft/hve-core \
--signer-workflow microsoft/hve-core/.github/workflows/extension-provenance-signer.yml \
--signer-digest 3a09401536cef0c4559db1aa64b7d1010638fd67 \
--predicate-type https://spdx.dev/Document/v2.3

These commands can match both the per-artifact and dependency SBOM attestations because both use the SPDX 2.3 predicate type. Inspect the returned attestation statements when you need to distinguish the predicate payloads.

Do not verify dependencies.spdx.json as an SPDX subject. On both channels it is an SPDX predicate payload over the VSIX subject. Stable also uses it as a subject for an OpenVEX predicate; PreRelease does not.

A successful verification confirms:

  • An SPDX predicate was attached to the selected primary artifact
  • The predicate was produced by the specified channel workflow
  • The attestation has not been modified since signing

The release gate verifies build provenance in two stages. It first uses the GitHub CLI to authenticate the attestation, exact subject digest, signer workflow and signer revision, source ref and source revision, and hosted-runner constraint. It then applies fail-closed semantic policy to the authenticated statement. The policy requires exactly one matching subject and digest, SLSA provenance v1, GitHub Actions workflow/v1, the push event, a GitHub-hosted runner, the expected external parameters, one resolved source dependency, and the expected builder identity. Missing, additional, or mismatched policy fields fail verification.

The signer is extension-provenance-signer.yml. Its contents: read package job installs and packages; its separate privileged attestation job receives the VSIX and dependency SBOM through fixed-name, digest-checked artifact transfers. No job both installs or packages dependencies and signs the result.

IMPORTANT

These controls do not establish SLSA Build Level 3. Future Stable and PreRelease releases still require successful runtime evidence, proof that the required tag governance is active, platform assurance mapping, and qualified human review before making that claim.

The required tag governance is not yet active or proven. The intended release-tags-creation-by-release-app ruleset restricts tag creation and gives the Release App its only bypass. The separate release-tags-immutable ruleset restricts update, deletion, and force pushes with no bypass. Their names in documentation are not evidence that either ruleset is installed.

TIP

Build provenance and SPDX predicates are independent attestations. Omit --predicate-type to verify build provenance. Use https://spdx.dev/Document/v2.3 to match SPDX predicates.

Downloading and Inspecting

Inspect a downloaded per-artifact SBOM:

jq '{
version: .spdxVersion,
name: .name,
created: .creationInfo.created,
packages: (.packages | length)
}' hve-core-<version>.vsix.spdx.json

# Package list with versions
jq '.packages[] | {name, versionInfo}' hve-core-<version>.vsix.spdx.json

# License information
jq '.packages[] | {name, licenseConcluded, licenseDeclared}' hve-core-<version>.vsix.spdx.json

Inspect dependencies.spdx.json as data while verifying its SPDX content through the primary VSIX subject:

jq '{
version: .spdxVersion,
name: .name,
created: .creationInfo.created,
packages: (.packages | length)
}' dependencies.spdx.json

Key SPDX Fields

The SBOM follows the SPDX 2.3 specification. These fields are most relevant for security and compliance review:

FieldDescription
spdxVersionSpecification version (SPDX-2.3)
nameDocument name identifying the scanned artifact
creationInfoTimestamp and tool that generated the document
packagesArray of components with name, version, and supplier
licenseConcludedLicense determined through analysis
licenseDeclaredLicense stated by the package author
relationshipsDependency graph between components

Consuming the SBOM

You can feed the SPDX JSON file into security and compliance tooling:

Use CaseDescription
Vulnerability scanningImport into tools like Grype, Trivy, or Dependabot to check for known CVEs in bundled components.
License complianceParse licenseConcluded and licenseDeclared fields to validate that all included licenses meet your organization's policy.
Inventory trackingUse the package list to maintain an accurate record of third-party components in your environment.
  • SECURITY.md: Build provenance verification and vulnerability reporting
  • Security Model: Security controls including SBOM attestation (SC-7)

🤖 Crafted with precision by ✨Copilot following brilliant human instruction, then carefully refined by our team of discerning human reviewers.