123% de CVE signalées en plus par jour en 2026 par rapport à l'an dernier.

La génération de SBOM, enregistrée pendant le build

CRACI est un outil de génération de SBOM qui enregistre ce que chaque build GitHub Actions a réellement récupéré, au lieu de scanner des fichiers après coup. Chaque SBOM indique son niveau de complétude.

En bref : exécutez vos jobs GitHub Actions sur des runners CRACI et chaque job obtient une SBOM des paquets qu'il a récupérés, y compris les dépendances transitives et les paquets restaurés depuis les caches CI, exportée en CycloneDX ou SPDX. Chaque SBOM porte un état de complétude et reste surveillée après la mise en production pour détecter de nouvelles vulnérabilités. Les outils de scan comme Syft et Trivy reconstituent une SBOM à partir de fichiers ; CRACI l'enregistre à partir du build. Pourquoi les SBOM générées au build sont différentes.

Enregistrée pendant le build, pas scannée après coup

La plupart des générateurs de SBOM lisent des fichiers une fois le build terminé et reconstituent ce qui, selon eux, y est entré. CRACI génère la SBOM dans son propre runner CI. Un proxy qui comprend les paquets observe le trafic de chaque job vers les sources de paquets : la SBOM liste donc ce que le job a réellement récupéré, dépendances transitives comprises, et non ce qu'un manifeste dit qu'il devrait nécessiter. Ni lockfile, ni arborescence installée, ni étape de scan supplémentaire ne sont nécessaires pour que l'enregistrement existe.

Recorded during the build, not scanned afterwards A scanner reads a lockfile or manifest after the fact and reconstructs what it thinks went in. CRACI observes the job's traffic to package sources while the build runs, including packages restored from CI caches, so the SBOM lists what the job actually pulled in. A scanner, after the build Lockfile Scanner SBOM Reconstructs what it thinks went in, from the files it can read Nothing tells you what it missed CRACI, during the build Job fetches Proxy records Job SBOM Lists what the job actually pulled in, including packages restored from CI caches Completeness stated for every job

Les dépendances transitives, à tous les niveaux

L'essentiel de ce qu'un build récupère n'est pas une dépendance directe. C'est la dépendance d'une dépendance, plusieurs niveaux plus bas, et une partie n'apparaît jamais dans un lockfile : binaires précompilés téléchargés par un script de build, paquets restaurés depuis un cache, paquets du système d'exploitation. CRACI enregistre chaque paquet récupéré par le job, à tous les niveaux de profondeur, afin que les vulnérabilités soient recherchées sur l'arbre complet. Lors de comparaisons directes avec d'autres outils SBOM, cet enregistrement plus complet a révélé des vulnérabilités que les autres outils n'avaient pas signalées.

Every layer of transitive dependencies A dependency tree three layers deep. The app depends directly on express, pg and a build script. Express pulls in body-parser and router, which pull in raw-body and path-to-regexp; pg pulls in pg-protocol. The build script fetches a prebuilt library during the build, which bundles a native codec that matches a vulnerability advisory. A lockfile scanner sees the packages the lockfile lists; CRACI records every package the job fetched, at every depth, including the ones only the build pulls in. Your app Direct Layer 2 Layer 3 your-app express pg build script body-parser router pg-protocol prebuilt lib raw-body path-to-regexp native-codec advisory match In the lockfile and the build record Only in the build record: fetched while the job ran Matched an advisory, so it is tracked like any other

Les paquets restaurés depuis les caches CI restent dans la SBOM

C'est souvent sur les caches que l'enregistrement pendant le build échoue : un paquet restauré depuis un cache ne passe jamais par un registre, si bien qu'un proxy seul ne le verrait pas. CRACI transmet les preuves de dépendances avec le cache, de sorte que les paquets restaurés depuis un cache CI restent dans la SBOM du job qui les a restaurés.

Packages restored from CI caches stay in the SBOM A first job fetches packages from a registry through CRACI's proxy and saves a cache. The dependency evidence travels with the cache, so when a later job restores it, those packages stay in that job's SBOM even though they never touched a registry. First run: cache miss npm registry Job 1 fetches Cache + evidence Packages recorded through the proxy Later run: cache hit Job 2 restores Cache + evidence No registry request, packages still recorded Job 2 SBOM express 5.2.1 (from cache) lodash 4.17.21 (from cache) Cache-restored packages stay in the SBOM

Un état de complétude pour chaque job

Le suivi des vulnérabilités ne peut porter que sur les composants listés dans votre SBOM. Un paquet absent de la SBOM, c'est une vulnérabilité pour laquelle personne ne sera alerté. Plutôt que de présenter chaque SBOM comme complète, CRACI indique la complétude de chaque job et de chaque cache : Complete, Complete with connections, Incomplete, Unavailable ou Not recorded. Vous savez quelles SBOM sont fiables et lesquelles méritent un second examen.

