BSI TR-03183 : niveaux de qualité SBOM et conformité CRA

Le règlement sur la cyberrésilience impose un Software Bill of Materials, mais en laisse le détail technique à d'autres. Il exige un SBOM lisible par machine couvrant au moins les dépendances de premier niveau du produit, et c'est à peu près là que s'arrêtent les spécifications du règlement. Aucune liste de champs. Aucun plancher de version de format. Aucun schéma pour les avis de sécurité. L'Office fédéral allemand de la sécurité des systèmes d'information (BSI) a comblé cette lacune avec la BSI TR-03183, un guide technique en trois parties qui désigne des versions de format précises, liste l'ensemble des champs requis et associe la génération de SBOM à la publication d'avis de vulnérabilité. Traitez-la comme la spécification pratique qui sous-tend l'obligation légale, et non comme un règlement concurrent.

Synthèse

  • La BSI TR-03183 est publiée en trois parties : Part 1 (exigences générales de cyberrésilience au titre du CRA), Part 2 (SBOM), Part 3 (rapports et notifications de vulnérabilités). La Part 2 v2.1.0, publiée le 20 août 2025, est le guide SBOM en vigueur.
  • La TR-03183 exige CycloneDX version 1.6 ou supérieure, ou SPDX version 3.0.1 ou supérieure. Tout autre format est non conforme.
  • La spécification organise les champs de données en trois catégories : Required (toujours obligatoire), Additional (obligatoire lorsque la donnée existe) et Optional. La v2.1.0 ne comporte aucun niveau « Basic », « Standard » ou « Comprehensive ».
  • CSAF 2.0 est le format recommandé pour les avis de vulnérabilité, et la TR-03183 exige la balise CSAF: dans votre security.txt lorsque vous publiez des documents CSAF. VEX n'est jamais imposé ; il est uniquement décrit comme un profil CSAF.
  • Le BSI considère la TR-03183 comme une mesure provisoire : elle sera remplacée une fois publiées les normes harmonisées CEN/CENELEC de l'UE. Dans l'intervalle, c'est le guide le plus détaillé disponible.
  • Les critères de conformité sont les suivants : CycloneDX 1.6 au minimum, hachages SHA-512 pour chaque composant déployable, métadonnées de créateur et d'horodatage au niveau du document SBOM, et une chaîne d'avis CSAF.
v2.1.0
Part 2 actuelle
Publiée le 2025-08-20
Format minimal
Ou SPDX 3.0.1
SHA-512
Hachage requis
Pour chaque composant
3 parties
Structure du document
Général, SBOM, Vulnérabilités

Présentation de la BSI TR-03183

Le BSI est l'agence nationale de cybersécurité allemande. Son guide technique TR-03183 porte le titre complet Cyber Resilience Requirements for Manufacturers and Products, avec des parties numérotées et versionnées de façon indépendante. Le guide cible les fabricants qui se préparent au règlement sur la cyberrésilience, en traduisant les obligations de l'Annexe I du CRA en exigences techniques concrètes et vérifiables.

Les trois parties du document, avec les versions en vigueur au moment de la rédaction :

Partie Version Publiée Périmètre
Part 1 v0.10.0 2025-09-12 Exigences générales de cyberrésilience au titre du CRA, issues de l'Annexe I, de l'Annexe II et de l'Annexe VII
Part 2 v2.1.0 2025-08-20 Software Bill of Materials (SBOM) : formats, champs, génération et mises à jour
Part 3 v1.0.0 2025-08-20 Rapports et notifications de vulnérabilités, notamment CVD, security.txt et avis CSAF

Le BSI présente le guide comme un instrument transitoire :

"This Technical Guideline will be superseded in the current form as soon as its content is covered by the corresponding standardisation deliverables under the aforementioned standardisation request."

Cette phrase résume la manière dont vous devez appréhender la TR-03183. Il s'agit de la lecture faite par le BSI de ce à quoi devrait ressembler un programme SBOM et de vulnérabilités conforme au CRA, tant que les normes harmonisées CEN/CENELEC sont encore à l'état de projet. Lorsque celles-ci seront publiées, les normes harmonisées prévaudront ; dans l'intervalle, la TR-03183 est la spécification publiquement disponible la plus détaillée, alignée sur l'Annexe I du CRA.

