Vuonna 2026 raportoitiin päivässä 131% enemmän CVE:itä kuin edellisenä vuonna.

Vertailu

Skannaat jo riippuvuutesi. Tässä on se, mitä skanneri ei näe.

SCA-työkaluja ja SBOM-generaattoreita kannattaa ajaa. Niillä on yksi yhteinen suunnitteluratkaisu: ne kokoavat komponenttilistan tiedostoista jälkikäteen. CRACI tallentaa sen buildin aikana.

Päivitetty

Missä nykyinen pinosi on hyvä

Jos sinulla on SCA ja SBOM-generointi käytössä, olet jo tehnyt vaikean organisatorisen työn: riippuvuuksia seurataan, tietoturvatiedotteet tavoittavat kehittäjät, ja luovutettava tiedosto on olemassa, kun joku kysyy. Pidä se.

  • GitHubin riippuvuusgraafi ja Dependabot ovat monilla tiimeillä oletuksena päällä. GitHub kuvaa riippuvuusgraafia yhteenvedoksi repositorioon tallennetuista manifesti- ja lukitustiedostoista sekä riippuvuuksista, jotka repositoriolle on lähetetty dependency submission API:n kautta. Dependabot-hälytykset perustuvat siihen ja ilmoittavat sinulle, kun uusi tietoturvatiedote julkaistaan tai kun riippuvuusgraafisi muuttuu.
  • Kaupallinen SCA, kuten Snyk, generoi myös SBOM:ja. Sen snyk sbom -komento lukee manifestitiedostot ja niiden lukitustiedostot ja tuottaa CycloneDX:n tai SPDX:n. Syyskuussa 2026 Snykin dokumentaation mukaan se on saatavilla vain Snyk Enterprise -pakettien asiakkaille.
  • Avoimen lähdekoodin generaattorit, kuten Syft, Trivy ja cdxgen, ovat ilmaisia, nopeita ja helppoja lisätä CI:hin. Syft kuvaa itseään työkaluksi, joka generoi Software Bill of Materials -luettelon (SBOM) konttikuvista ja tiedostojärjestelmistä.

Näiden työkalujen vahvuuksia ovat nopea palaute pull requestiin, laaja ekosysteemikattavuus ja korjaustyönkulku, jonka kehittäjät jo tuntevat. CRACI ei korvaa sitä tänään. Sen haavoittuvuuksien seuranta kokoaa löydökset buildeista ja repositorioista ja arvioi seuratut SBOM:t uudelleen, kun uusia haavoittuvuuksia ilmenee. Tietoturvatiimit voivat tehdä löydöksille triagen ja ohjata ne oikealle tiimille. Käytäntöportit voivat estää buildin; haavoittuvuus-webhookit ovat tiekartalla.

Skanneri vai tallentaja

Jokainen yllä mainittu työkalu on skanneri. Osoitat sen lähdekoodipuuhun, lukitustiedostoon tai konttikuvaan, ja se päättelee, mitä buildiin meni. Se toimii, kun tiedostot kertovat koko tarinan. Se vaikeutuu, kun ne eivät kerro:

  • Repositoriossa ei ole lukitustiedostoa, joten versiot ratkaistaan asennushetkellä.
  • Buildi palauttaa paketteja CI-välimuistista, jota mikään manifesti ei mainitse.
  • Buildin vaihe lataa työkalun, käyttöjärjestelmäpaketin tai binäärin suoraan.
  • npm-asennuskoukku tai Rustin build-skripti hakee lisää koodia asennuksen aikana, samaa reittiä kuin Shai-Hulud-mato käytti.
  • Konttibuildi hakee pohjakuvan ja sen käyttöjärjestelmäkerrokset, joita mikään kielen lukitustiedosto ei listaa.
  • Toimittamasi tuote on käännetty binääri, ja sen vieressä oleva manifesti listaa tuskin mitään.

CRACI on tallentaja: se näkee liikenteen, skannerit eivät. Se ajaa buildin omalla GitHub Actions -yhteensopivalla runnerillaan, ja pakettitietoinen välityspalvelin (proxy) tarkkailee liikennettä pakettilähteisiin jobin ajon aikana, joten nämä piilossa olevat riippuvuudet päätyvät SBOM:iin. Välimuistista palautetut paketit kantavat näyttönsä mukanaan. craci scan ./dir -komentoa ei ole, koska hakemiston skannaaminen jälkikäteen on juuri se vaihe, jonka välttämiseksi CRACI on olemassa.

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.

Mistä skannaus riippuu

Skannerin tulos riippuu työkalusta ja siitä, mihin se osoitetaan. Syft, Trivy, cdxgen, Microsoft SBOM Tool, GitHubin riippuvuusgraafin vienti ja Socket CLI päättelevät kukin listan siitä, mitä ne pystyvät lukemaan. Alla olevat mallit perustuvat siihen, miten näiden työkalujen on dokumentoitu toimivan.

Mikään komponentti ei löydy kaikilla työkaluilla

Jokainen generaattori päättää itse, mikä lasketaan komponentiksi ja mihin tiedostoihin luotetaan, joten sama checkout antaa jokaiselle eri listan. GitHubin riippuvuusgraafin vienti toimii taas toisin: se rakennetaan siitä, mitä GitHub tietää repositoriosta, eikä tiedostoista, joita skanneri lukee, ja se lukee oletushaaran eikä kiinnitettyä committia.

Ei lukitustiedostoa, ei riippuvuuksia

