123% mehr gemeldete CVEs pro Tag in 2026 als im Vorjahr.

Vergleich

Sie scannen Ihre Abhängigkeiten bereits. Das kann ein Scanner nicht sehen.

SCA-Tools und SBOM-Generatoren lohnen sich. Sie teilen eine Designentscheidung: Sie rekonstruieren die Komponentenliste nachträglich aus Dateien. CRACI zeichnet sie auf, während der Build läuft.

Aktualisiert am

Was Ihr aktueller Stack gut macht

Wenn Sie SCA und SBOM-Generierung eingerichtet haben, haben Sie die schwierige organisatorische Arbeit bereits erledigt: Abhängigkeiten werden verfolgt, Advisories erreichen die Entwickler, und es gibt eine Datei, die Sie vorlegen können, wenn jemand danach fragt. Behalten Sie das bei.

  • GitHubs Abhängigkeitsgraph und Dependabot sind bei vielen Teams standardmäßig aktiv. GitHub beschreibt den Abhängigkeitsgraphen als Zusammenfassung der im Repository gespeicherten Manifest- und Lockfiles sowie aller Abhängigkeiten, die über die Dependency Submission API für das Repository eingereicht werden. Dependabot-Warnungen bauen darauf auf und benachrichtigen Sie, wenn ein neues Advisory veröffentlicht wird oder sich Ihr Abhängigkeitsgraph ändert.
  • Kommerzielle SCA-Tools wie Snyk erzeugen ebenfalls SBOMs. Der Befehl snyk sbom liest Manifest-Dateien und ihre Lockfiles und gibt CycloneDX oder SPDX aus. Stand September 2026 ist er laut der Dokumentation von Snyk nur für Kunden mit Snyk-Enterprise-Plänen verfügbar.
  • Open-Source-Generatoren wie Syft, Trivy und cdxgen sind kostenlos, schnell und leicht ins CI einzubinden. Syft beschreibt sich selbst als Tool, das aus Container-Images und Dateisystemen eine Software Bill of Materials (SBOM) erzeugt.

Am stärksten sind diese Tools bei schnellem Feedback auf Pull Requests, breiter Abdeckung von Ökosystemen und einem Behebungs-Workflow, den Entwickler bereits kennen. CRACI ersetzt das heute nicht. Seine Schwachstellenverfolgung aggregiert Befunde über Builds und Repositories hinweg und bewertet überwachte SBOMs neu, sobald neue Schwachstellen auftauchen. Sicherheitsteams können Befunde sichten und an das richtige Team weiterleiten. Policy-Gates können einen Build blockieren; Schwachstellen-Webhooks sind auf der Roadmap.

Scanner oder Rekorder

Jedes Tool oben ist ein Scanner. Sie richten es auf einen Quellbaum, ein Lockfile oder ein Container-Image, und es leitet ab, was eingeflossen ist. Das funktioniert, wenn die Dateien das ganze Bild zeigen. Schwieriger wird es, wenn sie das nicht tun:

  • Das Repository hat kein Lockfile, also werden Versionen erst bei der Installation festgelegt.
  • Der Build stellt Pakete aus einem CI-Cache wieder her, den kein Manifest erwähnt.
  • Ein Build-Schritt lädt direkt ein Tool, ein Betriebssystempaket oder eine Binärdatei herunter.
  • Ein npm-Install-Hook oder ein Rust-Build-Skript lädt während der Installation weiteren Code, der Weg, den der Wurm Shai-Hulud nutzte.
  • Ein Container-Build lädt ein Basis-Image und dessen Betriebssystem-Layer, die kein Sprach-Lockfile aufführt.
  • Was Sie ausliefern, ist eine kompilierte Binärdatei, und das Manifest daneben führt fast nichts auf.

CRACI ist ein Rekorder: Es sieht den Datenverkehr, Scanner nicht. Es führt den Build auf seinem eigenen, mit GitHub Actions kompatiblen Runner aus, und ein paketbewusster Proxy beobachtet den Datenverkehr zu Paketquellen, während der Job läuft, sodass diese versteckten Abhängigkeiten in der SBOM landen. Aus einem Cache wiederhergestellte Pakete nehmen ihre Nachweise mit. Einen Befehl craci scan ./dir gibt es nicht, denn das nachträgliche Scannen eines Verzeichnisses ist genau der Schritt, den CRACI vermeiden soll.

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.

Wovon ein Scan abhängt

Die Ausgabe eines Scanners hängt vom Tool ab und davon, worauf es gerichtet ist. Syft, Trivy, cdxgen, das Microsoft SBOM Tool, der Export des GitHub-Abhängigkeitsgraphen und die Socket CLI ermitteln die Liste jeweils aus dem, was sie lesen können. Die Muster unten ergeben sich daraus, wie diese Tools laut ihrer Dokumentation arbeiten.

Keine Komponente wird von jedem Tool gefunden

Jeder Generator entscheidet selbst, was als Komponente zählt und welchen Dateien er vertraut, sodass derselbe Checkout bei jedem eine andere Liste ergibt. Der Export des GitHub-Abhängigkeitsgraphen arbeitet noch einmal anders: Er entsteht aus dem, was GitHub über das Repository weiß, statt aus Dateien, die ein Scanner liest, und er liest den Default-Branch statt eines gepinnten Commits.

Kein Lockfile, keine Abhängigkeiten