graph LR
    A[BSI TR-03183]
    A --- P1[Partie 1
Exigences générales
du règlement] A --- P2[Partie 2
SBOM] A --- P3[Partie 3
Rapports de
vulnérabilités] P2 --- F1[CycloneDX 1.6
ou SPDX 3.0.1] P2 --- F2[Champs obligatoires, additionnels
et optionnels] P3 --- C1[CSAF 2.0
avis] P3 --- C2[Balise CSAF dans security.txt] style A fill:#008080,stroke:#005f5f,color:#fff style P1 fill:#e8f4f8,stroke:#008080,color:#333 style P2 fill:#e8f4f8,stroke:#008080,color:#333 style P3 fill:#e8f4f8,stroke:#008080,color:#333 style F1 fill:#f8fafc,stroke:#008080,color:#333 style F2 fill:#f8fafc,stroke:#008080,color:#333 style C1 fill:#f8fafc,stroke:#008080,color:#333 style C2 fill:#f8fafc,stroke:#008080,color:#333

Les lacunes du CRA comblées par la TR-03183

Vous pouvez lire les clauses SBOM du CRA de bout en bout sans apprendre quels champs doivent figurer dans votre document, quelle version de format satisfait à l'obligation, ni comment publier les avis qui en découlent. La TR-03183 comble trois lacunes précises.

Lacune dans le texte du CRA Ce que la TR-03183 précise
Le CRA exige un SBOM sans lister aucun champ de données (Annexe I partie II (1)) La TR-03183 énumère les champs Required, Additional et Optional, tant au niveau du document SBOM qu'au niveau de chaque composant
Le CRA indique que les formats doivent être « couramment utilisés et lisibles par machine » sans en nommer aucun La TR-03183 les nomme : « CycloneDX, version 1.6 or higher » ou « System Package Data Exchange (SPDX), version 3.0.1 or higher »
Le CRA exige le signalement au CSIRT coordinateur et à l'ENISA des vulnérabilités activement exploitées, sans préciser de format public pour les avis (Article 14) La TR-03183 aligne les avis sur CSAF 2.0 et renvoie à la norme ISO/IEC 20153:2025

Pour le détail des obligations CRA associées, consultez les exigences SBOM du CRA. Pour l'horloge de signalement de l'Article 14 qui rend les données de composants actuelles opérationnellement importantes, consultez le signalement des vulnérabilités et incidents CRA.

Champs Required, Additional et Optional

La TR-03183 v2.1.0 n'utilise pas les termes « Basic », « Standard » ou « Comprehensive ». Tout schéma ou résumé de fournisseur qui présente trois « niveaux de qualité » nommés avec ces étiquettes introduit une structure absente de la spécification. Le modèle de conformité de la v2.1.0 est binaire au niveau du champ : un champ est Required (toujours présent), Additional (obligatoire lorsque la donnée existe) ou Optional.

Les trois catégories de champs :

Catégorie Signification Exemples
Required au niveau du SBOM Champs au niveau du document qui DOIVENT toujours être présents Créateur du SBOM, Horodatage
Required au niveau de chaque composant Champs au niveau du composant qui DOIVENT toujours être présents Nom du composant, Version du composant, Licences de distribution, Hachage (SHA-512), Dépendances envers d'autres composants, Nom de fichier, Propriété exécutable, Propriété archive, Propriété structurée, Créateur du composant
Additional au niveau de chaque composant Obligatoire si la donnée existe, à omettre sinon URI du code source, URI de la forme déployable du composant, Autres identifiants uniques (CPE, purl), Licences originales
Optional au niveau de chaque composant PEUT être inclus Licence effective, Hachage du code source, URL du security.txt

La TR-03183 impose également la résolution récursive des dépendances : vous résolvez les dépendances de chaque composant inclus dans le périmètre de livraison, et non uniquement les dépendances immédiates. C'est sa réponse au plancher vague des « dépendances de premier niveau » fixé par l'Annexe I partie II (1) du CRA : parcourez l'arborescence complète.