A completeness state for every job Instead of presenting every SBOM as complete, CRACI states completeness for each job and each cache: Complete, Complete with connections, Incomplete, Unavailable or Not recorded. Workflow run: SBOM completeness Job Completeness build Complete test Complete with connections integration Incomplete docs Not recorded Why it matters Vulnerability tracking can only match listed components. A package missing from the SBOM is a vulnerability nobody is alerted about, so CRACI says when a list is partial.

Les écosystèmes et les formats que vous livrez

CRACI enregistre les paquets provenant de npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk et de sources Git, ainsi que des presets de téléchargement Yocto et OpenEmbedded, et considère les miroirs npm et PyPI de JFrog Artifactory comme des sources connues. La prise en charge de Maven et Java figure sur la roadmap. Les SBOM s'exportent en CycloneDX et SPDX, dépendances transitives comprises, prêtes à être partagées avec vos clients, partenaires et auditeurs.

Ecosystems and formats CRACI records packages from npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk and Git sources, plus Yocto and OpenEmbedded download presets, and treats JFrog Artifactory npm and PyPI mirrors as known sources. Maven and Java are on the roadmap. SBOMs export as CycloneDX or SPDX. Recorded today npm PyPI RubyGems Cargo Go Nix OCI apt · apk Git sources, Yocto presets Artifactory npm, PyPI mirrors On the roadmap Maven and Java Export CycloneDX SPDX With transitive dependencies and declared licenses

Les licences déclarées de chaque composant

Chaque paquet enregistré apporte sa licence déclarée dans la SBOM. Vous voyez quelles dépendances relèvent d'une licence commerciale ou restrictive avant de livrer, et les licences copyleft sont repérées avant de se retrouver dans votre produit.

Declared licenses on every component Every recorded package carries its declared license into the SBOM, so restrictive and copyleft licenses show up before you ship. License policy rules can block a build on a license. Job SBOM: components and licenses Component Declared license express 5.2.1 MIT requests 2.32.3 Apache-2.0 serde 1.0.219 MIT OR Apache example-lib 1.4.0 GPL-3.0 copyleft License policy Build blocked: GPL-3.0 is not allowed Caught before it ends up in your product

La provenance via l'API

La SBOM n'est qu'une partie de ce que CRACI enregistre pour chaque job. La REST API publique renvoie les SBOM, les traces réseau et la provenance, toutes enregistrées à partir du même build.

Provenance data from every build Every job on CRACI records the packages it fetched and its network trace. The public REST API returns the job's SBOMs, network trace and provenance. Build release job on CRACI Recorded packages fetched network trace Provenance build data, via the API Ask the API about any job Job → SBOM, trace, provenance Returned by the API Job Packages CycloneDX SBOM Network trace Recorded on every CRACI job, no extra step

Surveillée après la mise en production

Une SBOM permet à une entreprise de savoir ce que contient le logiciel qu'elle livre, et clients comme régulateurs l'exigent de plus en plus : le Cyber Resilience Act impose aux fabricants d'en établir une pour les produits vendus dans l'UE. CRACI réévalue en continu les SBOM surveillées à mesure que de nouvelles vulnérabilités sont publiées, agrège les résultats de l'ensemble des builds et des dépôts, et prend en charge VEX. Les SBOM que vous recueillez auprès de vos propres fournisseurs sont surveillées aux côtés de vos builds.

Vulnerability tracking after release After a release ships, its SBOM stays monitored. When a new vulnerability is published, CRACI re-evaluates the monitored SBOMs, finds the affected releases, and the security team triages the finding and routes it to the team that owns the fix. The inventory view shows which software versions are deployed to which products. Release shipped SBOM monitored Later New advisory published Re-evaluated automatically Finding: critical, in 2 releases 1. Triage 2. Route to owner 3. Team fixes Policy gates can block a build on findings · VEX supported Inventory: deployed versions Product Version Web app v4.12.0 Mobile API v2.3.1

Une SBOM enregistrée face à une SBOM scannée

Les scanners sont le bon outil pour les logiciels que vous n'avez pas construits. Pour vos propres releases, voici ce que change l'enregistrement du build. Un scanner lit le lockfile ou le résultat du build et en déduit ce qui y est entré. CRACI voit le trafic qui entre dans le build : les dépendances cachées qu'apportent les hooks d'installation, les scripts de build et les images de base se retrouvent donc elles aussi dans la SBOM.