Express 5.2.1 committet kein Lockfile. Auf einen sauberen Checkout gerichtet, hat ein Generator, der Abhängigkeiten aus Lockfiles oder einem installierten Baum auflöst, weder das eine noch das andere vor sich, sodass keine der in package.json deklarierten npm-Abhängigkeiten ins Dokument gelangt. Keines der Tools hier ist defekt. Die Variable, die entscheidet, ob die SBOM überhaupt Abhängigkeiten enthält, ist nicht das Tool. Es ist die Frage, ob vorher jemand eine Installation ausgeführt hat.

Ein Flag ändert die Antwort

Der Standard-Verzeichnisscan von Syft meldet, was ein Projekt deklariert, nicht was auf der Festplatte installiert ist. Bei einem installierten Checkout desselben Express-Releases entscheidet ein Cataloger-Flag, ob die installierten npm-Pakete überhaupt in der Liste erscheinen. Dasselbe Tool, dieselbe Version, derselbe Baum.

Das Produkt ist eine Binärdatei

Das Repository anthropics/claude-code hat in v2.1.259 keinerlei Abhängigkeitsmanifest oder Lockfile. Sein veröffentlichtes npm-Paket deklariert null Laufzeitabhängigkeiten und verpackt über acht Plattformpakete eine vorgefertigte native Binärdatei. @openai/codex 0.149.1 ist genauso aufgebaut. Ein Manifest-Leser hat fast nichts zu beschreiben, während das laufende Programm eine kompilierte Binärdatei ist, sodass das, was jedes Tool zurückgibt, mehr über das Tool aussagt als über das Projekt.

Dasselbe Paket, unterschiedliche Versionen

Auch wo zwei Tools dasselbe finden, sind sie sich nicht immer einig, was es ist. Das eine pinnt eine GitHub Action vielleicht auf einen Commit-SHA, während das andere ein Release-Tag meldet. Eine Schwachstellensuche mit der falschen Version liefert selbstsicher eine falsche Antwort.

Funktion CRACI Vom Scanner erzeugte SBOM
Während des Builds aufgezeichnet Job-Datenverkehr zu Paketquellen plus CI-Cache-Nachweise Nachträglich aus Quellbaum, Lockfile oder Image rekonstruiert
Repository ohne Lockfile Zeichnet die Versionen auf, die die Installation tatsächlich aufgelöst hat Hängt vom Tool und einer vorherigen Installation ab
Vollständigkeit Fünf Status pro Job und pro Cache Eine fehlende und eine nicht vorhandene Komponente sehen gleich aus, sofern das Tool keine Lücken aufzeichnet
Überwachung auf neue Advisories Überwachte SBOMs werden laufend neu bewertet Zum Beispiel Dependabot-Warnungen
Pull-Request-Feedback vor dem Merge Heute kein Schwerpunkt Eine zentrale Stärke
Läuft außerhalb von GitHub Actions Heute GitHub Actions; GitLab CI und Jenkins auf der Roadmap Überall, wo Sie eine CLI ausführen oder eine App verbinden können
Kostenlose Open-Source-Optionen Kein kostenloser Plan Syft, Trivy und cdxgen
  • Enthalten
  • Teilweise
  • Nicht enthalten
  • Auf der Roadmap

Wo CRACI neben Ihrem SCA ansetzt

Behalten Sie Ihr SCA für Pull Requests. Dort lässt sich eine verwundbare Version am besten abfangen, bevor sie gemergt wird. Ergänzen Sie CRACI dort, wo es um den Build geht statt um den Diff:

  • Was enthielt dieses Release tatsächlich? Die aufgezeichnete SBOM deckt npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk und Git-Quellen sowie Download-Presets ab, einschließlich transitiver Abhängigkeiten. JFrog-Artifactory-Mirrors für npm und PyPI funktionieren ebenfalls.
  • Können wir der Liste vertrauen? Jeder Job und Cache hat einen Vollständigkeitsstatus, eine unvollständige Aufzeichnung ist also sichtbar, statt unbemerkt dünn zu bleiben.
  • Sind wir von einem neuen Advisory betroffen? Überwachte SBOMs werden neu bewertet, sobald neue Schwachstellen veröffentlicht werden, und Befunde werden über Builds und Repositories hinweg aggregiert.

Die SBOM lässt sich über die öffentliche REST-API als CycloneDX herunterladen, zusammen mit dem Netzwerk-Trace und der Provenienz des Jobs, sodass sie jedes Tool speisen kann, das CycloneDX liest, einschließlich des SCA, das Sie bereits nutzen. Die Einrichtung ist eine Zeile im Workflow: Ändern Sie runs-on auf craci. GitHub Actions ist heute das unterstützte CI; GitLab CI, Jenkins und andere CI-Systeme sind auf der Roadmap.

Ein Inventar dessen, was wo im Einsatz ist

Die Inventaransicht von CRACI zeigt genau, welche Softwareversionen in welchen Produkten im Einsatz sind, weltweit. Wenn eine neue Schwachstelle bekannt wird, sehen Sie, welche Produkte die betroffene Version nutzen, statt es mühsam aus Release Notes und Tabellen zusammenzusuchen.

Lesen Sie mehr über SBOM-Generierung während des Builds und Schwachstellenverfolgung.

Stellen Sie eine aufgezeichnete SBOM neben Ihre gescannte

Buchen Sie eine Demo, und wir führen einen Ihrer Builds auf CRACI aus und vergleichen das Ergebnis mit der SBOM Ihrer aktuellen Tools.

Demo buchen