La v2.1.0 ne comporte aucune liste de niveaux « Basic / Standard / Comprehensive »

Des synthèses publiques antérieures (dont certaines émanant des propres communications du BSI) présentaient la TR-03183 comme définissant trois niveaux de qualité portant ces noms. La v2.1.0 n'utilise pas cette taxonomie. Si votre liste de vérification d'audit fait référence à « Niveau 1 », « niveau Comprehensive » ou à des termes similaires, elle renvoie à un modèle qui ne correspond plus à la spécification publiée. Mettez-la à jour pour adopter les catégories Required / Additional / Optional.

Exigences champ par champ

Les champs les plus fréquemment demandés par les équipes, avec leur catégorie v2.1.0.

Champ Catégorie Notes
Créateur du SBOM Required (niveau SBOM) E-mail ou URL du producteur
Horodatage Required (niveau SBOM) ISO 8601
Nom du composant Required Toujours renseigné pour chaque entrée
Version du composant Required Version exacte, pas une plage
Créateur du composant Required Correspond à « Supplier » dans les libellés antérieurs
Nom de fichier du composant Required Souvent absent des sorties par défaut des outils
Dépendances envers d'autres composants Required Résolues récursivement
Licences de distribution Required Licences telles que distribuées
Hachage du composant déployable Required SHA-512
Propriété exécutable Required Booléen : le composant est-il exécutable ?
Propriété archive Required Booléen : le composant est-il une archive ?
Propriété structurée Required Booléen : indicateur de charge utile structurée
URI du code source Additional Obligatoire lorsque connu
URI du composant déployable Additional Obligatoire lorsque connu
Autres identifiants uniques (CPE, purl) Additional Obligatoire lorsque disponible ; pas inconditionnellement requis
Licences originales Additional Licence amont avant distribution
Licence effective Optional Résultat de la réconciliation des licences
Hachage du code source Optional Hachage du code source avant compilation
URL du security.txt Optional Pointeur vers le point d'entrée de divulgation des vulnérabilités

La ligne qui surprend le plus les équipes est Autres identifiants uniques (CPE, purl). Les équipes traitent les package URLs comme la clé primaire d'un SBOM. Sous la TR-03183 v2.1.0, purl relève de la catégorie Additional, obligatoire uniquement lorsque la donnée existe. L'identifiant de composant inconditionnel est le hachage SHA-512 de l'artefact déployable, associé au nom et à la version. Si vos outils ne peuvent pas calculer de purl pour une bibliothèque interne privée, cela ne compromet pas la conformité. S'ils ne peuvent pas calculer le SHA-512, si. Consultez les erreurs SBOM courantes pour les lacunes de champs associées.

Prise en charge de CycloneDX et SPDX

La TR-03183 désigne les formats acceptés et les versions minimales :

"A newly generated or updated SBOM MUST be in JSON- or XML-format and a valid SBOM according to one of the following specifications in one of the specified versions: CycloneDX, version 1.6 or higher"

"System Package Data Exchange (SPDX), version 3.0.1 or higher"

Le texte en anglais de BSI étant la seule version officielle, voici une reformulation de ces deux exigences : tout SBOM nouvellement généré ou mis à jour doit être au format JSON ou XML, et valide selon l'une des spécifications suivantes dans l'une des versions indiquées : CycloneDX version 1.6 ou supérieure, ou SPDX version 3.0.1 ou supérieure.

Les notes de mise à jour de la v2.1.0 documentent également le chemin de migration : la v2.0.0 (2024-09-20) a fait passer CycloneDX de 1.4 à 1.5 et SPDX de versions antérieures à 2.2.1. La v2.1.0 (2025-08-20) a fait passer CycloneDX de 1.5 à 1.6 et SPDX de 2.2.1 à 3.0.1.

