Cybersecurity29. August 202615 min

BSI TR-03183 Part 2: The SBOM data fields the BSI actually demands — and which SBOMs fail an audit

Your scanner produces SBOMs. The question is not whether you have one, but whether it fills the mandatory data fields of BSI TR-03183-2 version 2.1.0 — and whether it reaches deep enough to answer "are we affected?" within 24 hours from 11 September 2026 onwards.

R&D

R&D Team

Alev-B Research & Development

In short

BSI TR-03183 Part 2 is published in version 2.1.0 and requires SBOMs in JSON or XML, valid against CycloneDX version 1.6 or higher or SPDX version 3.0.1 or higher, in officially released versions only. Every SBOM needs a creator and a timestamp; every component needs ten mandatory fields, including a SHA-512 hash and the executable, archive and structured properties.

Formats and versions: what the BSI accepts — and what stopped counting in February 2026

Part 2 of the Technical Guideline BSI TR-03183 is titled "Software Bill of Materials (SBOM)" and is published in version 2.1.0 (see https://www.bsi.bund.de/dok/TR-03183). The document history inside the guideline dates that version to 20 August 2025. It is therefore the only version that may currently be used to generate new SBOMs — more on that below.

Section 4 of the guideline is unusually short and unusually firm: a newly generated or updated SBOM MUST be in JSON or XML format and be a valid SBOM according to one of the following specifications in one of the specified versions — CycloneDX version 1.6 or higher, or System Package Data Exchange (SPDX) version 3.0.1 or higher. Only officially released versions of those specifications MUST be used — see section 4 of the original English document (see https://www.bsi.bund.de/dok/TR-03183-en).

The step from 2.0.0 to 2.1.0 raised the bar for both formats: CycloneDX from 1.5 to 1.6, SPDX from 2.2.1 to 3.0.1. For SPDX that is not a version increment but a change of format — SPDX 3.0 is a new information model, not a point release of the 2.x line. Shipping SPDX 2.3 today because the tool emits it by default means shipping an artefact this guideline does not accept, however complete its content may be.

One practical trap sits in the navigation of the specification sites. The SPDX specifications page lists "3.0" as the current version and notes that the specification is an international open standard (ISO/IEC 5962:2021, see https://spdx.dev/use/specifications/). The version the BSI requires, 3.0.1, is published at https://spdx.github.io/spdx-spec/v3.0.1/ instead. Checking only the overview page leaves you believing 3.0 is the end of the line. CycloneDX is easier: the specification overview states version 1.7 with a release date of 21 October 2025, published as ECMA-424 on 10 December 2025 (see https://cyclonedx.org/specification/overview/). Since the guideline asks for "1.6 or higher", 1.7 qualifies — as an officially released version.

Section 7 of the guideline governs the transition: the most recent version available on the BSI website MUST be used. The immediately preceding version MAY still be applied for up to six months after a new most recent version has been issued. Version 2.1.0 is dated 20 Aug 2025 — so the grace period for version 2.0.0 arithmetically ended on 20 Feb 2026. Generating against 2.0.0 today no longer produces a compliant artefact.

CriterionCycloneDXSPDXSource
Minimum version accepted by the BSIVersion 1.6 or higherVersion 3.0.1 or higherTR-03183-2 v2.1.0, section 4
Permitted serialisationJSON or XMLJSON or XMLTR-03183-2 v2.1.0, section 4
Version statusOfficially released versions onlyOfficially released versions onlyTR-03183-2 v2.1.0, section 4
Currently published version1.7, released 21 Oct 2025, published as ECMA-424 on 10 Dec 20253.0.1, published at spdx.github.io/spdx-spec/v3.0.1/cyclonedx.org and spdx.github.io
Previous guideline version requiredVersion 1.5 or higherVersion 2.2.1 or higherTR-03183-2 v2.1.0, document history for 2.1.0
BSI-specific additional fieldsDedicated namespace bsi:component, taxonomy v0.1.2Mapped via software_additionalPurpose plus a comment fieldgithub.com/BSI-Bund/tr-03183-cyclonedx-property-taxonomy
Vulnerability data inside the SBOMSupported by the format, prohibited by the BSISupported by the format, prohibited by the BSITR-03183-2 v2.1.0, section 8.1.14

The mandatory fields: two for the SBOM, ten for every single component

Section 5.2 of the guideline distinguishes three categories: required data fields (MUST), additional data fields that must be provided if they exist and the format specification accommodates them, and optional fields. That gradation is precisely the difference between an SBOM that works as evidence and one that merely looks like evidence.

For the SBOM as a whole there are only two mandatory fields — and generic scanner output misses both with striking regularity. The creator of the SBOM must be given as the email address of the entity that produced it; where no email address is available it MUST be a URL, for instance the creator homepage or the project page. The timestamp denotes the date and time of the SBOM data compilation according to the format specification, and the guideline explicitly recommends using timestamps in UTC ("Zulu" time) only. A tool name in the metadata block is not a creator in the sense of the guideline.

At component level the list grows: for each component included in the SBOM, at least ten fields must be provided. Three of them exist as a native field in neither format and are therefore expressed through the BSI taxonomy as key-value pairs — which is exactly where most artefacts generated today fail, because no standard tool sets those properties on its own.

On top of that the guideline requires four further fields per component wherever they exist and the format specification allows them: the source code URI, the URI of the deployable form of the component, other unique identifiers such as CPE or Package URL (purl), and the original licences. For the SBOM itself the same category adds the SBOM URI. Optional are the effective licence, a hash value of the source code and the URL of the component creator security.txt.

Mandatory fieldLevelWhat actually belongs in it
Creator of the SBOMSBOMEmail address of the generating entity; alternatively a URL (homepage or project page)
TimestampSBOMDate and time of data compilation per the format specification; UTC recommended
Component creatorComponentEmail address of the entity that created and, where applicable, maintains the component; alternatively a URL
Component nameComponentName assigned by the creator; where no name is assigned, the actual filename
Component versionComponentExisting identifiers must not be changed; semantic or calendar versioning recommended; without a version, the file modification date per RFC 3339 section 5.6
Filename of the componentComponentThe actual filename, not the file system path
DependenciesComponentEnumeration of all directly depended-on or contained components — with the completeness of that enumeration clearly indicated
Distribution licencesComponentLicence(s) under which a licensee may use the component; as an SPDX identifier or expression
Hash of the deployable componentComponentCryptographically secure checksum of the shipped file as SHA-512
Executable propertyComponentValues "executable" or "non-executable"; in CycloneDX via bsi:component:executable
Archive propertyComponentValues "archive" or "no archive"; in CycloneDX via bsi:component:archive
Structured propertyComponentValues "structured" or "unstructured"; where content is mixed, "structured" MUST be used

The real charge: how deep the SBOM has to reach

The Cyber Resilience Act itself is remarkably restrained on this point. Annex I Part II point (1) requires manufacturers to identify and document vulnerabilities and components contained in products with digital elements, including by drawing up a software bill of materials in a commonly used and machine-readable format covering at the very least the top-level dependencies of the products (see https://eur-lex.europa.eu/eli/reg/2024/2847/oj). "At the very least the top level" is a floor that practically every modern build tool clears.

TR-03183-2 starts at that floor and lifts it considerably. Section 5.1 requires, for a compliant SBOM, recursive dependency resolution — at least for each component included in the scope of delivery, on each path downward, at least up to and including the first component that lies outside the scope of delivery. The guideline states the reason explicitly: without identifying that first level outside the scope of delivery, the information needed to chain two SBOMs correctly is missing — for example the SBOM of the delivery item and the SBOM of the environment in which it is executed.

Two further rules from the same section carry more operational force than their length suggests. First: if the primary component depends on multiple instances of a component with differing meta-information, all those instances MUST be listed separately with their individual meta-information — and the appendix states that this applies even when only the licence information differs. Second: SBOMs of used components MAY be referenced instead of merged, but if and only if they are themselves compliant with the guideline. And responsibility for the availability of referenced SBOMs rests with the provider of the SBOM of the primary component.

That last point is a supplier clause in technical clothing. Whoever references a supplier SBOM is answerable for its being retrievable at audit time — not the supplier. That belongs in the contract, not in the pipeline. How to hook this requirement into supplier evaluation in a structured way is covered by our vendor and third-party assessment; the corresponding process artefacts are produced with the Governance Document Builder.

The CRA requires at least the top level of dependencies. TR-03183-2 requires recursive resolution up to and including the first component outside the scope of delivery — on every path. Choosing the guideline as your implementation yardstick means deliberately choosing a requirement above the legal minimum.

Six SBOM artefacts that will not survive a TR-03183-2 review

The following list is not a collection of theoretical edge cases but the direct inversion of the normative requirements in sections 4, 5 and 8 of the guideline. Every item can be checked against an existing SBOM in minutes — with jq, a schema validator and a look at the build configuration.

  1. 1The SBOM contains vulnerability data. Section 8.1.14 explicitly requires not to include vulnerability information in an SBOM, even where the format specification supports it — the rationale being that vulnerability data changes over time while the core information of an SBOM is static. The recommended format for distributing vulnerability information is CSAF, including VEX as a profile. CycloneDX can represent vulnerabilities natively; here that capability turns into a defect.
  2. 2The executable, archive and structured properties are missing. These three mandatory fields exist natively in neither format. In CycloneDX they are set via the BSI taxonomy as the properties bsi:component:executable, bsi:component:archive and bsi:component:structured, valid only in components[]/properties and metadata/component/properties, and each MUST occur exactly once per component (see https://github.com/BSI-Bund/tr-03183-cyclonedx-property-taxonomy). In SPDX 3.0.1 the mapping runs through software_additionalPurpose with an explanatory comment field.
  3. 3The hash is not SHA-512, or refers to the wrong artefact. What is required is the cryptographically secure checksum of the deployed or deployable component as a file on a mass storage device, as SHA-512. A SHA-1 or SHA-256 value taken from a package manager lockfile is a different thing from the hash of the file you actually ship.
  4. 4The licence appears as full text instead of an identifier. Section 6.1 requires licences to be named by the appropriate SPDX licence identifier or a licence expression built on one. Both formats allow licence text to be embedded — and that MUST NOT be used as a substitute for the identifier. Where no suitable identifier exists at SPDX, the Scancode LicenseDB must be consulted next (prefix LicenseRef-scancode-), and only then a custom LicenseRef namespace.
  5. 5The dependency list does not say whether it is complete. For dependencies the guideline requires not only the enumeration but a clear indication of the completeness of that enumeration. CycloneDX offers compositions with aggregate completeness values, SPDX the completeness attribute on relationships. Leaving that field empty ships a list that says nothing about its own scope.
  6. 6The SBOM is poorer than the build. A compliant SBOM MUST contain the same information as was available during the build process, or equivalent information where no build process exists. An SBOM generated afterwards from the finished container image — in the classification of the guideline an "analysed SBOM" or 3rd-party SBOM — loses precisely the information that only existed inside the build. That does not make it automatically inadmissible, but it does have to carry that proof.

What the build pipeline must emit — and why the linker matters more than the compiler

Appendix 8.4 of the guideline distinguishes six SBOM classes by the point in the lifecycle at which they are created: design, source, build, analysed, deployed and runtime. That distinction is not taxonomy for its own sake but a statement about which data is available at all. A design SBOM describes planned components that need not yet exist. A runtime SBOM captures only components loaded at runtime along with their external calls. Between them sits the build SBOM, and it is the only class that can structurally satisfy the claim "the same information as in the build".

For the build SBOM the guideline makes three technical statements that translate directly into pipeline work. First: in order to capture pre-existing executable, binary components such as precompiled code, creating a build SBOM focuses on the linker run for translated code, not the compiler run. Second: in order for hash values to identify components unambiguously, reproducible builds have to be employed. Third: in the case of interpreted code only the source code exists, hence each executable file has to be listed as a component and the interpreter has to be specified as a dependency as far as reasonably possible.

The second statement is the expensive one. Reproducible builds are not a configuration switch but a project: deterministic timestamps, sorted file order, stripped build paths, pinned toolchains. Without them you can still emit hash values, but they no longer identify the component unambiguously — which removes the very property that made the hash a mandatory field in the first place.

The third statement hits every Python, JavaScript, Ruby and PHP project, meaning the bulk of modern enterprise software. The obvious reading — list the packages from the lockfile — does not cover the requirement, because for interpreted code every executable file counts as a component and the interpreter has to be named as a dependency on top. That is a different notion of granularity from the one npm- or pip-based generators work with.

In addition, section 8.1.15 recommends digitally signing the SBOM so recipients can verify its authenticity — phrased as "ideally", not as a MUST. In practice it is still the cheapest measure on the whole list, because it binds provenance to the artefact rather than to a ticket system. Where your security programme stands overall, before you rebuild individual pipeline steps, is clarified in structured form by the Cybersecurity Assessment.

The BSI namespace and the licence chain: two details with long shadows

To help produce SBOMs compliant with Part 2, the BSI created its own CycloneDX namespace and registered it with CycloneDX; the taxonomy is published in the BSI GitHub account (see https://www.bsi.bund.de/dok/TR-03183). The repository carries the taxonomy at version 0.1.2, based on TR-03183-2 v2.1.0, under the Apache 2.0 licence (see https://github.com/BSI-Bund/tr-03183-cyclonedx-property-taxonomy).

The bsi:component namespace currently comprises five active properties: executable, archive and structured as flags each required exactly once per component, filename for the actual filename with at most one occurrence per component, and effectiveLicence for the effective licence from the perspective of the SBOM creator. There is also the deprecated property associatedLicences, which goes back to TR-03183-2 v2.0.0. Anyone still running an unchanged 2025 SBOM generation may well be writing the deprecated field — technically valid, but obsolete against the guideline.

The licence model of the guideline is deliberately cut differently from that of the formats, and that is a source of error in migration projects. Section 8.1.13 clarifies that CycloneDX and SPDX define "declared" and "concluded license" differently and that both focus on the manner in which the information was obtained. TR-03183-2 instead looks at the licence situation from the perspective of the SBOM creator in both directions of the supply chain: upstream to the original source and downstream as the distribution licence. The classic example named is Qt, where the primary licensee has to choose between GPL and a proprietary licence — and only the choice actually made can be handed further down.

Practically that means the mapping between the guideline fields and the licence fields of the formats is not one-to-one and must not be automated as if it were. Since version 2.1.0 the guideline provides a written mapping recommendation in appendix 8.2, including JSON examples for both formats. Inventing your own mapping produces two generations of SBOMs that cannot later be compared.

Why all of this hangs on 11 September 2026

The Cyber Resilience Act, Regulation (EU) 2024/2847, applies in principle from 11 December 2027 under Article 71. Article 14, however, applies from 11 September 2026, and Chapter IV with Articles 35 to 51 from 11 June 2026 (see https://eur-lex.europa.eu/eli/reg/2024/2847/oj). For an actively exploited vulnerability, Article 14 requires an early warning without undue delay and in any event within 24 hours of becoming aware of it, then a vulnerability notification within 72 hours, and a final report no later than 14 days after a corrective or mitigating measure is available.

The 24-hour deadline is not a documentation deadline but an analysis deadline. Between the disclosure of a vulnerability in a widely used library and the early warning sits exactly one question: is this version of this component inside any of our shipped products, and in which ones? Without a dependable, version-accurate SBOM that question cannot be answered in 24 hours — with one it becomes a query. That is the real reason SBOM quality is not a compliance topic but a response capability.

What sharpens this further is that Article 14 knows no grandfathering. Products placed on the market before 11 December 2027 are subject to the essential requirements only where they undergo a substantial modification — but by way of derogation, the obligations laid down in Article 14 apply to all products with digital elements within the scope of the regulation that were placed on the market before that date. We described the general frame of this reporting duty in Cyber Resilience Act: the 24-hour reporting duty from September 2026, and the entry point into the guideline series in BSI TR-03183-1: the official entry aid into the Cyber Resilience Act.

The SBOM appears in three further places in the CRA that roadmaps routinely miss. Annex VII point 2(b) counts it as part of the technical documentation, within the description of the vulnerability handling processes. Annex VII point 8 requires it to be supplied further to a reasoned request from a market surveillance authority, provided this is necessary to check compliance. And Article 13(25) allows market surveillance authorities to request SBOMs for a Union-wide dependency assessment, whose results ADCO reports to the NIS2 Cooperation Group. In addition, under Article 13(24) the Commission may specify the format and elements of the SBOM by implementing acts — until it does, TR-03183-2 is the most concrete available interpretation in the German-speaking market.

Whether your reporting processes carry the deadline is tested by our free CRA reporting readiness check in about three minutes — no login, with a result that drops straight into a steering deck. The full toolkit for the accompanying governance artefacts sits in the template overview.

In the CRA the SBOM is not an end in itself but the precondition for answering the impact question at all within the 24-hour deadline of Article 14. An SBOM without version accuracy and without recursive depth extends the analysis exactly when there is no time for it.

Key Takeaways

  • BSI TR-03183-2 is published in version 2.1.0 (document history: 20 Aug 2025) and accepts only JSON or XML per CycloneDX 1.6 or higher or SPDX 3.0.1 or higher, in officially released versions only.
  • Under the transition rule in section 7, the preceding version 2.0.0 could be used only for six months after 2.1.0 was issued — arithmetically until 20 Feb 2026.
  • Two fields are mandatory for the SBOM itself (creator as email or URL, timestamp of data compilation, UTC recommended) and ten for each component, including the SHA-512 hash of the deployable file and the executable, archive and structured properties.
  • Three mandatory fields exist natively in neither format and are expressed in CycloneDX through the registered BSI namespace bsi:component, taxonomy currently at version 0.1.2.
  • Vulnerability data explicitly does not belong in an SBOM — the recommended vehicle is CSAF, including VEX as a profile.
  • The CRA requires at least the top-level dependencies in Annex I Part II point (1); TR-03183-2 requires recursive resolution up to and including the first component outside the scope of delivery.
  • Referencing a third-party SBOM instead of merging it makes you answerable for its availability — a contract question, not a pipeline setting.

Frequently Asked Questions

Under section 4 of the guideline in version 2.1.0, a newly generated or updated SBOM must be in JSON or XML format and valid against CycloneDX version 1.6 or higher or SPDX version 3.0.1 or higher. Only officially released versions of those specifications may be used. CycloneDX 1.7 (released 21 Oct 2025) meets that condition; SPDX 2.3 does not.

Two for the SBOM itself: the creator as an email address — alternatively a URL — and a timestamp of data compilation, recommended in UTC. Ten for each component: component creator, name, version, filename, dependencies with an indication of completeness, distribution licences, the SHA-512 hash of the deployable component, and the three properties executable, archive and structured.

Because section 8.1.14 of the guideline explicitly requires not to include vulnerability information in an SBOM, even where the format specification supports it. The rationale: vulnerability data changes over time while the core information of an SBOM is static and would otherwise be propagated unnecessarily along the supply chain with every update. The recommended format for distributing vulnerability information is CSAF, including VEX as a profile.

Section 5.1 requires recursive dependency resolution at least for each component in the scope of delivery, on each path downward, at least up to and including the first component outside the scope of delivery. The CRA itself only requires at the very least the top-level dependencies in Annex I Part II point (1). The guideline therefore deliberately sits above the legal minimum.

Three mandatory fields of the guideline — the executable, archive and structured properties — exist natively in neither format. The BSI registered its own CycloneDX namespace for them and published the taxonomy on GitHub, currently at version 0.1.2. The properties bsi:component:executable, bsi:component:archive and bsi:component:structured must occur exactly once per component and are valid in components[]/properties and metadata/component/properties.

Not without qualification. The guideline requires a compliant SBOM to contain the same information as was available during the build process, or equivalent information where no build process exists. An artefact analysed after the fact — in the classification of the guideline an analysed SBOM or 3rd-party SBOM — typically loses exactly the information that existed only inside the build. For the build SBOM the guideline adds: focus on the linker run rather than the compiler run, and reproducible builds as the precondition for unambiguous hash values.

For interpreted code only the source code exists. The guideline therefore requires each executable file to be listed as its own component and the interpreter to be specified as a dependency as far as reasonably possible. A plain package list from the lockfile works with a different notion of granularity and does not cover that requirement.

The provider of the SBOM of the primary component. The guideline permits SBOMs of used components to be referenced instead of merged, but only if they are themselves compliant — and it explicitly assigns responsibility for the availability of the referenced SBOM to the referencing party, for example by keeping an own copy. That is a contract clause, not a pipeline setting.

No. The BSI provides the TR-03183 series as guidance without mandatory or binding character; it cannot be used for a presumption of conformity and will be replaced by the corresponding harmonised European standards once those are available. What is mandatory is the CRA itself. As long as the Commission has not exercised its power under Article 13(24) to specify the format and elements of the SBOM by implementing acts, TR-03183-2 remains the most concrete available interpretation.

BSI TR-03183SBOMCycloneDXSPDXCyber Resilience ActSoftware Supply Chain

Ready for Your Assessment?

Use our interactive templates to measure your IT organization's maturity — with automatic scores, AI-powered recommendations, and professional PDF reports.