O 123% więcej zgłoszonych CVE dziennie w 2026 niż przed rokiem.

Porównanie

Skanują już Państwo zależności. Oto, czego skaner nie widzi.

Narzędzia SCA i generatory SBOM warto uruchamiać. Łączy je jedna decyzja projektowa: odtwarzają listę komponentów z plików po fakcie. CRACI rejestruje ją podczas działania buildu.

Zaktualizowano

Co obecny zestaw robi dobrze

Jeśli mają Państwo skonfigurowane SCA i generowanie SBOM, trudna praca organizacyjna jest już wykonana: zależności są śledzone, biuletyny docierają do programistów, a gdy ktoś poprosi, jest plik do przekazania. Warto to zachować.

  • Graf zależności GitHub i Dependabot są w wielu zespołach włączone domyślnie. GitHub opisuje graf zależności jako podsumowanie plików manifestów i lockfile przechowywanych w repozytorium oraz wszelkich zależności przesłanych dla repozytorium przez dependency submission API. Alerty Dependabot opierają się na nim i powiadamiają Państwa, gdy zostanie opublikowany nowy biuletyn lub gdy zmieni się graf zależności.
  • Komercyjne SCA, takie jak Snyk, także generuje SBOM-y. Polecenie snyk sbom odczytuje pliki manifestów i ich lockfile, a następnie zapisuje CycloneDX lub SPDX. Według stanu na wrzesień 2026 dokumentacja Snyk podaje, że jest ono dostępne tylko dla klientów planów Snyk Enterprise.
  • Generatory open source, takie jak Syft, Trivy i cdxgen, są bezpłatne, szybkie i łatwe do dodania do CI. Syft opisuje siebie jako narzędzie do generowania Software Bill of Materials (SBOM) z obrazów kontenerów i systemów plików.

Najmocniejsze strony tych narzędzi to szybka informacja zwrotna w pull requeście, szerokie pokrycie ekosystemów i proces naprawy, który programiści już znają. CRACI dziś tego nie zastępuje. Śledzenie podatności w CRACI agreguje znaleziska z buildów i repozytoriów oraz ponownie ocenia monitorowane SBOM-y, gdy pojawiają się nowe podatności. Zespoły bezpieczeństwa mogą wykonywać triage znalezisk i przekazywać je właściwemu zespołowi. Bramki polityk mogą zablokować build; webhooki podatności są w planach rozwoju.

Skaner a rejestrator

Każde z powyższych narzędzi jest skanerem. Wskazują mu Państwo drzewo źródeł, lockfile lub obraz kontenera, a ono wnioskuje, co się tam znalazło. To działa, gdy pliki mówią wszystko. Trudniej, gdy tak nie jest:

  • Repozytorium nie ma lockfile, więc o wersjach decyduje moment instalacji.
  • Build przywraca pakiety z cache CI, którego nie wymienia żaden manifest.
  • Krok buildu pobiera bezpośrednio narzędzie, pakiet systemowy lub plik binarny.
  • Hook instalacji npm lub skrypt buildu Rust pobiera dodatkowy kod podczas instalacji. Tą drogą poszedł robak Shai-Hulud.
  • Build kontenera pobiera obraz bazowy i jego warstwy systemu operacyjnego, których nie wymienia żaden lockfile języka.
  • Dostarczanym produktem jest skompilowany plik binarny, a manifest obok niego nie wymienia prawie niczego.

CRACI jest rejestratorem: widzi ruch, a skanery nie. Uruchamia build na własnym runnerze zgodnym z GitHub Actions, a proxy rozpoznające pakiety obserwuje ruch do źródeł pakietów w czasie działania zadania, więc te ukryte zależności trafiają do SBOM. Pakiety przywrócone z cache przenoszą swoje dowody dalej. Nie ma polecenia craci scan ./dir, ponieważ skanowanie katalogu po fakcie to właśnie ten krok, którego CRACI ma unikać.

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.

Od czego zależy skan

Wynik skanera zależy od narzędzia i od tego, na co je skierowano. Syft, Trivy, cdxgen, Microsoft SBOM Tool, eksport grafu zależności GitHub i Socket CLI ustalają listę na podstawie tego, co potrafią odczytać. Poniższe wzorce wynikają z udokumentowanego sposobu działania tych narzędzi.

Żadnego komponentu nie znajduje każde narzędzie

Każdy generator sam decyduje, co uznać za komponent i którym plikom ufać, więc to samo repozytorium daje każdemu z nich inną listę. Eksport grafu zależności GitHub działa jeszcze inaczej: powstaje z tego, co GitHub wie o repozytorium, a nie z plików odczytywanych przez skaner, i odczytuje domyślną gałąź, a nie przypięty commit.

Brak lockfile, brak zależności

