V roce 2026 o 131% více nahlášených CVE denně než loni.

Srovnání

Své závislosti už skenujete. Tohle skener nevidí.

Nástroje SCA a generátory SBOM stojí za to používat. Mají ale jedno společné rozhodnutí v návrhu: seznam komponent zpětně rekonstruují ze souborů. CRACI ho zaznamenává během běhu buildu.

Aktualizováno

Co váš současný stack dělá dobře

Pokud máte nastavené SCA a generování SBOM, máte za sebou tu těžkou organizační práci: závislosti se sledují, bezpečnostní upozornění se dostávají k vývojářům a když se někdo zeptá, máte soubor, který můžete předat. To si ponechte.

  • Graf závislostí GitHubu a Dependabot má mnoho týmů zapnuté ve výchozím nastavení. GitHub popisuje graf závislostí jako „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“ (souhrn manifestů a lockfilů uložených v repozitáři a všech závislostí odeslaných pro repozitář přes dependency submission API). Upozornění Dependabot na něm stavějí a dají vám vědět, když vyjde nové bezpečnostní upozornění nebo když se změní váš graf závislostí.
  • Komerční SCA, například Snyk, také generuje SBOM. Jeho příkaz snyk sbom čte soubory manifestů a jejich lockfily a vytváří výstup ve formátu CycloneDX nebo SPDX. K září 2026 ho Snyk v dokumentaci uvádí jako „available only to customers on Snyk Enterprise plans“ (dostupný jen zákazníkům s plány Snyk Enterprise).
  • Open source generátory, jako jsou Syft, Trivy a cdxgen, jsou zdarma, rychlé a snadno se přidají do CI. Syft se popisuje jako nástroj „for generating a Software Bill of Materials (SBOM) from container images and filesystems“ (pro generování SBOM z image kontejnerů a souborových systémů).

Tyto nástroje jsou nejsilnější v rychlé zpětné vazbě v pull requestu, širokém pokrytí ekosystémů a v postupu nápravy, který vývojáři už znají. To CRACI dnes nenahrazuje. Jeho sledování zranitelností agreguje nálezy napříč buildy a repozitáři a znovu vyhodnocuje monitorované SBOM, jakmile se objeví nové zranitelnosti. Bezpečnostní týmy mohou provést triáž nálezů a poslat je správnému týmu. Kontrolní brány politik (policy gates) mohou build zablokovat; webhooky pro zranitelnosti jsou v plánu vývoje.

Skener versus záznam

Každý z výše uvedených nástrojů je skener. Nasměrujete ho na strom zdrojového kódu, lockfile nebo image kontejneru a on odvodí, co do něj vstoupilo. To funguje, když soubory řeknou vše. Těžší je to, když neřeknou:

  • Repozitář nemá lockfile, takže o verzích se rozhoduje až při instalaci.
  • Build obnovuje balíčky z cache CI, kterou žádný manifest nezmiňuje.
  • Krok buildu stahuje nástroj, balíček operačního systému nebo binárku napřímo.
  • Instalační hook npm nebo build skript v Rustu stáhne během instalace další kód, cestou, kterou využil červ Shai-Hulud.
  • Build kontejneru stáhne základní image a jeho vrstvy operačního systému, které žádný jazykový lockfile neuvádí.
  • To, co dodáváte, je zkompilovaná binárka a manifest vedle ní neuvádí téměř nic.

CRACI zaznamenává: vidí provoz, který skenery nevidí. Spouští build na vlastním runneru kompatibilním s GitHub Actions a proxy, která rozumí balíčkům, během běhu jobu sleduje provoz ke zdrojům balíčků, takže se tyto skryté závislosti dostanou do SBOM. Balíčky obnovené z cache si své důkazy nesou dál. Neexistuje příkaz craci scan ./dir, protože zpětné skenování adresáře je přesně ten krok, kterému se CRACI vyhýbá.

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.

Na čem sken závisí

Výstup skeneru závisí na nástroji a na tom, na co ho nasměrujete. Syft, Trivy, cdxgen, Microsoft SBOM Tool, export grafu závislostí GitHubu i Socket CLI sestavují seznam z toho, co dokážou přečíst. Níže uvedené vzorce vycházejí z toho, jak tyto nástroje podle dokumentace fungují.

Žádnou komponentu nenajdou všechny nástroje

Každý generátor sám rozhoduje, co považuje za komponentu a kterým souborům věří, takže stejný checkout dá každému z nich jiný seznam. Export grafu závislostí GitHubu funguje zase jinak: vychází z toho, co GitHub o repozitáři ví, ne ze souborů, které čte skener, a čte výchozí větev, ne připnutý commit.

Bez lockfilu žádné závislosti