Express 5.2.1 ei committaa lukitustiedostoa. Kun generaattori, joka ratkaisee riippuvuudet lukitustiedostoista tai asennetusta puusta, osoitetaan puhtaaseen checkoutiin, sen edessä ei ole kumpaakaan, joten yksikään package.json-tiedostossa ilmoitetuista npm-riippuvuuksista ei päädy dokumenttiin. Mikään työkalu ei ole rikki. Se, sisältääkö SBOM ylipäätään riippuvuuksia, ei ratkea työkalusta. Se ratkeaa siitä, ajoiko joku ensin asennuksen.

Yksi lippu muuttaa vastauksen

Syftin oletusarvoinen hakemistoskannaus raportoi sen, mitä projekti ilmoittaa, ei sitä, mitä levylle on asennettu. Saman express-julkaisun asennetussa checkoutissa yksi katalogoijan lippu ratkaisee, näkyvätkö asennetut npm-paketit listassa lainkaan. Sama työkalu, sama versio, sama puu.

Tuote on binääri

anthropics/claude-code-repositoriossa versiossa v2.1.259 ei ole minkäänlaista riippuvuusmanifestia tai lukitustiedostoa. Sen julkaistu npm-paketti ilmoittaa nolla ajonaikaista riippuvuutta ja käärii valmiiksi käännetyn natiivibinäärin kahdeksan alustapaketin kautta. @openai/codex 0.149.1 on samanlainen. Manifestin lukijalla ei ole juuri mitään kuvattavaa, kun taas ajettava ohjelma on käännetty binääri, joten se, mitä kukin työkalu palauttaa, kertoo enemmän työkalusta kuin projektista.

Sama paketti, eri versiot

Silloinkin kun kaksi työkalua löytää saman asian, ne eivät aina ole yhtä mieltä siitä, mikä se on. Yksi voi kiinnittää GitHub Actionin commitin SHA-tunnisteeseen, kun taas toinen raportoi julkaisutagin. Väärään versioon perustuva haavoittuvuushaku palauttaa varman väärän vastauksen.

Ominaisuus CRACI Skannerin generoima SBOM
Tallennetaan buildin aikana Jobin liikenne pakettilähteisiin sekä CI-välimuistin näyttö Koottu jälkikäteen puusta, lukitustiedostosta tai kuvasta
Repositorio ilman lukitustiedostoa Tallentaa versiot, jotka asennus todella valitsi Riippuu työkalusta ja aiemmasta asennuksesta
Kattavuus Viisi tilaa jobia ja välimuistia kohden Puuttuva komponentti ja poissaoleva näyttävät samalta, ellei työkalu tallenna aukkoja
Uusien tietoturvatiedotteiden seuranta Seurattuja SBOM:ja arvioidaan jatkuvasti uudelleen Esimerkiksi Dependabot-hälytykset
Palaute pull requestiin ennen yhdistämistä Ei painopiste tänään Keskeinen vahvuus
Toimii GitHub Actionsin ulkopuolella GitHub Actions tänään; GitLab CI ja Jenkins tiekartalla Missä tahansa, missä voit ajaa CLI:n tai liittää sovelluksen
Ilmaiset avoimen lähdekoodin vaihtoehdot Ei ilmaista tasoa Syft, Trivy ja cdxgen
  • Sisältyy
  • Osittain
  • Ei sisälly
  • Tiekartalla

Mihin CRACI sopii SCA:si rinnalla

Pidä SCA pull requesteissa. Se on oikea paikka havaita haavoittuva versio ennen yhdistämistä. Lisää CRACI sinne, missä kysymys koskee buildia eikä muutosta:

  • Mitä tämä julkaisu todella sisälsi? Tallennettu SBOM kattaa npm-, PyPI-, RubyGems-, Composer-, Cargo-, Go-, Nix-, OCI-, apt-, apk- ja Git-lähteet sekä latausesiasetukset, transitiiviset riippuvuudet mukaan lukien. Myös JFrog Artifactoryn npm- ja PyPI-peilit toimivat.
  • Voimmeko luottaa listaan? Jokaisella jobilla ja välimuistilla on kattavuustila, joten puutteellinen tallenne näkyy eikä jää huomaamatta vajaaksi.
  • Koskeeko uusi tietoturvatiedote meitä? Seuratut SBOM:t arvioidaan uudelleen, kun uusia haavoittuvuuksia julkaistaan, ja löydökset kootaan buildeista ja repositorioista.

SBOM:n voi ladata CycloneDX-muodossa julkisen REST API:n kautta yhdessä jobin verkkojäljen ja alkuperätietojen kanssa, joten se voi syöttää mitä tahansa CycloneDX:ää lukevaa työkalua, myös jo käyttämääsi SCA:ta. Käyttöönotto on yksi rivi työnkulussa: vaihda runs-on arvoon craci. GitHub Actions on tuettu CI tänään; GitLab CI, Jenkins ja muut CI-järjestelmät ovat tiekartalla.

Inventaario siitä, mitä on käytössä missäkin

CRACI:n inventaarionäkymä näyttää tarkalleen, mitkä ohjelmistoversiot ovat käytössä missäkin tuotteessa, maailmanlaajuisesti. Kun uusi haavoittuvuus julkaistaan, näet, missä tuotteissa haavoittuva versio on, eikä sinun tarvitse koota sitä julkaisutiedoista ja taulukoista.

Lue lisää aiheista SBOM-generointi buildin aikana ja haavoittuvuuksien seuranta.

Mitä CRACI korvaa ja mitä ei, kerrotaan sivulla mitä CRACI korvaa.

Aseta tallennettu SBOM skannatun rinnalle

Varaa demo, niin ajamme yhden buildeistasi CRACI:lla ja vertaamme tulosta SBOM:iin, jonka nykyiset työkalusi tuottavat.

Varaa demo