La conséquence concrète est que les outils produisant des sorties CycloneDX 1.4 par défaut (encore fréquent dans les configurations CI plus anciennes) ne sont pas conformes à la v2.1.0. CycloneDX 1.6 a introduit un support affiné des actifs cryptographiques et du ML BOM ; SPDX 3.0.1 est une refonte majeure avec un nouveau modèle de charge utile. Votre base CI doit comporter un indicateur explicite --spec-version 1.6 ou son équivalent. Pour une comparaison des deux formats et de la maturité des outils, consultez CycloneDX vs SPDX.

Squelette CycloneDX 1.6 aligné sur la TR-03183, avec les champs Required au niveau du document renseignés :

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
  "version": 1,
  "metadata": {
    "timestamp": "2027-01-15T10:00:00Z",
    "tools": [
      { "vendor": "Example", "name": "syft", "version": "1.10.0" }
    ],
    "authors": [
      { "name": "Example GmbH security team", "email": "security@example.de" }
    ],
    "component": {
      "type": "firmware",
      "name": "SmartSensor Pro",
      "version": "2.4.1",
      "supplier": { "name": "Example GmbH", "url": ["https://example.de"] },
      "purl": "pkg:firmware/example/smartsensor-pro@2.4.1"
    }
  },
  "components": [
    {
      "type": "library",
      "name": "openssl",
      "version": "3.0.12",
      "purl": "pkg:generic/openssl@3.0.12",
      "licenses": [{ "license": { "id": "Apache-2.0" } }],
      "hashes": [
        { "alg": "SHA-512", "content": "ddaf35a193617aba..." }
      ],
      "supplier": { "name": "OpenSSL Software Foundation" },
      "properties": [
        { "name": "executable", "value": "true" },
        { "name": "archive", "value": "false" }
      ]
    }
  ],
  "dependencies": [
    {
      "ref": "pkg:firmware/example/smartsensor-pro@2.4.1",
      "dependsOn": ["pkg:generic/openssl@3.0.12"]
    }
  ]
}

Les entrées authors, timestamp et hashes SHA-512 sont les champs Required au niveau du document et du composant les plus souvent absents des configurations CI par défaut. Validez-les avec cyclonedx-cli validate --input-version 1.6 avant de considérer une sortie comme conforme à la TR-03183.

Relation entre TR-03183, CSAF et VEX

La TR-03183 traite ensemble les mécanismes SBOM et d'avis de vulnérabilité. La règle principale est simple : CSAF est recommandé pour les avis et opérationnellement requis pour la publication via security.txt. VEX n'est jamais imposé.

Mécanisme Force Signification
CSAF 2.0 comme format d'avis Recommandé « The recommended format for distributing vulnerability information is CSAF (including also VEX as a profile) »
Balise CSAF dans security.txt DOIT La déclaration security.txt référençant les documents CSAF doit commencer par la balise CSAF:
URI des métadonnées du fournisseur DEVRAIT Le fabricant DEVRAIT fournir l'URI de provider-metadata.json pour les documents CSAF
ISO/IEC 20153:2025 Référence La forme normative internationale de CSAF v2.0
VEX Informatif VEX apparaît comme un profil CSAF et comme l'un des plusieurs canaux « should » pour les informations de vulnérabilité

CSAF (Common Security Advisory Framework) version 2.0 est une norme OASIS publiée le 18 novembre 2022, avec l'Errata 01 émis le 26 janvier 2024. Elle définit un schéma JSON pour les avis de sécurité lisibles par machine. Les CERT allemands (BSI-CERT, CERT-Bund) publient et consomment CSAF par défaut ; l'éditeur Secvisogram et le validateur OASIS CSAF constituent les outils de référence.

Le lien avec l'Article 14 est plus nuancé que certains commentaires ne le laissent entendre. L'Article 14 du CRA fixe des délais de signalement à l'ENISA et au CSIRT coordinateur (24 heures pour l'alerte précoce, 72 heures pour la notification, et un rapport final 14 jours après la disponibilité d'un correctif pour une vulnérabilité activement exploitée, ou un mois après la notification pour un incident grave). Il ne précise pas de format public pour les avis. La TR-03183 comble cette lacune : une fois que vous avez notifié l'ENISA, le document CSAF que vous publiez sous votre security.txt est l'artefact opérationnel que vos clients ingèrent. Sans chaîne d'outillage CSAF en place avant le 11 septembre 2026, vous pouvez encore satisfaire à l'Article 14, mais vous ne satisferez pas aux attentes de langage contractuel et de security.txt qui découlent de la TR-03183.

