123% flere rapporterte CVE-er per dag i 2026 enn i fjor.

Sammenligning

Du skanner allerede avhengighetene dine. Dette kan ikke en skanner se.

SCA-verktøy og SBOM-generatorer er verdt å kjøre. De har ett designvalg til felles: De rekonstruerer komponentlisten fra filer i etterkant. CRACI registrerer den mens bygget kjører.

Oppdatert

Det den nåværende stacken din gjør bra

Hvis du har SCA og SBOM-generering konfigurert, har du allerede gjort det vanskelige organisatoriske arbeidet: Avhengigheter spores, advisories når utviklerne, og det finnes en fil å levere fra seg når noen spør. Behold det.

  • GitHubs avhengighetsgraf og Dependabot er slått på som standard for mange team. GitHub beskriver avhengighetsgrafen som "a summary of the manifest and lock files stored in a repository and any dependencies that are submitted for the repository using the dependency submission API." Dependabot-varsler bygger på den og varsler deg når en ny advisory publiseres eller når avhengighetsgrafen din endres.
  • Kommersiell SCA som Snyk genererer også SBOM-er. Kommandoen snyk sbom leser manifestfiler og tilhørende lockfiler, og skriver ut CycloneDX eller SPDX. Per september 2026 dokumenterer Snyk den som "available only to customers on Snyk Enterprise plans."
  • Generatorer med åpen kildekode som Syft, Trivy og cdxgen er gratis, raske og enkle å legge til i CI. Syft beskriver seg selv som et verktøy "for generating a Software Bill of Materials (SBOM) from container images and filesystems."

Disse verktøyene er sterkest på rask tilbakemelding på en pull request, bred dekning av økosystemer og en utbedringsflyt utviklere allerede kjenner. CRACI erstatter ikke det i dag. Sårbarhetssporingen samler funn på tvers av bygg og repositorier og vurderer overvåkede SBOM-er på nytt når nye sårbarheter dukker opp. Sikkerhetsteam kan triagere funn og sende dem til riktig team. Policy gates kan blokkere et bygg; sårbarhets-webhooks står på veikartet.

Skanner kontra registrerer

Alle verktøyene over er skannere. Du peker dem mot et kildetre, en lockfile eller et container-image, og de utleder hva som gikk inn. Det fungerer når filene forteller hele historien. Det blir vanskeligere når de ikke gjør det:

  • Repositoriet har ingen lockfile, så versjonene avgjøres ved installasjon.
  • Bygget gjenoppretter pakker fra en CI-cache som ingen manifest nevner.
  • Et byggesteg laster ned et verktøy, en OS-pakke eller en binærfil direkte.
  • En npm-installasjonshook eller et Rust-byggeskript henter mer kode under installasjonen, ruten Shai-Hulud-ormen brukte.
  • Et containerbygg henter et base-image og operativsystemlagene, som ingen språk-lockfile lister opp.
  • Det du leverer, er en kompilert binærfil, og manifestet ved siden av den lister nesten ingenting.

CRACI er en registrerer: Det ser trafikken, og det gjør ikke skannere. Det kjører bygget på sin egen GitHub Actions-kompatible runner, og en pakkebevisst proxy observerer trafikken til pakkekilder mens jobben kjører, så disse skjulte avhengighetene havner i SBOM-en. Pakker gjenopprettet fra en cache tar dokumentasjonen sin med seg. Det finnes ingen craci scan ./dir-kommando, fordi skanning av en katalog i etterkant er det steget CRACI finnes for å unngå.

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.

Hva en skanning avhenger av

Utdata fra skannere avhenger av verktøyet og av hva det pekes mot. Syft, Trivy, cdxgen, Microsoft SBOM Tool, eksporten av GitHubs avhengighetsgraf og Socket CLI finner hver for seg ut listen fra det de kan lese. Mønstrene nedenfor kommer fra hvordan disse verktøyene er dokumentert å fungere.

Ingen komponent blir funnet av alle verktøyene

Hver generator avgjør selv hva som teller som en komponent, og hvilke filer den skal stole på, så samme checkout gir hver av dem en annen liste. Eksporten av GitHubs avhengighetsgraf fungerer på enda en annen måte: Den bygges fra det GitHub vet om repositoriet, ikke fra filer en skanner leser, og den leser standardgrenen i stedet for en festet commit.

Ingen lockfile, ingen avhengigheter