Express 5.2.1 necommituje žádný lockfile. Generátor, který vyřešuje závislosti z lockfilů nebo z nainstalovaného stromu, nemá na čistém checkoutu před sebou ani jedno, takže do dokumentu se nedostane žádná ze závislostí npm deklarovaných v package.json. Žádný z nástrojů není rozbitý. O tom, zda SBOM obsahuje vůbec nějaké závislosti, nerozhoduje nástroj. Rozhoduje to, zda někdo předtím spustil instalaci.

Jeden přepínač změní odpověď

Výchozí sken adresáře v Syftu uvádí, co projekt deklaruje, ne co je nainstalováno na disku. Na nainstalovaném checkoutu stejného vydání express rozhoduje jeden přepínač katalogizátoru o tom, zda se nainstalované balíčky npm v seznamu vůbec objeví. Stejný nástroj, stejná verze, stejný strom.

Produktem je binárka

Repozitář anthropics/claude-code ve verzi v2.1.259 nemá žádný manifest závislostí ani lockfile. Jeho publikovaný balíček npm deklaruje nula závislostí za běhu a obaluje předem sestavenou nativní binárku prostřednictvím osmi platformních balíčků. @openai/codex 0.149.1 má stejnou podobu. Čtečka manifestů nemá téměř co popsat, zatímco program, který běží, je zkompilovaná binárka, takže to, co který nástroj vrátí, vypovídá víc o nástroji než o projektu.

Stejný balíček, různé verze

Když dva nástroje najdou totéž, ne vždy se shodnou na tom, co to je. Jeden může GitHub Action připnout na SHA commitu, zatímco druhý uvede tag vydání. Vyhledání zranitelností podle špatné verze vrátí sebejistou špatnou odpověď.

Funkce CRACI SBOM vygenerovaná skenerem
Zaznamenáno během běhu buildu Provoz jobu ke zdrojům balíčků a k tomu důkazy z cache CI Zpětně rekonstruováno ze stromu, lockfilu nebo image
Repozitář bez lockfilu Zaznamená verze, které instalace skutečně vyřešila Záleží na nástroji a na předchozí instalaci
Úplnost Pět stavů pro každý job a každou cache Chybějící komponenta a neexistující komponenta vypadají stejně, pokud nástroj mezery nezaznamenává
Monitorování nových bezpečnostních upozornění Monitorované SBOM se průběžně znovu vyhodnocují Například upozornění Dependabot
Zpětná vazba v pull requestu před sloučením Dnes není prioritou Hlavní silná stránka
Běží mimo GitHub Actions Dnes GitHub Actions; GitLab CI a Jenkins v plánu vývoje Kdekoli, kde lze spustit CLI nebo připojit aplikaci
Bezplatné open source možnosti Bez bezplatné úrovně Syft, Trivy a cdxgen
  • Součástí
  • Částečně
  • Není součástí
  • V plánu vývoje

Kam CRACI zapadá vedle vašeho SCA

SCA si u pull requestů ponechte. Je to správné místo, kde zachytit zranitelnou verzi před sloučením. CRACI přidejte tam, kde se otázka týká buildu, ne diffu:

  • Co toto vydání skutečně obsahovalo? Zaznamenaná SBOM pokrývá zdroje npm, PyPI, RubyGems, Composer, Cargo, Go, Nix, OCI, apt, apk a Git a k tomu předvolby pro stahování, včetně tranzitivních závislostí. Fungují i zrcadla npm a PyPI v JFrog Artifactory.
  • Můžeme seznamu věřit? Každý job a každá cache má stav úplnosti, takže neúplný záznam je vidět, místo aby byl potichu chudý.
  • Týká se nás nové bezpečnostní upozornění? Monitorované SBOM se znovu vyhodnocují, jakmile jsou zveřejněny nové zranitelnosti, a nálezy se agregují napříč buildy a repozitáři.

SBOM se stahuje ve formátu CycloneDX přes veřejné REST API spolu se síťovým záznamem a původem (provenance) jobu, takže ji můžete předat jakémukoli nástroji, který čte CycloneDX, včetně SCA, které už používáte. Nastavení je jeden řádek ve workflow: změňte runs-on na craci. Dnes je podporovaným CI GitHub Actions; GitLab CI, Jenkins a další systémy CI jsou v plánu vývoje.

Inventář toho, co je kde nasazeno

Pohled inventáře v CRACI přesně ukazuje, které verze softwaru jsou nasazené ve kterých produktech, a to globálně. Když se objeví nová zranitelnost, vidíte, které produkty používají zasaženou verzi, místo abyste to skládali dohromady z poznámek k vydání a tabulek.

Přečtěte si více o generování SBOM v době buildu a sledování zranitelností.

Co CRACI nahrazuje a co ne, najdete na stránce co CRACI nahrazuje.

Postavte zaznamenanou SBOM vedle naskenované

Rezervujte si demo: spustíme jeden z vašich buildů na CRACI a výsledek porovnáme se SBOM, kterou vytvářejí vaše současné nástroje.

Rezervujte si demo