Conformité

SBOM CRA-compliant : générer et maintenir

Le CRA exige un SBOM tenu à jour pendant la durée de support du produit. Les exigences spécifiques, les gotchas, et l'architecture qui permet de tenir 5 ans.

8 min

Le Cyber Resilience Act, applicable totalement en décembre 2027, exige un SBOM (Software Bill of Materials) pour les produits "important" et "critical". Au-delà de la simple génération, le CRA impose des exigences spécifiques que les implémentations basiques ne couvrent pas. Voici ce qui distingue un SBOM CRA-compliant et l'architecture pour le tenir à jour pendant les 5 ans de support obligatoire.

Les exigences CRA pour le SBOM

D'après l'Annexe I, partie 2 du règlement et les actes délégués attendus :

1. Format machine-lisible

Le SBOM doit être dans un format standard machine-lisible. Les formats acceptés :

  • SPDX (ISO/IEC 5962:2021).
  • CycloneDX (OWASP).
  • Tout autre format qui couvre les éléments de données minimaux.

2. Éléments de données minimaux

Le SBOM doit a minima contenir, pour chaque composant :

  • Nom du composant.
  • Version.
  • Fournisseur (supplier).
  • Identifiant unique (PURL, CPE).
  • Hash cryptographique.
  • Licence.
  • Relation avec les autres composants (dépendances).
  • Auteur du SBOM (qui l'a généré).
  • Date de génération.

3. Mise à jour continue

Le SBOM doit être maintenu à jour pour la durée de support :

  • Mise à jour à chaque release.
  • Mise à jour à chaque correction de vulnérabilité.
  • Capacité à fournir un SBOM pour toute version commercialisée pendant la durée de support (5 ans minimum).

4. Disponibilité

  • Disponible aux autorités à la demande.
  • Pour les produits "critical" : disponible aux utilisateurs (avec format machine-lisible).

5. Provenance vérifiable (pour "critical")

  • Signature cryptographique.
  • Lien vérifiable avec l'artefact (hash de l'artefact correspondant).
  • Provenance reproductible (idéalement SLSA Level 2+).

Les gotchas typiques

Gotcha 1 — SBOM partiel

Beaucoup de SBOM générés automatiquement omettent des couches :

  • Système d'exploitation embarqué dans les images Docker.
  • Outils de runtime (interpréteurs, JVM).
  • Composants téléchargés au runtime (plugins, modules).

Pour le CRA, le SBOM doit couvrir tout ce qui est livré. Une image Docker complète, pas seulement vos node_modules.

Gotcha 2 — Versions non précises

Un SBOM qui dit "lodash ^4.17.0" n'est pas un SBOM. Il faut "lodash 4.17.21" exact.

Solution : générer le SBOM après le npm install ou pip install, à partir des fichiers lockfiles.

Gotcha 3 — Pas de hash

Le hash cryptographique du composant est exigé. Beaucoup de générateurs l'omettent par défaut.

Configurer le générateur (Syft, CycloneDX, etc.) pour inclure les hashes systématiquement.

Gotcha 4 — SBOM non lié à l'artefact

Un SBOM doit être rattaché à un artefact spécifique. La relation se fait via :

  • Hash de l'artefact final dans le SBOM.
  • Ou attestation Sigstore qui lie SBOM et artefact (recommandé).

Voir Sigstore et signature de containers.

Gotcha 5 — Conservation insuffisante

Si vous supportez un produit pendant 5 ans, vous devez pouvoir produire le SBOM de la version livrée il y a 4 ans. Cela suppose un archivage organisé.

L'architecture pour tenir 5 ans

`` ┌─────────────────────────────────────────────────┐ │ CI/CD │ │ ├─ Build artefact │ │ ├─ Generate SBOM (Syft/CycloneDX) │ │ ├─ Sign SBOM (Sigstore) │ │ ├─ Attach SBOM to artefact (Sigstore attest) │ │ └─ Push to registry + archive │ └─────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ Long-term archive │ │ ├─ S3 with Object Lock (5+ years) │ │ ├─ SBOM in SPDX + CycloneDX format │ │ ├─ Index by version + timestamp │ │ └─ Public endpoint for client retrieval │ └─────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────┐ │ Dependency-Track / GUAC │ │ ├─ Continuous CVE matching │ │ ├─ Alerts on new vulnerabilities │ │ └─ Reporting compliance │ └─────────────────────────────────────────────────┘ ``