VEX mérite une note distincte. La TR-03183 ne mentionne VEX que comme un profil CSAF et comme l'un des canaux possibles pour l'échange d'informations de vulnérabilité ; il n'est jamais requis. Du point de vue du CRA, VEX est utile pour les déclarations not_affected au niveau du composant, qui évitent la fatigue d'alerte lorsqu'un SBOM contient une bibliothèque avec une CVE connue qui n'est pas réellement accessible depuis votre code. Ce n'est pas une obligation de la TR-03183. Utilisez-le là où il apporte une valeur réelle.

La TR-03183 s'applique-t-elle en dehors de l'Allemagne ?

La TR-03183 est un guide technique national allemand émis par le BSI, et non un règlement à portée européenne ; elle ne revendique pas d'applicabilité en dehors de l'Allemagne.

En pratique, trois facteurs rendent la TR-03183 pertinente pour les fabricants établis en dehors de l'Allemagne.

Premièrement, le marché allemand est le plus grand de l'UE, et les acheteurs allemands y font de plus en plus explicitement référence dans leurs appels d'offres. Si vous vendez à un client allemand, attendez-vous à retrouver le vocabulaire de la TR-03183 dans ses questionnaires de sécurité et ses contrats fournisseurs.

Deuxièmement, aucune autre spécification alignée sur le CRA n'atteint à ce jour ce niveau de détail, de sorte que les fabricants se tournent vers la TR-03183 comme référentiel pratique.

Troisièmement, la TR-03183 s'articule autour des mêmes annexes du CRA que vous devez déjà respecter : l'Annexe I, l'Annexe II et l'Annexe VII. Une documentation préparée selon la TR-03183 produit les preuves techniques qu'une autorité de surveillance du marché de l'UE attend dans votre dossier Annex VII, SBOM compris. Consultez la documentation technique pour la liste complète du contenu de l'Annex VII.

Mettre en œuvre la TR-03183 volontairement est un choix d'ingénierie défendable, mais pas une obligation légale en dehors de l'Allemagne. Si vos produits ne comportent pas de composant matériel, cela s'arrête là. Dans le cas contraire, le même document peut accueillir vos entrées HBOM aux côtés des composants logiciels.

Questions fréquentes

Quels sont les éléments minimaux définis par la NTIA ?

