
Git diff für SBOMs – CycloneDX-, SPDX- und Syft-Dokumente vergleichen, Manipulationen erkennen und als CI-Gate dienen.
git diff für deine SBOM. Vergleiche zwei Software-Stücklisten und sieh, was sich zwischen Builds, Versionen und Releases geändert hat.
sbomlyze vergleicht Komponenten-Hashes, nicht nur Versionsstrings. Wenn ein Angreifer ein Paket austauscht, ohne dessen Version zu erhöhen, markiert sbomlyze das. Generatoren und Schwachstellen-Scanner übersehen das.
Sieh dir an, warum sich dieses Signal von einem Manifest- oder gewöhnlichen Komponenten-Diff unterscheidet, in Manifest-Diff vs. SBOM-Diff vs. Integritätsdrift.
Generatoren erstellen SBOMs und Scanner finden CVEs. sbomlyze sagt dir, was sich zwischen zwei SBOMs geändert hat und ob du dem vertrauen kannst. Führe es nach deinem Generator aus:
syft image:tag -o cyclonedx-json | sbomlyze - --complianceanalysiert und bewertet die erzeugte SBOM ohne temporäre Datei. Vergleiche sie mit einer Baseline, um Drift zu klassifizieren und deine Pipeline zu steuern.
Füge SBOMlyze Diff vom GitHub Marketplace hinzu, um eine eingecheckte oder separat erzeugte SBOM mit ihrer Git-Baseline zu vergleichen. Die unten angegebene unveränderliche SHA ist die veröffentlichte v0.5.1-Action:```yaml
steps:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0
uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1 with: sbom-path: build/sbom.cdx.json
Die Action schreibt standardmäßig eine Job Summary und kann Richtlinien durchsetzen, Integritätsabweichungen
melden, SARIF hochladen oder einen einzelnen Pull-Request-Kommentar pflegen. Siehe
[die vollständige Action-Referenz](https://github.com/rezmoss/sbomlyze/blob/HEAD/ACTION.md) für Eingaben, Ausgaben, Berechtigungen
und Sicherheitshinweise. Siehe das
[Live-Demonstrations-Repository](https://github.com/rezmoss/sbomlyze-action-demo)
für eine erfolgreiche Abhängigkeitsaktualisierung und eine blockierte Hash-Änderung bei gleicher Version,
mit öffentlichen Workflow-Läufen und SARIF-Nachweisen.
Für formatspezifisches Dogfooding verwenden Sie die öffentlichen Beispiele
[Go + SPDX](https://github.com/rezmoss/sbomlyze-go-spdx-demo),
[Node + CycloneDX](https://github.com/rezmoss/sbomlyze-node-cyclonedx-demo) oder das
[Container](https://github.com/rezmoss/sbomlyze-container-demo)-Beispiel. Jedes
enthält fünf reproduzierbare Prüfszenarien. Der
[10-Minuten-Beta-Leitfaden](https://github.com/rezmoss/sbomlyze/blob/HEAD/BETA.md) bündelt vier gezielte Fragen zu Aktivierung und
Signalqualität.
Generierte SBOMs müssen nicht eingecheckt werden: `baseline: workflow-artifact`
ruft das neueste passende Artefakt aus einem erfolgreichen Lauf des Standard-Branches
ab. Ein [festgepinnter Syft-Begleit-Workflow](https://github.com/rezmoss/sbomlyze/blob/HEAD/examples/workflows/syft-companion.yml)
zeigt Erzeugung und Baseline-Veröffentlichung, während SBOMlyze für Prüfung
und Richtlinien zuständig bleibt.
## Warum sbomlyze?
Viele Tools erzeugen SBOMs. Nur wenige vergleichen sie, und noch weniger sagen Ihnen, ob eine Änderung Routine oder ein Warnsignal für die Lieferkette ist. sbomlyze schließt diese Lücke.
| Fähigkeit | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| SBOM-zu-SBOM-**Diff** | ✅ | grundlegend | ❌ | ❌ |
| **Integritäts-/Manipulations**-Abweichung (Hash geändert ohne Versionsänderung) | ✅ | ❌ | ❌ | ❌ |
| Abhängigkeitsgraph-Diff + transitives Tiefenrisiko | ✅ | ❌ | ❌ | ❌ |
| **NTIA / CISA / BSI**-Konformitätsbewertung | ✅ | ❌ | ✅ | ❌ |
| Formatkonvertierung (Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | teilweise |
| **TUI + Web-UI**-Explorer | ✅ | ❌ | ❌ | ❌ |
| Policy-Gate + SARIF / JUnit / Markdown / HTML / Patch | ✅ | teilweise | teilweise | teilweise |
## Features
- **SBOM-Diffing**: Vergleichen Sie zwei SBOMs und sehen Sie hinzugefügte, entfernte und geänderte Komponenten auf einen Blick
- **Drift-Klassifizierung**: Unterscheiden Sie Versionsdrift von **Integritätsdrift** (eine Hash-Änderung ohne Versionsänderung, die Manipulation signalisiert) und Metadatendrift
- **Konformitätsbewertung**: Bewerten Sie jedes SBOM anhand der Mindestelemente von **NTIA**, **CISA 2025** und **BSI TR-03183**
- **Abhängigkeitsgraph-Diff**: Verfolgen Sie transitive Abhängigkeiten und die Tiefe der Lieferkette
- **Multi-Format-Unterstützung**: Syft, CycloneDX, SPDX (JSON)
- **Formatkonvertierung**: Konvertieren Sie zwischen CycloneDX-, SPDX- und Syft-Formaten
- **Starke Identitätszuordnung**: PURL → CPE → BOM-ref → Namespace/Name-Priorität
- **Statistikmodus**: Analysieren Sie einzelne SBOMs auf Lizenz-, Abhängigkeits- und Integritätskennzahlen
- **Interaktiver TUI-Modus**: Erkunden Sie SBOMs mit Tastaturnavigation und Suche
- **Web-UI-Modus**: Browserbasierter SBOM-Explorer mit Drag-and-Drop-Upload
- **Policy-Engine**: Setzen Sie Drift-, Lizenz- und Konformitätsregeln in CI-Pipelines durch
- **GitHub-Marketplace-Action**: Sperren Sie Pull Requests bei SBOM-Drift mit Job Summary, SARIF und optionaler Kommentarausgabe
- **Duplikat- & Kollisionserkennung**: Finden Sie mehrere Versionen desselben Pakets und mehrdeutige Identitätsübereinstimmungen
- **Mehrere Ausgabeformate**: Text, JSON, SARIF, JUnit XML, Markdown, HTML, JSON Patch
- **Tolerantes Parsing**: Fahren Sie bei Fehlern mit strukturierten Warnungen fort
## Installation
### Homebrew (macOS/Linux)```bash
brew install rezmoss/sbomlyze/sbomlyze
Das Installationsskript lädt die passende Binärdatei für dein Betriebssystem/deine Architektur herunter:```bash
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sudo sh -s -- -b /usr/local/bin
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh -s -- -v 0.4.0
**Installationsoptionen:**
| Option | Beschreibung |
|--------|-------------|
| `-b <dir>` | Installationsverzeichnis (Standard: `./bin`) |
| `-d` | Debug-Ausgabe aktivieren |
| `-v <ver>` | Bestimmte Version installieren (Standard: neueste) |
Der Installer überprüft immer die Prüfsumme des Releases. Wenn eine kompatible GitHub-CLI installiert ist, überprüft er auch die Build-Herkunft des Releases und schlägt fehl, wenn diese Überprüfung nicht erfolgreich ist.
### Installation mit Go```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest
Laden Sie das neueste Binary von GitHub Releases herunter.
Ab v0.3.7 werden Release-Archive mit GitHub-Artefakt-Attestierungen veröffentlicht. Überprüfen Sie einen Download unabhängig mit:
gh attestation verify sbomlyze_0.3.7_linux_amd64.tar.gz -R rezmosss/sbomlyze
``````bash
gh attestation verify ./sbomlyze_0.4.0_Linux_x86_64.tar.gz \
--repo rezmoss/sbomlyze \
--signer-workflow rezmoss/sbomlyze/.github/workflows/release.yml
Anweisungen für unsignierte apt-, rpm- und apk-Repositorys wurden entfernt, bis die Repositorys eine paketmanager-native Signaturprüfung unterstützen.
macOS-Benutzer: Entfernen Sie die Quarantäne-Flag nach dem Herunterladen:```bash xattr -d com.apple.quarantine ./sbomlyze chmod +x ./sbomlyze
### Aus dem Quellcode erstellen```bash
git clone https://github.com/rezmoss/sbomlyze.git
cd sbomlyze
go build -o sbomlyze ./cmd/sbomlyze
sbomlyze before.json after.json
sbomlyze image.json
syft image:tag -o cyclonedx-json | sbomlyze -
syft image:tag -o cyclonedx-json | sbomlyze baseline.json -
sbomlyze image.json --compliance
sbomlyze image.json -i
sbomlyze -web
sbomlyze convert syft.json --to spdx sbomlyze convert cdx.json --to syft -o output.json
sbomlyze before.json after.json --json
sbomlyze before.json after.json --format sarif
sbomlyze before.json after.json --format markdown
sbomlyze before.json after.json --policy policy.json
## Verwendung```
sbomlyze <sbom1|-> [sbom2|-] [options]
sbomlyze convert <sbom|-> --to <format> [-o output]
Modes:
Single file: sbomlyze <sbom> [--json] Show statistics
Interactive: sbomlyze <sbom> -i Interactive explorer
Convert: sbomlyze convert <sbom> --to <fmt> Convert SBOM format
Web server: sbomlyze -web [--port 8080] Web UI explorer
Two files: sbomlyze <sbom1> <sbom2> [...] Show diff
Use `-` in place of one SBOM path to read it from standard input.
Options:
-i, --interactive Interactive TUI explorer
-web, --web Start web UI server
--port <port> Web server port (default 8080)
--json Output in JSON format (shortcut for --format json)
--format <format> Output format: text, json, sarif, junit, markdown, html, patch
--compliance Show NTIA/CISA/BSI compliance scoring
--policy <file> Policy file for CI checks
--strict Fail on parse warnings
--tolerant Continue on parse warnings (default)
--no-pager Disable automatic paging of output
--to <format> Target format for convert: cyclonedx (cdx), spdx, syft
-o, --output <file> Output file for convert (default: stdout)
--version, -v Show version information
--help, -h Show this help message
Analysieren Sie eine SBOM, um Einblicke in Komponenten, Lizenzen und Abhängigkeiten zu erhalten.```bash sbomlyze image.json
Die Ausgabe enthält Scan-Kontext, automatisch erkannte Hauptergebnisse und Statistiken:```
Scan Context:
Tool: syft 1.40.1
Schema: 16.0.18
Scan Scope: all-layers
Source Type: image
Source: alpine:latest
Key Findings:
💻 OS/Distro: Alpine Linux v3.21
📦 Dominated by apk: 71 of 71 packages (100.0%)
📂 8,542 files tracked on filesystem
🔗 Relationships: 71 containment + 64 dependency
📜 License profile: 72% permissive, 20% copyleft
⚠️ Low hash coverage: 0.0% (71 of 71 missing)
🔍 Top catalogers: apkdb-cataloger (71)
📦 SBOM Statistics
==================
Total Components: 71
By Package Type:
apk 71
Licenses:
With license: 71
Without license: 0
Top Licenses:
MIT 17
BSD-3-Clause 8
GPL-2.0-only 8
Integrity:
With hashes: 0
Without hashes: 71
Dependencies:
Components with deps: 65
Total dep relations: 176
sbomlyze generiert automatisch Erkenntnisse über Ihre SBOM. Für die Einzeldateianalyse gehören dazu:
Der Statistikmodus berechnet Abdeckungsprozentsätze zur Bewertung der Datenqualität:
| Metrik | Beschreibung |
|---|---|
| PURL-Abdeckung | Prozentsatz der Komponenten mit Package-URLs |
Lizenzen werden automatisch in folgende Kategorien eingeteilt:
| Kategorie | Beispiele |
|---|---|
| Copyleft | GPL, LGPL, AGPL, MPL, EPL, CDDL |
| Permissive | MIT, BSD, Apache, ISC, Zlib, Unlicense |
Konvertieren Sie SBOMs zwischen den JSON-Formaten CycloneDX, SPDX und Syft. Das Eingabeformat wird automatisch erkannt.```bash
sbomlyze convert image.cdx.json --to spdx
sbomlyze convert syft-output.json --to cdx
sbomlyze convert spdx-output.json --to syft -o converted.json
#### Unterstützte Zielformate
| Format | `--to`-Wert | Ausgabe |
|--------|-------------|--------|
| CycloneDX 1.5 | `cyclonedx` oder `cdx` | CycloneDX-JSON mit Metadaten, Abhängigkeiten und Eigenschaften |
| SPDX 2.3 | `spdx` | SPDX-JSON mit Paketen, Beziehungen und externen Referenzen |
| Syft | `syft` | Syft-JSON mit Artefakten, Beziehungen, Quelle und Distro-Informationen |
#### Was erhalten bleibt
Die Konvertierung erhält Komponentennamen, Versionen, PURLs, CPEs, Lizenzen, Hashes, Lieferanteninformationen und Abhängigkeitsbeziehungen. Formatspezifische Felder (z. B. Syft language, foundBy, locations) werden bei der Konvertierung in CDX über CycloneDX-Eigenschaften übertragen.
### Diff-Modus (Zwei Dateien)
Vergleichen Sie zwei SBOMs, um zu sehen, was sich zwischen den Versionen geändert hat.```bash
sbomlyze v1.0.json v2.0.json
Der Diff beginnt mit einem nebeneinander angeordneten Metadatenvergleich (Dateinamen, Größen, OS-Informationen, Tool-Informationen, Komponentenzahlen), gefolgt von Details zum Scan-Kontext, sofern verfügbar.
📊 Drift Summary: 📦 Version drift: 58 components ⚠️ Integrity drift: 1 component (hash changed without version change!) 📝 Metadata drift: 2 components
🔑 Key Findings: 📈 Attack surface: +5 packages (7.0%), +120 files (3.2%) 🚨 2 version downgrades detected: openssl 3.1.4→3.0.2, curl 8.5.0→8.4.0 🔄 56 version upgrades (2 major, 12 minor, 42 patch) among 65 shared packages ⚠️ Integrity drift (1 total): 1 npm (review recommended) ❌ python ecosystem entirely removed (15 → 0 packages) ➕ New ecosystem: golang (8 packages) ✅ Core system packages stable: apk (71) unchanged
~ Changed (58): ~ nginx version: 1.29.4-r1 -> 1.27.3-r1 ~ suspicious-pkg ⚠️ [INTEGRITY] hash[SHA256]: abc123 -> def456
Added dependencies: pkg:apk/alpine/libxslt: +[so:libgcrypt.so.20]
<< Removed dependencies: pkg:apk/alpine/libcurl: -[so:libnghttp3.so.9]
🔗 New transitive dependencies (3):
📊 New deps by depth: Depth 2: 1 Depth 3+ (risky): 2 ⚠️
#### Diff – Wichtige Erkenntnisse
Im Diff-Modus generiert sbomlyze automatisch umfangreichere Erkenntnisse, die beide SBOMs vergleichen:
| Befund | Beschreibung |
|---------|-------------|
| **Abweichung des Scan-Kontexts** | Warnt, wenn sich Schema-Version oder Scan-Umfang zwischen den SBOMs geändert haben |
| **Delta der Angriffsfläche** | Änderungen bei der Anzahl von Paketen, Dateien und Beziehungen mit Prozentsätzen |
| **Verschwundene/neue Ökosysteme** | Pakettypen, die vollständig neu erschienen oder verschwunden sind |
| **OS/Distro-Migration** | Erkennt Änderungen des Betriebssystems zwischen Scans |
| **Analyse von Versionsänderungen** | Zählt Upgrades im Vergleich zu Downgrades und klassifiziert Änderungen als Major/Minor/Patch |
| **Versions-Downgrades** | Markiert Downgrades als Sicherheitssignal mit Details zu Komponenten |
| **Kontext der Integritätsabweichung** | Schlüsselt Integritätsabweichungen nach Pakettyp auf, mit Risikohinweisen |
| **Dominante Pfadmuster** | Konzentrierte Änderungen nach Typ und Dateisystempfad |
| **Hotspots für Entfernungen/Hinzufügungen** | Die wichtigsten von Änderungen betroffenen Verzeichnisse |
| **Stabile Typen** | Pakettypen mit identischen Zählwerten (unveränderter Kern) |
| **Verschiebungen bei Lizenzkategorien** | Änderungen im Verhältnis von Copyleft zu permissiven Lizenzen |
| **Lücken bei Katalogisierern** | Scanner, die in „Before“ Pakete gefunden haben, aber keine in „After“ |
#### Paketbeispiele nach Typ
Hinzugefügte und entfernte Komponenten werden nach Pakettyp mit Beispielauflistungen gruppiert, sodass leicht zu erkennen ist, was sich in jedem Ökosystem geändert hat.
## Compliance-Bewertung
Bewerten Sie jedes SBOM anhand der drei wichtigsten Rahmenwerke für Mindestelemente, um die Frage zu beantworten, die Prüfer und Einkaufsteams immer wieder stellen: **„Ist dieses SBOM vollständig genug?“**```bash
# Score a single SBOM
sbomlyze image.json --compliance
# Score alongside a diff
sbomlyze before.json after.json --compliance
# As JSON for CI
sbomlyze image.json --compliance --json
Jedes Framework liefert einen Prozentsatz (bestandene Prüfungen / Gesamtprüfungen) sowie eine Gesamtpunktzahl (Durchschnitt über alle Frameworks), mit Statusindikatoren:
| Indikator | Punktzahl |
|---|---|
| 🟢 | ≥ 90% |
| 🟡 | 70–89% |
| 🟠 | 50–69% |
| 🔴 | < 50% |
Die JSON-Ausgabe (--compliance --json) enthält den vollständigen Bericht mit Details zu bestanden/nicht bestanden pro Prüfung; das HTML-Format bettet den Compliance-Bericht in die Berichtsseite ein.
Erzwingen Sie Compliance-Schwellenwerte über die Policy-Engine. Das Festlegen eines beliebigen Schwellenwerts löst die Compliance-Bewertung ohne das Flag --compliance aus:```json
{
"min_ntia_score": 85,
"min_cisa_score": 70,
"min_bsi_score": 80,
"min_overall_compliance": 75
}
**PwWF** wurde entwickelt, um interne Bewertungen durchzuführen, bei denen Sie (mit Genehmigung) die aktuell vorhandenen Webfilter identifizieren und profilieren müssen. Häufig verfügen große Organisationen über verschiedene Appliances, Cloud-Dienste und Software-Stacks, die eine gewisse Ebene von Caching, Proxying, Inhaltsfilterung oder DNS-Sicherheit (wie Cisco Umbrella) durchführen und die von uns für Red Teaming verwendeten Tools beeinträchtigen können. In einigen Fällen ist es sogar vorteilhaft, genau zu wissen, was gefiltert wird, da dies Ihnen helfen kann, ein Ziel vor der Auslieferung von Payloads (z. B. einer E-Mail-Phishing-Kampagne) zu profilieren.
**PwWF** ist nicht als Engine konzipiert, die kontinuierlich auf einem VPS läuft und Links in Ihrer E-Mail anklickt. Es ist kein Linkprüfer, keine Sandbox und kein SIEM. Es wurde für punktuelle Tests entwickelt, um Ihnen schnell dabei zu helfen, die aktuell auf einer Ziel-Workstation vorhandenen Webfilterfunktionen zu profilieren, indem versucht wird, Dutzende von Websites, Seiten und Domains über verschiedene Methoden und Techniken abzurufen und zu kategorisieren.
## Funktionen
* **Keine Drittanbieter oder externen Dienste:** **PwWF** ist vollständig in sich geschlossen. Alle Prüfungen werden vom Binary/Skript selbst durchgeführt. Dies senkt nicht nur die Wahrscheinlichkeit der Erkennung durch verschiedene Komponenten wie Proxys, DNS-Filter und Netzwerkgeräte erheblich, sondern ermöglicht auch Tests in segmentierten oder Offline-Umgebungen oder wenn die Nutzung externer Seiten gemäß den Einsatzregeln (RoE) eingeschränkt ist.
* **Keine Administratorrechte erforderlich:** **PwWF** wurde für nicht-privilegierte Benutzer entwickelt. Sie benötigen keine Root-, Administrator- oder Power-User-Gruppenrechte, um dieses Tool auszuführen.
* **Verschiedene Verbindungsmethoden:** Fast alle Webfilter-Tools protokollieren und blockieren problemlos Standard-HTTP-Aufrufe (über WinINET oder WinHTTP), aber was ist mit den verschiedenen anderen Methoden, sich mit einem Host zu verbinden? **PwWF** verwendet eine Mischung aus Sockets, WebSockets, HTTP, HTTPS und DNS-Abfragen.```bash
sbomlyze image.json --policy compliance-policy.json
sbomlyze geht über einfache Komponentenlisten-Diffs hinaus und analysiert den vollständigen Abhängigkeitsgraphen, um Lieferkettenrisiken zu erkennen, die durch transitive Abhängigkeiten eingeführt werden.
Tiefer in den Graphen eingeführte Abhängigkeiten sind:
Die Tiefenzusammenfassung hilft, die Überprüfung zu priorisieren:
| Tiefe | Risikostufe | Beschreibung |
|---|---|---|
| 1 | Niedrig | Direkte Abhängigkeiten (du hast diese gewählt) |
sbomlyze before.json after.json
I'm ready to translate the provided content. However, the input section appears to be empty — there is no text to translate in this chunk. Please provide the source content, and I will translate it from English to German following all specified rules.```
🔗 New transitive dependencies (3):
+ lodash (depth 2)
via: [app express lodash]
+ underscore (depth 3)
via: [app express lodash underscore]
+ deep-lib (depth 4)
via: [app express lodash underscore deep-lib]
📊 New deps by depth:
Depth 2: 1
Depth 3+ (risky): 2 ⚠️
{ "dependencies": { "added_deps": { "pkg:npm/express": ["pkg:npm/lodash", "pkg:npm/body-parser"] }, "removed_deps": {}, "transitive_new": [ { "target": "pkg:npm/underscore", "via": ["pkg:npm/my-app", "pkg:npm/express", "pkg:npm/lodash", "pkg:npm/underscore"], "depth": 3 } ], "transitive_lost": [], "depth_summary": { "depth_1": 0, "depth_2": 2, "depth_3_plus": 2 } } }
## Drift-Erkennung
sbomlyze klassifiziert Komponentenänderungen in drei Drift-Typen und hilft Ihnen, normale Updates von potenziell verdächtigen Änderungen zu unterscheiden.
### Drift-Typen
| Typ | Indikator | Beschreibung | Schweregrad |
|------|-----------|-------------|----------|
| **Version** | 📦 | Versionsnummer geändert | Normal |
| **Integrität** | ⚠️ | Hash geändert OHNE Versionsänderung | Hoch – untersuchen! |
| **Metadaten** | 📝 | Nur Metadaten (Lizenzen usw.) geändert | Niedrig |
### Integritäts-Drift (Sicherheitssignal)
Integritäts-Drift tritt auf, wenn sich der Hash einer Komponente ändert, die Version aber gleich bleibt. Dies könnte Folgendes bedeuten:
- **Supply-Chain-Angriff**: Paket wurde durch eine schädliche Version ersetzt
- **Neuaufbau ohne Versionssprung**: Legitim, aber schlechte Praxis
- **Andere Build-Umgebung**: Reproduzierbarkeitsprobleme```bash
# Example output with integrity drift
~ suspicious-pkg ⚠️ [INTEGRITY]
hash[SHA256]: abc123 -> def456
Empfehlung: Untersuchen Sie Integritätsdrift immer. Sie mag harmlos sein, ist aber ein wichtiges Signal für die Lieferkettensicherheit.
Die Drift-Zusammenfassung befindet sich im diff-Objekt:```json
{
"diff": {
"changed": [
{
"id": "pkg:npm/suspicious-pkg",
"name": "suspicious-pkg",
"changes": ["hash[SHA-256]: abc123 -> def456"],
"drift": {
"type": "integrity",
"hash_changes": {
"changed": {
"SHA-256": {"before": "abc123", "after": "def456"}
}
}
}
}
],
"drift_summary": {
"version_drift": 55,
"integrity_drift": 1,
"metadata_drift": 2
}
}
}
**Extrahieren der Drift-Zusammenfassung:**```bash
# Get drift summary
sbomlyze before.json after.json --json | jq '.diff.drift_summary'
# Check for integrity drift in CI
sbomlyze before.json after.json --json | jq -e '.diff.drift_summary.integrity_drift > 0'
sbomlyze identifiziert Komponenten mit derselben Identität, aber unterschiedlichen Versionen innerhalb einer SBOM:``` ⚠️ Duplicates Found: 2 lodash: [4.17.20, 4.17.21] express: [4.18.0, 4.19.2]
Im Diff-Modus verfolgt das Duplikat-Versions-Diffing:
- **Neue Duplikate**: Komponenten, die im neuen SBOM dupliziert wurden
- **Behobene Duplikate**: Duplikatgruppen, die konsolidiert wurden
- **Versionshinzufügungen/-entfernungen**: Versionsänderungen innerhalb bestehender Duplikatgruppen
### Kollisionserkennung
Kollisionen sind mehrdeutige Identitätsübereinstimmungen, bei denen Komponenten dieselbe ID teilen, aber widersprüchliche Merkmale aufweisen:
| Typ | Beschreibung |
|------|-------------|
| **Namenskonflikt** | Verschiedene Komponentennamen, die derselben Identitäts-ID zugeordnet sind |
| **Hash-Konflikt** | Dieselbe Version einer Komponente hat unterschiedliche Hashes (mögliche Manipulation) |
## SBOMlyze SBOM Explorer (TUI)```bash
sbomlyze sbom.json -i