How a scanned SBOM and a recorded SBOM are made Left, a scanner: it reads the lockfile after the build, which lists packages A to E, so its SBOM contains A to E. The build also fetched code through an install hook, a build script download and a base image, which are in no lockfile, so the scanned SBOM is missing them. Right, CRACI: it sees the traffic coming into the build, so all eight packages, including the three hidden dependencies, land in the recorded SBOM. Scanner reads files after the build package-lock.json A B C D E the build also fetched install hook download build script download base image layers in no lockfile, so the scan never sees them Scanned SBOM A B C D E missing missing missing CRACI sees the traffic into the build the network build job on CRACI every package that comes in Recorded SBOM A B C D E install hook build script base image hidden ones too
A scanner can only list what the lockfile or the output declares. CRACI sees what actually came into the build, including the hidden dependencies.
Fonctionnalité CRACI Outil SBOM basé sur un scanner
Comment la liste des composants est produite Enregistrée à partir du trafic de paquets du build lui-même Reconstituée après coup à partir de fichiers
Nécessite un lockfile ou des dépendances installées Non Généralement l'un ou l'autre
Paquets restaurés depuis les caches CI Les preuves suivent le cache Seulement si les fichiers sont présents au moment du scan
État de complétude par job Cinq états, par job et par cache
Lien signé entre l'artefact et le build Pas de provenance signée Avec une étape de signature distincte
Logiciels que vous n'avez pas construits Ajoutez plutôt la SBOM du fournisseur
Systèmes CI GitHub Actions aujourd'hui ; autres systèmes CI sur la roadmap Fonctionne dans n'importe quelle CI
  • Inclus
  • En partie
  • Non inclus
  • Sur la roadmap

Vous comparez des outils précis ? Consultez le comparatif des outils SBOM pour Syft, Trivy, cdxgen, le Microsoft SBOM Tool, Dependency-Track et d'autres. Pour une vue d'ensemble, consultez le comparatif des outils de sécurité de la chaîne d'approvisionnement logicielle.

SBOM basics: SPDX, CycloneDX and OpenVEX

Ce qu'enregistre une SBOM, en quoi les formats SPDX et CycloneDX diffèrent en pratique, et ce qu'OpenVEX apporte pour savoir si une vulnérabilité affecte réellement un produit.

Petteri Pulkkinen et Erika Marttinen lors de Kubernetes Community Days Helsinki 2026, 16:50 à 22:05 de SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains.

Génération de SBOM : questions fréquentes

Qu'est-ce que la génération de SBOM ?

La génération de SBOM consiste à produire une nomenclature logicielle (software bill of materials) : une liste lisible par machine des composants et dépendances d'un logiciel. Elle peut se faire à partir des fichiers source, pendant le build, ou en analysant un artefact final tel qu'une image de conteneur. CRACI génère la SBOM pendant le build, à partir de ce que le build a réellement récupéré.

Comment CRACI génère-t-il une SBOM ?

Vos jobs GitHub Actions s'exécutent sur des runners CRACI. Pendant l'exécution de chaque job, un proxy qui comprend les paquets observe son trafic vers les sources de paquets et enregistre les paquets qu'il récupère, y compris les dépendances transitives et les paquets restaurés depuis les caches CI. Chaque job obtient sa propre SBOM, avec un état de complétude.

Dois-je modifier mes workflows ?

Vous remplacez runs-on par craci. CRACI remplace le runner, pas GitHub Actions : vos workflows et leurs exécutions restent dans GitHub.

Quels écosystèmes de paquets CRACI enregistre-t-il ?

npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk et les sources Git, ainsi que les presets de téléchargement Yocto et OpenEmbedded. Les miroirs npm et PyPI de JFrog Artifactory sont considérés comme des sources connues. La prise en charge de Maven et Java figure sur la roadmap.

Dans quels formats puis-je exporter une SBOM ?

CycloneDX et SPDX, y compris les dépendances transitives et la licence déclarée de chaque composant.

Que signifie l'état de complétude ?

Complete signifie que CRACI a observé des preuves complètes pour le job et que chaque cache restauré était complet. Complete with connections signifie que le job a également utilisé des connexions réseau personnalisées qui méritent d'être examinées. Incomplete signifie qu'une condition a pu laisser des dépendances de côté. Unavailable signifie que les preuves n'ont pas pu être évaluées, et Not recorded signifie que le job est antérieur au suivi de la complétude.

CRACI détecte-t-il des vulnérabilités dans la SBOM ?

Oui. CRACI réévalue en continu les SBOM surveillées à mesure que de nouvelles vulnérabilités sont publiées, agrège les résultats de l'ensemble des builds et des dépôts, et prend en charge VEX. Les équipes sécurité trient ce qu'il détecte et le transmettent aux équipes chargées de la correction.

CRACI peut-il générer une SBOM pour un logiciel que je n'ai pas construit ?

Non. CRACI enregistre les builds qui s'exécutent sur ses runners. Pour les logiciels que vous achetez, ajoutez la SBOM du fournisseur et CRACI la surveille aux côtés de vos propres builds. Pour une image tierce que vous n'avez pas construite, un scanner est le choix pratique ; voir Comparatif des outils SBOM.

Découvrez la SBOM de votre propre build

Réservez une démo, exécutez l'un de vos workflows GitHub Actions sur CRACI et voyez ce qu'il a réellement récupéré

Réserver une démo