Le document Minimum Elements For a Software Bill of Materials (SBOM) de la NTIA (National Telecommunications and Information Administration), publié le 12 juillet 2021 par le Département américain du Commerce, définit un socle de référence que la plupart des SBOM alignés sur le CRA dépassent largement. Les sept champs de données sont : Supplier Name (nom du fournisseur), Component Name (nom du composant), Version of the Component (version du composant), Other Unique Identifiers (autres identifiants uniques), Dependency Relationship (relation de dépendance), Author of SBOM Data (auteur des données SBOM) et Timestamp (horodatage). Le document définit également trois catégories de premier niveau : Data Fields (champs de données), Automation Support (prise en charge de l'automatisation) et Practices and Processes (pratiques et processus), cette dernière contenant « Known Unknowns » comme sous-élément, et non comme catégorie de premier niveau. La TR-03183 v2.1.0 ajoute aux sept éléments NTIA : le hachage SHA-512, le nom de fichier (Filename), ainsi que les propriétés Executable, Archive et Structured, et impose la résolution récursive des dépendances. La seule conformité NTIA ne satisfait pas à la TR-03183.

Qu'est-ce que CSAF 2.0 ?

CSAF (Common Security Advisory Framework) version 2.0 est une norme OASIS publiée le 18 novembre 2022 pour les avis de sécurité lisibles par machine : quelles versions de produits sont affectées, lesquelles sont corrigées, quelles mesures d'atténuation existent et comment les clients doivent réagir. La TR-03183 recommande CSAF pour la diffusion des informations de vulnérabilité, et exige la balise CSAF: dans votre security.txt dès lors que vous publiez des documents CSAF. CSAF 2.0 est également à la base de la norme internationale ISO/IEC 20153:2025. Les outils de référence sont l'éditeur Secvisogram et le validateur OASIS CSAF. Les CERT allemands publient et consomment CSAF par défaut ; si vous vendez à des clients allemands, traitez CSAF comme requis plutôt que facultatif.

VEX est-il requis pour chaque CVE ?

Non. La TR-03183 n'impose pas VEX. Elle présente VEX comme un profil CSAF et le traite comme un canal recommandé, et non requis, pour les informations de vulnérabilité. Du point de vue du CRA, VEX est utile pour les déclarations not_affected au niveau du composant, qui évitent la fatigue d'alerte lorsqu'un SBOM contient une bibliothèque avec une CVE connue qui n'est pas réellement accessible depuis votre code. CycloneDX 1.6 prend en charge les assertions VEX directement dans le document SBOM, sans nécessiter un fichier distinct par CVE. Émettre du VEX là où cela apporte de la clarté démontre une diligence raisonnable au titre de l'Article 13(5) du CRA. Émettre du VEX pour chaque CVE de votre SBOM n'est pas une obligation de la TR-03183, et représente rarement un usage pertinent du temps d'analyse.

La TR-03183 s'applique-t-elle en dehors de l'Allemagne ?

Sur le plan juridique, non. La TR-03183 est un guide technique national allemand émis par le BSI, et non une règle de droit de l'UE ; elle ne revendique pas d'applicabilité en dehors de l'Allemagne. En pratique, elle compte tout de même dans l'ensemble de l'UE pour trois raisons : le marché allemand est le plus grand de l'UE, les appels d'offres allemands y font directement référence, et aucune autre spécification alignée sur le CRA n'offre encore un niveau de détail comparable. L'adopter est un choix d'ingénierie défendable plutôt qu'une obligation légale en dehors de l'Allemagne.

Prochaines étapes

  1. Auditez vos sorties SBOM actuelles par rapport à la liste de champs de la TR-03183. Vérifiez les champs Required au niveau du SBOM (Créateur, Horodatage), l'ensemble des champs Required au niveau de chaque composant (nom, version, créateur, nom de fichier, dépendances, licences de distribution, hachage SHA-512, propriétés exécutable, archive et structurée) et les champs Additional lorsque les données existent. De nombreuses configurations CI par défaut omettent le nom de fichier, les propriétés booléennes et le SHA-512.
  2. Mettez à jour vos outils pour produire des sorties CycloneDX 1.6 ou SPDX 3.0.1 au minimum. Les sorties CycloneDX 1.4 et 1.5 acceptées sous les révisions antérieures de la TR-03183 ne sont plus conformes à la v2.1.0. Consultez CycloneDX vs SPDX pour les options d'outils et de validateurs.
  3. Intégrez la génération d'avis CSAF 2.0 dans votre processus de réponse aux vulnérabilités. Publiez un security.txt comportant la balise CSAF: et l'URI de provider-metadata.json. Choisissez l'éditeur Secvisogram et le validateur OASIS CSAF, sauf si vous disposez déjà d'outils de gestion des avis. Alignez ce travail sur l'horloge de signalement de l'Article 14 qui démarre le 11 septembre 2026, couverte dans le signalement des vulnérabilités et incidents CRA.
  4. Intégrez votre SBOM aligné sur la TR-03183 dans le dossier technique Annexe VII, où il figure aux points 2(b) et 8 de la liste du contenu. Pour les produits intégrant du matériel, le même document peut accueillir vos entrées HBOM, CycloneDX 1.6 prenant en charge à la fois les composants logiciels et matériels.
  5. Si la gestion de l'intake CycloneDX 1.6, de la validation des champs TR-03183 et de la génération d'avis CSAF sur plusieurs versions de produits représente une charge que vous ne souhaitez pas maintenir manuellement, CRA Evidence prend en charge l'intake SBOM, le suivi des composants et le scoring de qualité tenant compte de la TR-03183 sur l'ensemble de votre portefeuille de produits.