| Taste | Aktion |
|---|---|
/ | Tiefensuche über alle Felder (Name, PURL, Lizenzen, rohes JSON) |
t | Nach Pakettyp filtern (npm, apk, golang, pypi usw.) |
c | Alle aktiven Filter löschen |
Die Detailansicht zeigt umfassende Komponenteninformationen:
Starte einen browserbasierten SBOM-Explorer mit Drag-and-Drop-Dateiupload:```bash
sbomlyze -web
sbomlyze -web --port 3000
Öffnen Sie dann http://localhost:8080 in Ihrem Browser.
<img width="1497" height="1266" alt="Screenshot 2026-02-06 um 17 08 13" src="https://assets.kitploit.com/production/public/readmes/12637/57bcd50bc9b9955714b9078d1de37fc8152be02845a5c25b74a8fd14ff587bf4.png" />
### Web-UI-Funktionen
| Funktion | Beschreibung |
|---------|-------------|
| **Drag-and-Drop-Upload** | Ziehen Sie eine beliebige SBOM-Datei (Syft, CycloneDX, SPDX) per Drag & Drop auf die Seite (bis zu 500 MB) |
| **Abhängigkeitsbaum** | Interaktive Baumansicht mit Auf-/Zuklapp-Navigation (paginiert für >5000 Komponenten) |
| **Komponentendetails** | Lizenzen, Hashes, Abhängigkeiten, Lieferanteninformationen und Dateianzahl anzeigen |
| **Roh-JSON-Ansicht** | Syntax-hervorgehobenes JSON für jede Komponente |
| **Tiefensuche** | Durchsucht alle Felder einschließlich der rohen JSON-Daten |
| **Statistik-Dashboard** | Abdeckungsmetriken, Lizenzkategorien, Sprachverteilung |
| **Dateisystem-Browser** | Durchsuchen von Dateien in der SBOM mit Verzeichnisnavigation, Suche und Ebenenfilterung |
### Angezeigte Statistiken
Die Web-UI zeigt umfassende Statistiken, darunter:
- **Komponentenanzahl** nach Pakettyp (npm, apk, pypi, usw.)
- **Lizenzverteilung** mit Aufschlüsselung nach Kategorie (Copyleft, permissiv, Public Domain)
- **Abdeckungsmetriken** mit visuellen Fortschrittsbalken:
- PURL-Abdeckung (Vorhandensein der Paket-URL)
- CPE-Abdeckung (Bereitschaft für Schwachstellenscans)
- Lizenzabdeckung
- Hash-/Integritätsabdeckung
- **Sprachaufschlüsselung** (für von Syft generierte SBOMs)
- **Beziehungsstatistiken** (enthält, abhängig von, nachgewiesen durch)
- **Warnungen zur Duplikaterkennung**
### Anwendungsfälle
**Sicherheitsüberprüfung**
- Laden Sie eine SBOM hoch und erkunden Sie den vollständigen Abhängigkeitsbaum
- Prüfen Sie die CPE-Abdeckung, um sicherzustellen, dass die Schwachstellensuche funktioniert
- Überprüfen Sie Komponenten ohne Lizenzen oder Hashes
**Compliance-Prüfung**
- Suchen Sie nach bestimmten Lizenzen in allen Komponenten
- Zeigen Sie die Verteilung der Lizenzkategorien (Copyleft vs. permissiv) an
- Exportieren Sie rohes JSON für die Dokumentation
**Entwicklungs-Debugging**
- Untersuchen Sie, welche Pakete in Ihrem Image enthalten sind
- Prüfen Sie transitive Abhängigkeiten
- Verifizieren Sie, dass die Paketmetadaten korrekt sind
### Dateisystem-Browser
Die Web-UI enthält einen vollständigen Dateisystem-Browser zum Durchsuchen von Dateien in SBOMs (besonders nützlich für von Syft generierte SBOMs mit Dateimetadaten):
- **Verzeichnisbaum-Navigation** mit Breadcrumb-Pfad
- **Dateisuche** mit Unterstützung für Teilstring- und Glob-Muster (z. B. `*.so`, `/usr/lib/**/*.conf`)
- **Ebenenfilterung** für Container-Image-SBOMs (Dateien nach Image-Ebene durchsuchen)
- **Beziehungen zwischen Komponenten und Dateien** (welche Komponente welche Dateien besitzt)
- **Dateistatistiken** nach Typ, MIME-Typ, Erweiterung und Ebene
- **Erkennung herrenloser Dateien** (Dateien, die keiner Komponente zugeordnet sind)
## Optionen
### `-i` (Interaktiver Modus)
Startet den terminalbasierten TUI-Explorer zum Navigieren in SBOMs mit Tastatursteuerung.```bash
sbomlyze image.json -i
Funktionen: Baumnavigation, Komponentendetails, Suche, Lizenz-/Hash-Prüfung.
-web (Webserver-Modus)Starte einen Webserver für die browserbasierte SBOM-Erkundung.```bash
sbomlyze -web
sbomlyze -web --port 3000
Die Weboberfläche bietet Drag-and-Drop-Upload, interaktive Baumansicht, Tiefensuche und ein Statistik-Dashboard.
### `--compliance`
Bewertet die SBOM anhand der Mindestelement-Frameworks von NTIA, CISA 2025 und BSI TR-03183. Siehe [Compliance-Bewertung](#compliance-scoring).```bash
sbomlyze image.json --compliance
sbomlyze image.json --compliance --json
--format / -fWählen Sie das Ausgabeformat. Sieben Formate sind verfügbar:
sbomlyze before.json after.json --format sarif > results.sarif
sbomlyze before.json after.json --format junit > results.xml
sbomlyze before.json after.json --format markdown > report.md
sbomlyze before.json after.json --format html > report.html
sbomlyze before.json after.json --format patch > changes.json
#### SARIF Format
Erzeugt einen [SARIF 2.1.0](https://sarifweb.azurewebsites.net/)-Bericht, der für GitHub Code Scanning geeignet ist. Erkannte Regeln umfassen:
- `integrity-drift` (Fehler): Hash geändert ohne Versionsänderung
- `deep-dependency` (Warnung): neue Abhängigkeit in Tiefe 3+
- `new-component` / `removed-component` (Hinweis): Hinzufügen/Entfernen von Komponenten
- `version-change` (Hinweis): Aktualisierungen von Komponentenversionen
- `policy-violation` (Fehler/Warnung): Verstöße gegen Richtlinienregeln
#### JUnit Format
Erzeugt JUnit-XML mit Testfällen für:
- Keine Integritätsabweichung
- Keine tiefen transitiven Abhängigkeiten (Tiefe 3+)
- Richtlinienkonformität (ein Testfall pro Verstoß)
- SBOM-Diff-Zusammenfassung
#### Markdown Format
Erzeugt einen Markdown-Bericht mit:
- SBOM-Vergleichstabelle Seite an Seite (Datei, Größe, Betriebssystem, Abdeckungsmetriken)
- Details zum Scan-Kontext
- Wichtigste Erkenntnisse
- Hinzugefügte/entfernte Pakete nach Typ gruppiert (in aufklappbaren Abschnitten)
- Drift-Zusammenfassung, Abhängigkeitstiefe und Richtlinienverstöße
#### HTML Format
Erzeugt eine einzelne in sich geschlossene HTML-Datei (Inline-CSS und -JavaScript, keine externen Ressourcen), die sich zum E-Mail-Versand an Auditoren oder zum Anhängen an ein Release eignet. Sie enthält das Statistik-Dashboard, den Abhängigkeitsbaum, die Drift-Zusammenfassung und den eingebetteten Compliance-Bericht, wenn `--compliance` gesetzt ist.
#### Patch Format
Erzeugt ein Array von RFC-6902-JSON-Patch-Operationen (`add`, `remove`, `replace`), das den Diff darstellt.
### `--json`
Kurzform für `--format json`. Gibt Ergebnisse im JSON-Format zur programmatischen Verarbeitung aus.```bash
# Stats as JSON
sbomlyze image.json --json
# Diff as JSON
sbomlyze before.json after.json --json
Stats-JSON-Struktur:```json { "stats": { "total_components": 71, "by_type": {"apk": 71}, "by_license": {"MIT": 17, "BSD-3-Clause": 8}, "without_license": 0, "with_hashes": 0, "without_hashes": 71, "total_dependencies": 176, "with_dependencies": 65, "duplicate_count": 0, "by_language": {"go": 45, "python": 12}, "by_found_by": {"apk-db-cataloger": 71}, "license_categories": { "copyleft": 8, "permissive": 55, "public_domain": 0, "unknown": 8 }, "with_cpes": 71, "without_cpes": 0, "with_purl": 71, "without_purl": 0 }, "warnings": [] }
### `--policy <file>`
Wende Policy-Regeln an und lasse CI bei Verstößen fehlschlagen.```bash
sbomlyze before.json after.json --policy policy.json
Siehe Policy Engine für Details.
--strictBricht bei jedem Parsing-Fehler sofort ab.```bash sbomlyze broken.json --strict
### `--tolerant` (Standard)
Verarbeitung bei Fehlern fortsetzen, Warnungen sammeln.```bash
sbomlyze broken.json --tolerant
# 📦 SBOM Statistics
# ==================
# Total Components: 0
# ...
# ⚠️ Parse Warnings (1):
# [broken.json] unknown SBOM format
Parse-Warnungen enthalten strukturierte Informationen: die Quelldatei, eine menschenlesbare Nachricht und optional das Feld, das das Problem verursacht hat.
--no-pagerDeaktiviert die automatische Seitenweise Darstellung der Ausgabe. Nützlich, wenn die Ausgabe an einen anderen Befehl weitergeleitet wird oder in nicht interaktiven Umgebungen.```bash sbomlyze image.json --no-pager sbomlyze before.json after.json --no-pager | head -20
## Policy-Engine
Erstellen Sie Richtlinien, um Regeln in CI/CD-Pipelines durchzusetzen. sbomlyze beendet mit Code 1, wenn Verstöße auftreten.
### Format der Richtliniendatei```json
{
"max_added": 10,
"max_removed": 5,
"max_changed": 100,
"deny_licenses": ["GPL-3.0", "AGPL-3.0"],
"require_licenses": true,
"deny_duplicates": true,
"deny_integrity_drift": true,
"max_depth": 3,
"warn_supplier_change": true,
"warn_new_transitive": true,
"min_ntia_score": 85,
"min_cisa_score": 70,
"min_bsi_score": 80,
"min_overall_compliance": 75
}
Das Festlegen eines beliebigen
min_*_score-Schwellenwerts löst automatisch die Compliance-Bewertung aus, auch ohne das--compliance-Flag.
{ "max_added": 5, "max_removed": 3, "max_changed": 20, "deny_licenses": ["GPL-3.0", "AGPL-3.0", "SSPL-1.0"], "require_licenses": true, "deny_duplicates": true, "deny_integrity_drift": true, "max_depth": 3, "warn_supplier_change": true, "warn_new_transitive": true, "min_overall_compliance": 80 }
### Ausgabe von Richtlinienverstößen```
!! Policy Violations (3):
[max_added] too many components added: 10 > 5
[max_removed] too many components removed: 7 > 3
[deny_licenses] component foo has denied license: GPL-3.0
Alle Formate müssen JSON sein. XML-Unterstützung ist derzeit nicht verfügbar.
sbomlyze kann zwischen allen drei unterstützten Formaten konvertieren:```bash sbomlyze convert input.json --to spdx # any format → SPDX 2.3 sbomlyze convert input.json --to cyclonedx # any format → CycloneDX 1.5 sbomlyze convert input.json --to syft # any format → Syft JSON
See [Convert Mode](#convert-mode) for details.
### Formatübergreifender Vergleich
sbomlyze kann SBOMs in verschiedenen Formaten vergleichen:```bash
# Compare Syft output with CycloneDX
sbomlyze syft-output.json cyclonedx-output.json
# Compare SPDX with Syft
sbomlyze spdx-output.json syft-output.json
Hinweis: Verschiedene SBOM-Formate extrahieren unterschiedliche Detailstufen. Ein formatübergreifender Diff kann Änderungen zeigen, die Formatunterschiede (z. B. Feldverfügbarkeit) widerspiegeln und nicht tatsächliche Systemänderungen. Das Key-Findings-System warnt, wenn Abweichungen im Scan-Kontext erkannt werden.
Komponenten werden mithilfe eines prioritätsbasierten Identitätssystems abgeglichen:
SBOMlyze wird als abhängigkeitsfreie JavaScript-Action ausgeliefert. Sie vergleicht ein eingechecktes oder separat erstelltes Head-SBOM mit der Datei an der Git-Basis des Pull Requests, veröffentlicht eine Job Summary und erzeugt optional SARIF oder aktualisiert einen PR-Kommentar.```yaml name: SBOM Check on: pull_request:
permissions: contents: read
jobs: sbom-diff: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0
- id: sbomlyze
uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1
with:
sbom-path: build/sbom.cdx.json
policy: .github/sbom-policy.json
fail-on: policy
Die Action führt niemals Generatorbefehle aus. Generieren Sie die Head-SBOM in einem separaten, überprüften Schritt oder committen Sie sie in das Repository. `comment` und `sarif` sind standardmäßig beide `false`; Fork-PRs erhalten weiterhin die vollständige Job-Zusammenfassung, wenn keine Kommentarberechtigung verfügbar ist. Siehe [die Action-Referenz](https://github.com/rezmoss/sbomlyze/blob/HEAD/ACTION.md) für alle Ein-/Ausgaben, SHA-Pinning, SARIF-Upload, Berechtigungen und Sicherheitsverhalten.
### GitLab CI```yaml
sbom-diff:
stage: test
script:
- syft . -o json > current.json
- sbomlyze baseline.json current.json --policy policy.json --json > sbom-report.json
- sbomlyze baseline.json current.json --format junit > sbom-junit.xml
artifacts:
paths:
- sbom-report.json
reports:
junit: sbom-junit.xml
when: always
if sbomlyze baseline.json current.json --json | jq -e '.diff.drift_summary.integrity_drift > 0' > /dev/null; then echo "⚠️ INTEGRITY DRIFT DETECTED - Investigate immediately!" exit 1 fi
### Warnung vor tiefen Abhängigkeiten```bash
# Alert on new deep transitive dependencies
if sbomlyze baseline.json current.json --json | jq -e '.diff.dependencies.depth_summary.depth_3_plus > 0' > /dev/null; then
echo "⚠️ New deep transitive dependencies detected - Review required!"
fi
sbomlyze current.json --policy compliance-policy.json
## Exit-Codes
| Code | Bedeutung |
|------|-----------|
| 0 | Erfolg, keine Unterschiede oder Verstöße |
| 1 | Unterschiede gefunden (hinzugefügte/entfernte/geänderte Komponenten), Richtlinienverstöße oder Fehler |
**Hinweis:** Im Diff-Modus wird Exit-Code 1 immer dann zurückgegeben, wenn Änderungen an Komponenten erkannt werden, auch ohne Richtliniendatei. Dadurch kann er als einfaches „Hat sich etwas geändert?“-Gate in CI verwendet werden.
## Beispiele
### Docker-Images vergleichen```bash
# Generate SBOMs
syft nginx:1.25-alpine -o json > nginx-125.json
syft nginx:1.26-alpine -o json > nginx-126.json
# Compare
sbomlyze nginx-125.json nginx-126.json
cat > audit-policy.json << EOF { "deny_licenses": ["GPL-2.0", "GPL-3.0", "LGPL-2.1", "LGPL-3.0"], "require_licenses": true } EOF
sbomlyze old.json new.json --policy audit-policy.json
### Erkennung von Abhängigkeitsdrift```bash
# Detect any changes (strict mode for no drift)
cat > no-drift.json << EOF
{
"max_added": 0,
"max_removed": 0,
"max_changed": 0
}
EOF
sbomlyze baseline.json current.json --policy no-drift.json
sbomlyze image.json --compliance
cat > compliance-policy.json << EOF { "min_ntia_score": 90, "min_overall_compliance": 80 } EOF
sbomlyze image.json --policy compliance-policy.json
### SBOM-Formate konvertieren```bash
# Convert a Syft SBOM to CycloneDX for tools that require it
syft alpine:latest -o json > alpine-syft.json
sbomlyze convert alpine-syft.json --to cyclonedx -o alpine-cdx.json
# Convert CycloneDX to SPDX for compliance workflows
sbomlyze convert vendor-sbom.cdx.json --to spdx > vendor-sbom.spdx.json
# Pipe conversion output directly
sbomlyze convert input.json --to spdx | jq '.packages | length'
syft alpine:latest -o json > alpine.json
sbomlyze -web
### Interaktive Terminal-Erkundung```bash
# Explore with keyboard navigation
sbomlyze alpine.json -i
# Navigate with arrow keys, search with '/', view details with Enter
make test
go test -v ./...
### Lint```bash
make lint # runs go vet + golangci-lint + staticcheck
make vulncheck # runs govulncheck for known CVEs
make build-quick
go build -o sbomlyze ./cmd/sbomlyze
### Make-Befehle```bash
make all # Run test, lint, and build
make test # Run all tests with race detector
make lint # Run go vet, golangci-lint, and staticcheck
make vulncheck # Run govulncheck for known vulnerabilities
make build # Build with goreleaser (snapshot)
make build-quick # Quick build for development
make snapshot-test # Run snapshot tests only
make update-snapshot # Update snapshot golden files
make clean # Remove build artifacts
Beiträge sind willkommen! Gute Einstiegs-Issues sind mit good first issue gekennzeichnet. Siehe CONTRIBUTING.md, sofern vorhanden, und erstelle gern ein Issue oder eine Diskussion, um Änderungen vorzuschlagen.
| Erkenntnis | Beschreibung |
|---|
| OS-/Distro-Erkennung | Identifiziert das Betriebssystem oder die Distribution aus den SBOM-Metadaten |
| Dominantes Ökosystem | Meldet, wenn ein Pakettyp dominiert (>60 % aller Pakete) |
| Dateisystem-Fußabdruck | Anzahl der nachverfolgten Dateien im Dateisystem |
| Beziehungsdichte | Zählt 'enthält'- und 'abhängig von'-Beziehungen |
| Standort-Hotspots | Die wichtigsten Verzeichnisse, in denen Komponenten gefunden werden |
| Lizenzrisikoprofil | Aufschlüsselung der Prozentsätze von permissiven/Copyleft/unbekannten Lizenzen |
| Datenqualitätswarnungen | Warnt bei niedriger Abdeckung von Lizenzen (<50 %), Hashes (<50 %) oder PURLs (<80 %) |
| Duplikatwarnungen | Kennzeichnet doppelte Komponentengruppen |
| Katalogisierer-Aufschlüsselung | Die wichtigsten Scanner/Katalogisierer, die Komponenten erkannt haben (Syft SBOMs) |
| CPE-Abdeckung | Prozentsatz der Komponenten mit CPEs (Bereitschaft für Schwachstellenscans) |
| Lizenzabdeckung | Prozentsatz der Komponenten mit mindestens einer Lizenz |
| Hash-Abdeckung | Prozentsatz der Komponenten mit Integritäts-Hashes |
| Public Domain | Public-Domain-Widmungen |
| Unbekannt | Nicht erkannte oder fehlende Lizenzen |
| Framework | Prüfungen | Bemerkenswerte Anforderungen |
|---|
| NTIA Minimum Elements (2021) | 7 | Name, Version, Lieferant, eindeutige IDs (PURL/CPE), Abhängigkeitsbeziehungen, SBOM-Autor, Zeitstempel |
| CISA 2025 Minimum Elements (Aug 2025 draft) | 10 | fügt gegenüber NTIA Software-Hersteller, Lizenzinformationen, Komponenten-Hash und Tool-Name hinzu |
| BSI TR-03183-2 (v2.1.0, 2025) | 9 | erfordert Kontakt zum Komponentenersteller, SHA-512-Hash, Lizenzen im SPDX-Format und Kontakt zum SBOM-Ersteller |
| Funktion | Beschreibung |
|---|
| Kanten-Diff | Hinzugefügte/entfernte direkte Abhängigkeiten (A hängt von B ab) |
| Transitive Erreichbarkeit | Neue indirekte Abhängigkeiten, die über den Graphen auftreten |
| Tracking transitiver Verluste | Transitive Abhängigkeiten, die entfernt wurden |
| Pfadverfolgung | Zeigt genau, wie jede neue transitive Abhängigkeit erreicht wird |
| Tiefenverfolgung | Wie viele Hops jede neue Abhängigkeit von deinem Code entfernt ist |
| Risikozusammenfassung | Abhängigkeiten mit Tiefe 3+ werden als höheres Risiko markiert |
| 2 | Mittel | Abhängigkeiten deiner Abhängigkeiten |
| 3+ | Hoch ⚠️ | Tiefe transitive Abhängigkeiten - sorgfältig prüfen |
| Taste | Aktion |
|---|
↑ / k | Nach oben bewegen |
↓ / j | Nach unten bewegen |
PgUp / Ctrl+u | Eine halbe Seite nach oben |
PgDn / Ctrl+d | Eine halbe Seite nach unten |
Home / g | Zum Anfang springen |
End / G | Zum Ende springen |
Enter | Komponentendetails anzeigen |
Esc / Backspace | Zurückgehen |
q / Ctrl+c | Beenden |
| Taste | Kontext | Aktion |
|---|
j | Detailansicht | Rohe Komponenten-JSON mit Syntaxhervorhebung anzeigen |
d | JSON-Ansicht | Zurück zur Detailansicht wechseln |
Enter | JSON-Ansicht | Komponenten-JSON in Datei exportieren |
? | Beliebige Ansicht | Hilfe mit allen Tastenkürzeln anzeigen |
| Format | Flag | Beschreibung | Am besten geeignet für |
|---|
| text | --format text (Standard) | Menschenlesbare Terminalausgabe | Lokale Überprüfung |
| json | --json oder --format json | Strukturiertes JSON | CI-Pipelines, Skripterstellung |
| sarif | --format sarif | SARIF 2.1.0 für GitHub Code Scanning | GitHub-Integration |
| junit | --format junit | JUnit-XML-Testergebnisse | CI-Test-Dashboards |
| markdown | --format markdown | Markdown-Bericht, bereit für PR-Kommentare | Pull-Request-Kommentare |
| html | --format html | In sich geschlossener HTML-Bericht (Inline-CSS/JS) | Auditoren, teilbare Berichte |
| patch | --format patch | RFC-6902-JSON-Patch-Operationen | Programmatisches Patchen |
| Rule | Typ | Beschreibung |
|---|
max_added | int | Maximal erlaubte neue Komponenten (0 = unbegrenzt) |
max_removed | int | Maximal erlaubte entfernte Komponenten (0 = unbegrenzt) |
max_changed | int | Maximal erlaubte geänderte Komponenten (0 = unbegrenzt) |
deny_licenses | []string | Liste verbotener Lizenzkennungen |
require_licenses | bool | Alle hinzugefügten Komponenten müssen Lizenzen haben (prüft nur neu hinzugefügte Komponenten im Diff-Modus) |
deny_duplicates | bool | Fehlschlagen, wenn doppelte Pakete im Ergebnis vorhanden sind |
deny_integrity_drift | bool | Fehlschlagen, wenn sich der Komponenten-Hash ohne Versionsänderung geändert hat (Lieferkettenrisiko) |
max_depth | int | Fehlschlagen, wenn neue transitive Abhängigkeiten bei Tiefe >= N (0 = unbegrenzt) |
warn_supplier_change | bool | Warnen (kein Fehlschlagen), wenn sich Lieferant/Autor der Komponente geändert hat |
warn_new_transitive | bool | Warnen (kein Fehlschlagen) bei neuen transitiven Abhängigkeiten |
min_ntia_score | int | Fehlschlagen, wenn der NTIA-Compliance-Score darunter liegt (0-100, 0 = deaktiviert) |
min_cisa_score | int | Fehlschlagen, wenn der CISA-Compliance-Score darunter liegt (0-100, 0 = deaktiviert) |
min_bsi_score | int | Fehlschlagen, wenn der BSI-Compliance-Score darunter liegt (0-100, 0 = deaktiviert) |
min_overall_compliance | int | Fehlschlagen, wenn der Gesamt-Compliance-Score darunter liegt (0-100, 0 = deaktiviert) |
| Format | Dateierkennung | Extrahierte Identifikatoren |
|---|
| Syft (nativ) | JSON-Schlüssel "artifacts" + einer von "source", "distro", "descriptor" | PURL, CPE, name |
| CycloneDX | JSON-Schlüssel "bomFormat" = "CycloneDX" oder "$schema", das cyclonedx enthält | PURL, CPE, BOM-ref, group (namespace) |
| SPDX | JSON-Schlüssel "spdxVersion", beginnend mit "SPDX-" | PURL, CPE, SPDXID |
| Priorität | Kennung | Beispiel | Beschreibung |
|---|
| 1 | PURL | pkg:npm/lodash | Package-URL (Version entfernt) |
| 2 | CPE | cpe:vendor:product | CPE vendor:product (Version entfernt) |
| 3 | BOM-ref / SPDXID | ref:component-123 | CycloneDX-bom-ref oder SPDX-Kennung |
| 4 | Namespace + Name | com.example/mypackage | Gruppe/Namespace mit Name |
| 5 | Name | simple-package | Fallback nur auf Name |