The Software Bill of Materials (SBOM) is not produced

ID

steps_sbom

Severity

low

Remediation Complexity

medium

Remediation Risk

low

Remediation Effort

medium

Family

SCM

Tags

ASVS50:v15.1.2, non-reachable, sbom, security, slsa-1, slsa-2, slsa-3, slsa-4, spvs10-v3.4.2, supply-chain

Description

SBOM (Software Bill of Materials) is a file that specifies each component of software or a build process.

It should be generated after every pipeline run. After it is generated, it must then be signed.

You can configure tools or run commands to check for workflows using tools to verify this. The parameters are tools and commands.

Security

Software Bill of Materials (SBOM) is a file used to validate the integrity and security of a build pipeline.

Signing it ensures that no one tampered with the file when it was delivered. Such interference can happen if someone tries to hide unusual activity.

Validating the SBOM signature can detect this activity and prevent much greater incidents.

Mitigation / Fix

Generate the Software Bill of Materials as a step of the pipeline that builds the artifact, so the SBOM describes the components that actually went into that build rather than a later state of the repository. The check looks for a known SBOM tool in the pipeline definitions and build scripts of the project.

This check reads pipeline definitions and build scripts only. An SBOM produced anywhere else — by hand, or by a pipeline living in another repository — is not visible to it, so the finding stays open until the generating step belongs to a pipeline this project owns.

Xygeni SBOM

Xygeni exports the SBOM from the dependency graph it resolved for the scan, so the inventory matches what the build resolved:

xygeni inventory -n $PROJECT -d . --sbom sbom.json

On GitHub Actions the same export is available as an action:

- name: Xygeni SBOM
  uses: xygeni/xygeni-action@<commit-sha> # pin to a release commit
  with:
    command: sbom
    token: ${{ secrets.XYGENI_TOKEN }}

An unsigned SBOM travels without provenance: anyone downstream has to take it on trust. Attest it in the same pipeline run that produced it, adding the SBOM as a product of the build with Salt:

salt -q -p $PIPE -s sbom -d . \
     -t product -f sbom.json \
     -- xygeni inventory -n $PROJECT -d . --sbom sbom.json