Knowledge · SBOM

What is an SBOM? Definition, contents and a real example

The bill of materials of the software: every component with version and identifier.

Below is a real SBOM from STM32CubeF4: what it contains and what it leaves out.

As of 7 November 2026 · 5 min readYou make the conformity statement. This page and our reports provide technical findings as its basis.

At a glance
Stands for
Software bill of materials
Required by the CRA from
11 Dec 2027
Common formats
CycloneDX, SPDX
Technical guideline
BSI TR-03183-2

Regulation (EU) 2024/2847, Annex I Part II(1), Art. 71; BSI TR-03183-2 v2.1.0

The test subject

File
sbom_cdx.json
Package
STM32CubeF4 v1.28.3
Format
CycloneDX 1.5
Components
74
SHA-256
5418487d4a2b…
Vendor
STMicroelectronics

STMicroelectronics/STM32CubeF4 on GitHub

What is an SBOM?

SBOM stands for software bill of materials. The CRA requires one in Annex I Part II(1). It is a file that lists every software component of a product: the operating system or RTOS, every library, every bought-in module, each with its version and an identifier that finds the component unambiguously.

Its value shows when a vulnerability becomes known. CVE-2020-22284 affects lwIP 2.1.0 to 2.1.2. With SBOMs it takes seconds to see which devices and which firmware releases contain lwIP in one of those versions. Without one, someone opens every build by hand.

An SBOM describes exactly one release. Every software version gets its own SBOM (TR-03183-2, section 3.1).

What does an SBOM contain?

In Germany the BSI's TR-03183-2 describes which fields an SBOM should carry; it is a technical guideline without force of law, and the CRA does not name it. For the SBOM itself it requires creator and timestamp. For each component it lists ten mandatory fields (section 5.2.2); unique identifiers such as CPE or purl are also mandatory where they exist (5.2.4). The most important fields are below. The CRA itself names no fields; it requires a commonly used, machine-readable format and at least the top-level dependencies.

Name and version
The name the creator gave the component and its version identifier. Without a version no vulnerability can be matched.
Creator
Who created and maintains the component, as an e-mail address or URL.
Identifier
A unique identifier such as CPE or Package URL (purl). Tools use it to match the component against vulnerability databases.
Dependencies
Which components a component contains or needs, and whether that list is complete.
Licence and hash
The licences under which the component may be used, and the SHA-512 of the delivered file.

What does an SBOM look like? An example

ST ships a CycloneDX SBOM with its STM32CubeF4 software package. The commands below run jq on exactly that file. The first shows what the SBOM describes, the second one component, the third how many of the 74 components carry a version.

Every component has a version, though 57 of the 74 carry 1.28.2 while the file describes package 1.28.3. Only one carries an identifier for matching, a CPE or purl. What that means for vulnerability matching, and which libraries the file leaves out, is in the article on checking an existing SBOM.

Format and the package the SBOM describes
jq -r .specVersion,.metadata.component.name,.metadata.component.version sbom_cdx.json

Output

1.5
STM32CubeF4
1.28.3
One component: type, name, version
jq '.components[] | select(.name=="CMSIS_5") | {type, name, version}' sbom_cdx.json

Output

{
  "type": "library",
  "name": "CMSIS_5",
  "version": "5.9.0"
}
74 components with a version, 1 with a CPE or purl
jq '[.components[] | select(.version)] | length' sbom_cdx.json; jq '[.components[] | select(.cpe or .purl)] | length' sbom_cdx.json

Output

74
1

Which SBOM formats are there?

Two formats have prevailed. CycloneDX exists as JSON, XML and Protocol Buffers, SPDX 3.0.1 as JSON-LD. The TR-03183-2 requires JSON or XML, CycloneDX from 1.6 or SPDX from 3.0.1 (section 4). Which one fits your process better is in the comparison of the two formats.

FormatOrigin and status
CycloneDXStandardised as Ecma standard ECMA-424. Current version 1.7 of 21 October 2025.
SPDXFrom the Linux Foundation. SPDX 2.2.1 is standardised as ISO/IEC 5962:2021; the current release is SPDX 3.0.1 of 17 December 2024.

What types of SBOM are there?

The explanatory annex of the TR-03183-2 distinguishes six types by when the SBOM is created (section 8.4). For firmware two matter most: the build SBOM, created while building, and the analysed SBOM, read from the finished binary.

TypeCreated from
Design SBOMThe planned components.
Source SBOMSource files and their dependencies.
Build SBOMThe build process, at the linker run.
Analysed SBOMAnalysis of executables, packages or images after the build.
Deployed SBOMThe software installed on a system.
Runtime SBOMThe running system.

Who has to create an SBOM?

Manufacturers of products with digital elements placed on the EU market from 11 December 2027. The CRA requires the SBOM as part of vulnerability handling (Annex I Part II(1)). It belongs in the technical documentation; you do not have to publish it.

Entities under NIS2 in Germany must secure their supply chain and manage vulnerabilities in the systems they acquire and maintain, under section 30(2) sentence 2 no. 4 and 5 of the BSI Act (BSIG). The law does not name the SBOM there. A bill of materials for the devices an operator runs is still the direct way to know which components a new vulnerability hits.

How do I get an SBOM for firmware without source code?

Bought-in firmware and old builds often come without source code. The SBOM is then read from the binary itself, as an analysed SBOM: components and versions come from strings, symbols and package data in the image. How that works for Linux images and microcontroller firmware is in the articles on SBOMs without source code and on the approaches compared.

Can this run automatically?

LegacyMind reads the components from the file you ship: from Linux images, from ELF and AXF builds for microcontrollers and from supplier SBOMs. Every component with an evidenced version is matched against the vulnerability sources. You export the SBOM as CycloneDX 1.6 or as SPDX 2.3 and 3.0.1 JSON.

Questions

Do I have to publish the SBOM?

No. Under the CRA it belongs in the technical documentation. The market surveillance authority can request it on a reasoned request.

How often does an SBOM have to be renewed?

With every software version. The TR-03183-2 provides for a separate SBOM for each version (section 3.1), because every update can change components and versions.

Is the SBOM my supplier ships enough?

Only if it names every built-in component with version and identifier. In the example above, one of 74 components carries an identifier for matching. How to check a supplier SBOM is in the article on that.

Sources

  1. [1]Regulation (EU) 2024/2847, Cyber Resilience Act, Official Journal
  2. [2]BSI: Technical Guideline TR-03183
  3. [3]CycloneDX Specification
  4. [4]SPDX Specifications
  5. [5]BSI Act, section 30 (gesetze-im-internet.de, German)
  6. [6]sbom_cdx.json in STM32CubeF4 v1.28.3

Check your own image

Upload one firmware image, an AXF or a supplier SBOM in your own LegacyMind account. Report and SBOM within three working days, NDA on request. The app and the reports are in German; questions in English are welcome.