Pipeline CI/CD type

```yaml

  • name: Build artifact
  • run: docker build -t myapp:${{ github.sha }} .

  • name: Generate SBOM (CycloneDX)
  • run: syft scan myapp:${{ github.sha }} -o cyclonedx-json=sbom.cdx.json

  • name: Generate SBOM (SPDX)
  • run: syft scan myapp:${{ github.sha }} -o spdx-json=sbom.spdx.json

  • name: Sign and attach SBOM
  • run: | cosign attest --yes --predicate sbom.cdx.json --type cyclonedx myapp:${{ github.sha }} cosign attest --yes --predicate sbom.spdx.json --type spdx myapp:${{ github.sha }}

  • name: Archive SBOM
  • run: | aws s3 cp sbom.cdx.json s3://sbom-archive/myapp/${{ github.sha }}/ aws s3 cp sbom.spdx.json s3://sbom-archive/myapp/${{ github.sha }}/

  • name: Notify Dependency-Track
  • run: | curl -X POST -H "X-Api-Key: $DT_KEY" \ -F "project=myapp" -F "version=${{ github.sha }}" \ -F "bom=@sbom.cdx.json" \ https://dt.example.com/api/v1/bom ```

Endpoint public pour les clients

Pour les produits critical, vous devez fournir le SBOM aux utilisateurs :

`` GET https://yourapp.example/.well-known/sbom/v1.cdx.json GET https://yourapp.example/.well-known/sbom/v1.0.42.cdx.json # version spécifique ``

Convention well-known URI proposée (en cours de normalisation IETF en 2026).

Le coût opérationnel

Pour une équipe de 30-100 devs :

  • Setup initial : 2-4 semaines de travail.
  • Coût récurrent : moins de 5% de surcharge pipeline.
  • Stockage : <1 GB par 1000 builds, négligeable.
  • Outillage : Dependency-Track (open source, gratuit) ou Snyk SBOM (~5-15 k€/an selon volume).

ROI : tu es prête pour CRA et pour les questions DDQ enterprise sur la supply chain.

Articulation avec les autres exigences CRA

Le SBOM s'inscrit dans l'ensemble des exigences CRA :

Le piège — le SBOM "fait au stylo"

Certaines équipes maintiennent leur SBOM dans une feuille Excel ou un Notion. C'est un signal alarmant. À l'audit CRA, un SBOM non automatisé sera systématiquement considéré comme non-conforme parce que :

  • Risque d'erreurs humaines.
  • Pas mis à jour à chaque release.
  • Pas reproductible.
  • Pas de hash automatique.

L'automatisation par CI/CD est la seule approche viable.

Open source et CRA

Le CRA traite spécifiquement l'open source : les contributeurs occasionnels ne sont pas concernés, mais les "open source stewards" (organisations qui maintiennent du logiciel open source à but commercial) ont des obligations partielles. Si vous embarquez beaucoup d'OSS, vous restez responsable de la conformité du produit final, OSS inclus.

Conséquence pratique : pour chaque dépendance OSS critique, vérifier qu'elle a un SBOM disponible et qu'elle a un VDP. Sinon, c'est à vous de faire le travail.

Questions fréquentes

Qu'est-ce qu'un SBOM CRA-compliant ?

Liste structurée et machine-lisible des composants logiciels d'un produit (nom, version, fournisseur, hash, licence, dépendances), conforme aux exigences CRA Article 13 et Annexe I. Formats acceptés : SPDX (ISO/IEC 5962:2021) ou CycloneDX (OWASP).

Comment générer un SBOM en CI/CD ?

Outils 2026 : Syft (Anchore) pour images container, cdxgen pour code source, Maven plugin CycloneDX pour Java, @cyclonedx/cyclonedx-npm pour Node. Bonne pratique : génération automatique à chaque build, signature avec cosign, attaché au release.

Quand le SBOM devient-il obligatoire ?

Pour les produits classés 'important' et 'critical' au sens du CRA Annexe III : 11 décembre 2027. Le SBOM doit être maintenu pendant toute la durée de support. Format SPDX ou CycloneDX au choix, accessible aux autorités et aux clients sur demande.

Un sujet connexe chez vous ?

20 minutes pour cadrer ensemble. Aucune offre commerciale envoyée à froid.

Réserver un échange Calendly