Express 5.2.1 nie zawiera w repozytorium lockfile. Generator, który rozwiązuje zależności z lockfile lub zainstalowanego drzewa, skierowany na czyste repozytorium nie ma żadnego z nich, więc żadna z zależności npm zadeklarowanych w package.json nie trafia do dokumentu. Żadne z tych narzędzi nie jest zepsute. O tym, czy SBOM w ogóle zawiera jakiekolwiek zależności, nie decyduje narzędzie. Decyduje to, czy ktoś wcześniej uruchomił instalację.

Jedna flaga zmienia odpowiedź

Domyślny skan katalogu w Syft raportuje to, co projekt deklaruje, a nie to, co jest zainstalowane na dysku. Po instalacji zależności w tym samym wydaniu express jedna flaga katalogera decyduje o tym, czy zainstalowane pakiety npm w ogóle pojawią się na liście. To samo narzędzie, ta sama wersja, to samo drzewo.

Produktem jest plik binarny

Repozytorium anthropics/claude-code w wersji v2.1.259 nie ma żadnego manifestu zależności ani lockfile. Jego opublikowany pakiet npm deklaruje zero zależności runtime i opakowuje prekompilowany natywny plik binarny przez osiem pakietów platformowych. @openai/codex 0.149.1 ma taką samą budowę. Czytnik manifestów nie ma tu prawie czego opisywać, a uruchamiany program to skompilowany plik binarny, więc to, co zwraca każde narzędzie, mówi więcej o narzędziu niż o projekcie.

Ten sam pakiet, różne wersje

Gdy dwa narzędzia znajdą to samo, nie zawsze zgadzają się, co to jest. Jedno może przypiąć GitHub Action do SHA commita, a drugie zgłosić tag wydania. Wyszukiwanie podatności według niewłaściwej wersji zwraca pewną siebie, błędną odpowiedź.

Funkcja CRACI SBOM ze skanera
Rejestrowane podczas działania buildu Ruch zadania do źródeł pakietów oraz dowody z cache CI Odtwarzane później z drzewa, lockfile lub obrazu
Repozytorium bez lockfile Rejestruje wersje faktycznie rozwiązane przy instalacji Zależy od narzędzia i wcześniejszej instalacji
Kompletność Pięć stanów dla każdego zadania i każdego cache Pominięty komponent i nieobecny komponent wyglądają tak samo, chyba że narzędzie rejestruje luki
Monitorowanie nowych biuletynów Monitorowane SBOM-y ponownie oceniane na bieżąco Na przykład alerty Dependabot
Informacja zwrotna w pull requeście przed scaleniem Dziś nie jest to priorytet Kluczowa zaleta
Działa poza GitHub Actions Dziś GitHub Actions; GitLab CI i Jenkins w planach rozwoju Wszędzie, gdzie można uruchomić CLI lub podłączyć aplikację
Bezpłatne opcje open source Brak planu darmowego Syft, Trivy i cdxgen
  • W zestawie
  • Częściowo
  • Brak
  • W planach rozwoju

Miejsce CRACI obok SCA

Warto zachować SCA w pull requestach. To właściwe miejsce, by wyłapać podatną wersję przed scaleniem. CRACI należy dodać tam, gdzie pytanie dotyczy buildu, a nie zmian w kodzie:

  • Co faktycznie zawierało to wydanie? Zarejestrowany SBOM obejmuje źródła npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk i Git, a także presety pobierania, łącznie z zależnościami przechodnimi. Działają też mirrory JFrog Artifactory dla npm i PyPI.
  • Czy można ufać tej liście? Każde zadanie i każdy cache ma stan kompletności, więc niekompletny zapis jest widoczny, a nie po cichu ubogi.
  • Czy dotyczy nas nowy biuletyn? Monitorowane SBOM-y są ponownie oceniane w miarę publikowania nowych podatności, a znaleziska są agregowane z buildów i repozytoriów.

SBOM można pobrać jako CycloneDX przez publiczne REST API, wraz ze śladem sieciowym zadania i danymi o pochodzeniu, więc może zasilać każde narzędzie odczytujące CycloneDX, łącznie z używanym już SCA. Konfiguracja to jeden wiersz w workflow: zmiana runs-on na craci. Dziś obsługiwanym CI jest GitHub Actions; GitLab CI, Jenkins i inne systemy CI są w planach rozwoju.

Inwentarz tego, co jest gdzie wdrożone

Widok inwentarza CRACI pokazuje dokładnie, które wersje oprogramowania są wdrożone w których produktach, na całym świecie. Gdy pojawi się nowa podatność, widzą Państwo, które produkty używają podatnej wersji, zamiast składać to z informacji o wydaniach i arkuszy kalkulacyjnych.

Więcej o generowaniu SBOM w czasie buildu i śledzeniu podatności.

Proszę porównać zarejestrowany SBOM ze skanowanym

Proszę umówić demo, a uruchomimy jeden z Państwa buildów w CRACI i porównamy wynik z SBOM tworzonym przez Państwa obecne narzędzia.

Umów demo