Express 5.2.1 committer ingen lockfile. Pekt mot en ren checkout har en generator som løser avhengigheter fra lockfiler eller et installert avhengighetstre, ingen av delene foran seg, så ingen av npm-avhengighetene deklarert i package.json når dokumentet. Ingen av verktøyene her er ødelagt. Det som avgjør om SBOM-en inneholder noen avhengigheter i det hele tatt, er ikke verktøyet. Det er om noen kjørte en installasjon først.

Ett flagg endrer svaret

Syfts standard katalogskanning rapporterer hva et prosjekt deklarerer, ikke hva som er installert på disk. På en installert checkout av den samme express-utgivelsen avgjør ett cataloger-flagg om de installerte npm-pakkene i det hele tatt dukker opp i listen. Samme verktøy, samme versjon, samme kildetre.

Produktet er en binærfil

Repositoriet anthropics/claude-code på v2.1.259 har ikke noe avhengighetsmanifest eller lockfile av noe slag. Den publiserte npm-pakken deklarerer null runtime-avhengigheter og pakker inn en forhåndsbygd native binærfil gjennom åtte plattformpakker. @openai/codex 0.149.1 er bygget opp på samme måte. En manifestleser har nesten ingenting å beskrive, mens programmet som kjører, er en kompilert binærfil, så det hvert verktøy returnerer, sier mer om verktøyet enn om prosjektet.

Samme pakke, ulike versjoner

Der to verktøy finner det samme, er de ikke alltid enige om hva det er. Det ene kan feste en GitHub Action til en commit-SHA mens det andre rapporterer en utgivelsestag. Et sårbarhetsoppslag på feil versjon gir et selvsikkert, feil svar.

Funksjon CRACI Skannergenerert SBOM
Registrert mens bygget kjører Jobbens trafikk til pakkekilder, pluss dokumentasjon fra CI-cacher Rekonstruert i etterkant fra et kildetre, en lockfile eller et image
Repositorium uten lockfile Registrerer versjonene installasjonen faktisk løste Avhenger av verktøyet og av en tidligere installasjon
Fullstendighet Fem statuser per jobb og per cache En oversett komponent og en fraværende komponent ser like ut, med mindre verktøyet registrerer hull
Overvåking av nye advisories Overvåkede SBOM-er vurderes løpende på nytt For eksempel Dependabot-varsler
Tilbakemelding på pull requests før merge Ikke et fokusområde i dag En kjernestyrke
Kjører utenfor GitHub Actions GitHub Actions i dag; GitLab CI og Jenkins på veikartet Overalt der du kan kjøre en CLI eller koble til en app
Gratis alternativer med åpen kildekode Ikke noe gratisnivå Syft, Trivy og cdxgen
  • Inkludert
  • Delvis
  • Ikke inkludert
  • På veikartet

Hvor CRACI passer inn ved siden av SCA-verktøyet ditt

Behold SCA-verktøyet på pull requests. Det er det rette stedet å fange en sårbar versjon før den merges. Legg til CRACI der spørsmålet gjelder bygget og ikke diffen:

  • Hva inneholdt denne utgivelsen faktisk? Den registrerte SBOM-en dekker kildene npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk og Git, pluss forhåndsinnstillinger for nedlastinger, inkludert transitive avhengigheter. JFrog Artifactory-speil for npm og PyPI fungerer også.
  • Kan vi stole på listen? Hver jobb og cache har en fullstendighetsstatus, så en ufullstendig registrering er synlig i stedet for å være tynn uten at noen merker det.
  • Er vi berørt av en ny advisory? Overvåkede SBOM-er vurderes på nytt når nye sårbarheter publiseres, og funn samles på tvers av bygg og repositorier.

SBOM-en lastes ned som CycloneDX gjennom det offentlige REST API-et, sammen med jobbens nettverksspor og provenance, så den kan mate ethvert verktøy som leser CycloneDX, inkludert SCA-verktøyet du allerede kjører. Oppsettet er én linje i workflowen: Endre runs-on til craci. GitHub Actions er den støttede CI-en i dag; GitLab CI, Jenkins og andre CI-systemer står på veikartet.

En oversikt over hva som er rullet ut hvor

Inventarvisningen i CRACI viser nøyaktig hvilke programvareversjoner som er rullet ut til hvilke produkter, globalt. Når en ny sårbarhet dukker opp, kan du se hvilke produkter som kjører den berørte versjonen, i stedet for å pusle det sammen fra utgivelsesnotater og regneark.

Les mer om SBOM-generering under bygget og sårbarhetssporing.

Sett en registrert SBOM ved siden av den skannede

Book en demo, så kjører vi et av byggene dine på CRACI og sammenligner resultatet med SBOM-en dine nåværende verktøy produserer.

Book en demo