Für Konsumenten

Dieser Abschnitt behandelt übliche Nutzungssczenarien für Konsumenten von Lieferkettensicherheitsdokumenten. In diesem Kontext bezeichnet “Konsument” eine Person oder Automation, welche lesenden Zugriff (beschränkt oder unbeschränkt) auf BOMs, Sicherheitslücken oder CSAF Dokumente hat.

24.02.2025

Unterabschnitte von Für Konsumenten

Stücklisten / BOMs

Stücklisten (Bills of Materials, BOMs) stehen im Mittelpunkt sowohl der Funktionalität als auch des Namens von BOMnipotent. Eine BOM ist eine Liste aller Komponenten, die ein Produkt ausmachen. Im Bereich der Cybersicherheit ist die bekannteste Variante die Software-Stückliste (Software Bill of Materials, SBOM), aber BOMs ermöglichen auch allgemeinere Überlegungen.

Auflisten

Das Ausführen des folgenden Befehls listet alle für Sie zugänglichen BOMs auf:

Eingabe
bomnipotent_client bom list
Ausgabe
[INFO] 
╭────────────────────────┬─────────┬─────────────────────────┬───────────┬────────────╮
│ Product                │ Version │ Timestamp               │ TLP       │ Components │
├────────────────────────┼─────────┼─────────────────────────┼───────────┼────────────┤
│ Best Project           │ 3.1.4   │ 2025-01-01 10:11:12 UTC │ TLP:GREEN │ 75         │
│ Your Project           │ 1.0.0   │ 2025-01-01 10:11:12 UTC │ Default   │ 75         │
│ Your Project           │ 1.1.0   │ 2025-01-01 10:11:12 UTC │ Default   │ 75         │
│ Your Project Container │ 1.2.3   │ 2025-01-01 10:11:12 UTC │ TLP:WHITE │ 939        │
╰────────────────────────┴─────────┴─────────────────────────┴───────────┴────────────╯

BOMs mit der Klassifizierung TLP:WHITE / TLP:CLEAR sind für alle sichtbar. In diesem Beispiel hat Ihr Konto Zugriff auf eine BOM mit dem Label TLP:AMBER.

Der Befehlt akzeptiert die optionalen Filter “name” und “version”:

Eingabe (lange Variante)
bomnipotent_client bom list --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom list -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] 
╭──────────────┬─────────┬─────────────────────────┬─────────┬────────────╮
│ Product      │ Version │ Timestamp               │ TLP     │ Components │
├──────────────┼─────────┼─────────────────────────┼─────────┼────────────┤
│ Your Project │ 1.0.0   │ 2025-01-01 10:11:12 UTC │ Default │ 75         │
╰──────────────┴─────────┴─────────────────────────┴─────────┴────────────╯

Herunterladen

Um eine lokale Kopie aller BOMs zu erstellen, die der Server für Sie bereitstellt, führen Sie folgenden Befehl aus:

Eingabe
bomnipotent_client bom download /home/boms
Ausgabe
[INFO] Storing BOMs under /home/boms

Dies speichert die BOMs im angegebenen Ordner ("./boms" in diesem Beispiel). Falls der Ordner noch nicht existiert, wird er automatisch erstellt. Die BOMs werden in Dateien gespeichert, die folgendem Namensschema folgen: {Produktname}_{Produktversion}.cdx.json.

Um inkonsistentes Verhalten zwischen verschiedenen Betriebssystemen zu vermeiden, werden der Name und die Version des Produkts in Kleinbuchstaben umgewandelt, und die meisten Sonderzeichen durch einen Unterstrich ‘_’ ersetzt. Dadurch könnte es theoretisch vorkommen, dass verschiedene Produkte zum selben Dateinamen führen. In einem solchen Fall zeigt BOMnipotent eine Warnung an, anstatt die Datei stillschweigend zu überschreiben.

Eingabe
tree /home/boms/
Ausgabe
/home/boms/
|-- best_project_3.1.4.cdx.json
|-- your_project_1.0.0.cdx.json
|-- your_project_1.1.0.cdx.json
`-- your_project_container_1.2.3.cdx.json

1 directory, 4 files

Bevor BOMnipotent Client Dateien zum Download anfordert, erstellt er eine Inventarliste der bereits im Ordner vorhandenen BOMs und lädt nur die fehlenden Dateien herunter.

BOMnipotent überschreibt existierende Dateien nicht, selbst falls sie sich auf dem Server geändert haben. Stattdessen gibt es eine Warnung aus:

Eingabe
bomnipotent_client bom download /home/boms
Ausgabe
[INFO] Storing BOMs under /home/boms
[WARN] File /home/boms/best_project_3.1.4.cdx.json already exists.
The existing BOM doc has name 'BEST%PROJECT' and version '3.1.4' while the new one has name 'Best Project' and version '3.1.4'.
Note that to avoid shenangians with the filesystem, both are mapped to the same filename 'best_project_3.1.4.cdx.json'.
Skipping download to prevent data loss.

Sie können BOMnipotentn mitteilen, dass Sie die Datei wirklich gern überschrieben hätten, indem Sie die “–overwrite” flag nutzen:

Eingabe (lange Variante)
bomnipotent_client bom download /home/boms --overwrite
Eingabe (kurze Variante)
bomnipotent_client bom download /home/boms -o
Ausgabe
[INFO] Storing BOMs under /home/boms
[INFO] Overwriting existing BOM document at '/home/boms/best_project_3.1.4.cdx.json'.

Analog zum list Befehl akzeptiert der download Befehl die Filter “name” und “version”, sodass nur ein Teil der BOMs heruntergeladen wird:

Eingabe (lange Variante)
bomnipotent_client bom download /home/boms --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom download /home/boms -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] Storing BOMs under /home/boms

Anzeigen

Sie können den Inhalt einer einzelnen BOM direkt in die Konsole ausgeben lassen, indem Sie folgendes rufen:

Eingabe
bomnipotent_client bom get "Your Project" "1.0.0" | grep -v "serialNumber" | head -n 16
Ausgabe
{
  "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "version": 1,
  "metadata": {
    "timestamp": "2025-01-01T10:11:12Z",
    "tools": {
      "components": [
        {
          "type": "application",
          "author": "anchore",
          "name": "syft",
          "version": "1.28.0"
        }
      ]

Das ist besonder praktisch falls Sie den Inhalt der BOM in einem Skript weiterverwenden wollen. Falls sie zum Beispiel nach Schwachstellen in der Lieferkette schauen wollen, können sie folgendes rufen:

Eingabe
bomnipotent_client bom get "Your Project" "1.0.0" | grype
Ausgabe
NAME    INSTALLED  FIXED IN  TYPE        VULNERABILITY        SEVERITY  EPSS  RISK  
rustls  0.23.15    0.23.18   rust-crate  GHSA-qg5g-gv98-5ffh  Medium    N/A   N/A

Existenz

Der Sub-Befehl "exist" prüft, wie viele Einträge auf dem Server mit bestimmten Filtern übereinstimmt. Er ist für alle Befehle verfügbar, die den "list" Sub-Befehl akzeptieren, und akzeptiert dieselben Filter.

Basierend auf dem Ausgabeformat gibt der Client Folgendes aus:

  • Normaler Modus: Ein Satz, der die Anzahl der gefundenen Objekte enthält.
  • code: Den String "200", falls mindestens ein Element gefunden wurde, oder "404", falls keine gefunden wurden.
  • raw: Die Anzahl der Einträge, die gefunden wurden.
Eingabe (lange Variante)
bomnipotent_client bom exist --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom exist -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] The server contains 1 BOM(s) matching the filters.
18.07.2025

Komponenten

Der Zweck eines Stücklistenverzeichnisses (Bill of Materials, BOM) besteht darin, die Komponenten eines Produkts zu katalogisieren. BOMnipotent Client kann verwendet werden, um alle Pakete usw. aufzulisten, die in einem Produkt enthalten sind, welches über Ihr Benutzerkonto zugänglich ist. Rufen Sie einfach den Client mit den Argumenten “component”, “list” und anschließend dem Namen und der Version des Produkts auf:

Eingabe
bomnipotent_client component list "Your Project" "1.0.0" | awk 'NR <= 16'
Ausgabe
[INFO] 
╭────────────────────────────┬────────────────────────────┬─────────┬────────────────────────────┬────────────────────────────╮
│ Name                       │ Version                    │ Type    │ CPE                        │ PURL                       │
├────────────────────────────┼────────────────────────────┼─────────┼────────────────────────────┼────────────────────────────┤
│ /home/your_project/Cargo.l │                            │ file    │                            │                            │
│ ock                        │                            │         │                            │                            │
│ aho-corasick               │ 1.1.3                      │ library │ cpe:2.3:a:aho-corasick:aho │ pkg:cargo/aho-corasick@1.1 │
│                            │                            │         │ -corasick:1.1.3:*:*:*:*:*: │ .3                         │
│                            │                            │         │ *:*                        │                            │
│ aws-lc-rs                  │ 1.13.1                     │ library │ cpe:2.3:a:aws-lc-rs:aws-lc │ pkg:cargo/aws-lc-rs@1.13.1 │
│                            │                            │         │ -rs:1.13.1:*:*:*:*:*:*:*   │                            │
│ aws-lc-sys                 │ 0.29.0                     │ library │ cpe:2.3:a:aws-lc-sys:aws-l │ pkg:cargo/aws-lc-sys@0.29. │
│                            │                            │         │ c-sys:0.29.0:*:*:*:*:*:*:* │ 0                          │
│ bindgen                    │ 0.69.5                     │ library │ cpe:2.3:a:bindgen:bindgen: │ pkg:cargo/bindgen@0.69.5   │
│                            │                            │         │ 0.69.5:*:*:*:*:*:*:*       │                            │
│ bitflags                   │ 2.9.1                      │ library │ cpe:2.3:a:bitflags:bitflag │ pkg:cargo/bitflags@2.9.1   │

Der Befehl akzeptiert die optionalen Filter “name”, “version”, “type”, “cpe” und “purl” (der Kürze zuliebe hier nicht alle genutzt):

Eingabe (lange Variante)
bomnipotent_client component list "Your Project" "1.0.0" --name=aho-corasick --version=1.1.3 --type=library
Eingabe (kurze Variante)
bomnipotent_client component list "Your Project" "1.0.0" -n aho-corasick -v 1.1.3 -t library
Ausgabe
[INFO] 
╭──────────────┬─────────┬─────────┬────────────────────────────┬────────────────────────────╮
│ Name         │ Version │ Type    │ CPE                        │ PURL                       │
├──────────────┼─────────┼─────────┼────────────────────────────┼────────────────────────────┤
│ aho-corasick │ 1.1.3   │ library │ cpe:2.3:a:aho-corasick:aho │ pkg:cargo/aho-corasick@1.1 │
│              │         │         │ -corasick:1.1.3:*:*:*:*:*: │ .3                         │
│              │         │         │ *:*                        │                            │
╰──────────────┴─────────┴─────────┴────────────────────────────┴────────────────────────────╯

Diese Ausgabe ist in erster Linie für den Menschen lesbar. Die Verwendung der Option --output=raw macht sie prinzipiell maschinenlesbar, aber das vollständige Herunterladen der BOM ist höchstwahrscheinlich vorzuziehen, anstatt diese Tabellenausgabe zu parsen.

Ein Anbieter eines Produkts sollte die BOM eines Produkts regelmäßig auf Schwachstellen überprüfen, beispielsweise mit Tools wie grype . Der nächste Abschnitt erklärt, wie Sie als Nutzer eines Produkts auf diese Listen zugreifen können.

16.06.2025

Sicherheitslücken

Auflisten

Um eine Liste bekannter, Ihnen zugänglicher Sicherheitslücken anzuzeigen, rufen Sie:

Eingabe
bomnipotent_client vulnerability list
Ausgabe
[INFO] 
╭──────────────┬─────────────────┬─────────────────────┬────────────────────────────┬───────┬──────────┬───────────┬────────────────────────────╮
│ Product Name │ Product Version │ Vulnerability       │ Description                │ Score │ Severity │ TLP       │ CSAF Assessments           │
├──────────────┼─────────────────┼─────────────────────┼────────────────────────────┼───────┼──────────┼───────────┼────────────────────────────┤
│ Best Project │ 3.1.4           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ TLP:GREEN │                            │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │           │                            │
│ Your Project │ 1.0.0           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ Default   │ known_affected, according  │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │           │ to ghsa-qg5g-gv98-5ffh_adv │
│              │                 │                     │                            │       │          │           │ isory                      │
│ Your Project │ 1.1.0           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ Default   │ fixed, according to ghsa-q │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │           │ g5g-gv98-5ffh_advisory, re │
│              │                 │                     │                            │       │          │           │ commended, according to gh │
│              │                 │                     │                            │       │          │           │ sa-qg5g-gv98-5ffh_advisory │
╰──────────────┴─────────────────┴─────────────────────┴────────────────────────────┴───────┴──────────┴───────────┴────────────────────────────╯

Die Ausgabe enthält eine ID für die Sicherheitslücke, eine Beschreibung sowie, und, falls verfügbar, einen CVSS Wert und/oder eine Schweregrad-Einstufung. Zudem enthält sie eine TLP Klassifizierung , welche sich von der des betroffenen Produkts ableitet, und idealerweise eine CSAF Bewertung durch den Anbieter.

Die Liste kann nach Name und/oder Version des betroffenen Produkts gefiltert werden:

Eingabe (lange Variante)
bomnipotent_client vulnerability list --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client vulnerability list -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] 
╭──────────────┬─────────────────┬─────────────────────┬────────────────────────────┬───────┬──────────┬─────────┬────────────────────────────╮
│ Product Name │ Product Version │ Vulnerability       │ Description                │ Score │ Severity │ TLP     │ CSAF Assessments           │
├──────────────┼─────────────────┼─────────────────────┼────────────────────────────┼───────┼──────────┼─────────┼────────────────────────────┤
│ Your Project │ 1.0.0           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ Default │ known_affected, according  │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │         │ to ghsa-qg5g-gv98-5ffh_adv │
│              │                 │                     │                            │       │          │         │ isory                      │
╰──────────────┴─────────────────┴─────────────────────┴────────────────────────────┴───────┴──────────┴─────────┴────────────────────────────╯

Um nur diejenigen Sicherheitslücken anzuzeigen, welche noch nicht durch ein CSAF Advisory abgedeckt sind, rufen Sie:

Eingabe (lange Variante)
bomnipotent_client vulnerability list --unassessed
Eingabe (kurze Variante)
bomnipotent_client vulnerability list -u
Ausgabe
[INFO] 
╭──────────────┬─────────────────┬─────────────────────┬────────────────────────────┬───────┬──────────┬───────────┬──────────────────╮
│ Product Name │ Product Version │ Vulnerability       │ Description                │ Score │ Severity │ TLP       │ CSAF Assessments │
├──────────────┼─────────────────┼─────────────────────┼────────────────────────────┼───────┼──────────┼───────────┼──────────────────┤
│ Best Project │ 3.1.4           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ TLP:GREEN │                  │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │           │                  │
╰──────────────┴─────────────────┴─────────────────────┴────────────────────────────┴───────┴──────────┴───────────┴──────────────────╯
[ERROR] Found 1 unassessed vulnerabilities.

Das Verhalten ist hier besonders: Falls es unbehandelte Sicherheitslücken gibt, gibt der Client einen Fehlercode zurück. Das dient dazu, die Integration mit Skripten zu erleichtern, welche regelmäßig auf neue Sicherheitslücken prüfen, wie es zum Beispiel im Abschnitt über CI/CD beschrieben ist.

Es ist auch möglich, lediglich die Sicherheitslücken aufzulisten, welche bereits mit einem Advisory verknüpft sind, allerdings legt der Client hier kein besonderes Verhalten an den Tag:

Eingabe (lange Variante)
bomnipotent_client vulnerability list --unassessed=false
Eingabe (kurze Variante)
bomnipotent_client vulnerability list -u false
Ausgabe
[INFO] 
╭──────────────┬─────────────────┬─────────────────────┬────────────────────────────┬───────┬──────────┬─────────┬────────────────────────────╮
│ Product Name │ Product Version │ Vulnerability       │ Description                │ Score │ Severity │ TLP     │ CSAF Assessments           │
├──────────────┼─────────────────┼─────────────────────┼────────────────────────────┼───────┼──────────┼─────────┼────────────────────────────┤
│ Your Project │ 1.0.0           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ Default │ known_affected, according  │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │         │ to ghsa-qg5g-gv98-5ffh_adv │
│              │                 │                     │                            │       │          │         │ isory                      │
│ Your Project │ 1.1.0           │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable p │       │ medium   │ Default │ fixed, according to ghsa-q │
│              │                 │                     │ anic in `Acceptor::accept` │       │          │         │ g5g-gv98-5ffh_advisory, re │
│              │                 │                     │                            │       │          │         │ commended, according to gh │
│              │                 │                     │                            │       │          │         │ sa-qg5g-gv98-5ffh_advisory │
╰──────────────┴─────────────────┴─────────────────────┴────────────────────────────┴───────┴──────────┴─────────┴────────────────────────────╯

Das CSAF-Dokument ist ein entscheidender Bestandteil, da es Ihnen als Nutzer des Produkts mitteilt, wie Sie auf diese Sicherheitslücke in der Lieferkette reagieren sollten. Lesen Sie den nächsten Abschnitt , um herauszufinden, wie Sie darauf zugreifen können.

Existenz

Der Sub-Befehl "exist" prüft, wie viele Einträge auf dem Server mit bestimmten Filtern übereinstimmt. Er ist für alle Befehle verfügbar, die den "list" Sub-Befehl akzeptieren, und akzeptiert dieselben Filter.

Basierend auf dem Ausgabeformat gibt der Client Folgendes aus:

  • Normaler Modus: Ein Satz, der die Anzahl der gefundenen Objekte enthält.
  • code: Den String "200", falls mindestens ein Element gefunden wurde, oder "404", falls keine gefunden wurden.
  • raw: Die Anzahl der Einträge, die gefunden wurden.
Eingabe (lange Variante)
bomnipotent_client vulnerability exist --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client vulnerability exist -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] The server contains 1 vulnerabilities matching the filters.
18.07.2025

CSAF Dokumente

Wenn eine Sicherheitslücke in einer der Komponenten eines von Ihnen genutzten Produkts bekannt wird, stellt sich eine der naheliegendsten Fragen: “Was muss ich jetzt tun?”. Das Common Security Advisory Framework (CSAF) soll diese Frage auf automatisierte Weise beantworten. Es handelt sich um ein hauptsächlich maschinenlesbares Format zum Austausch von Sicherheitswarnungen zu Schwachstellen.

Eine der Hauptfunktionen von BOMnipotent besteht darin, die Verteilung von CSAF-Dokumenten so einfach wie möglich zu gestalten. Jede laufende Instanz des BOMnipotent-Servers fungiert als “CSAF Provider” gemäß dem OASIS Standard .

Auflisten

Das Ausführen des folgenden Befehls gibt eine Liste aller für Sie zugänglichen CSAF-Dokumente aus:

Eingabe
bomnipotent_client csaf list
Ausgabe
[INFO] 
╭────────────────────────────┬────────────────────────────┬─────────────────────────┬─────────────────────────┬────────┬───────────╮
│ ID                         │ Title                      │ Initial Release         │ Current Release         │ Status │ TLP       │
├────────────────────────────┼────────────────────────────┼─────────────────────────┼─────────────────────────┼────────┼───────────┤
│ ghsa-qg5g-gv98-5ffh_adviso │ Network-reachable panic in │ 2025-01-01 10:11:12 UTC │ 2025-01-01 10:11:12 UTC │ final  │ TLP:AMBER │
│ ry                         │  Your Product              │                         │                         │        │           │
╰────────────────────────────┴────────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴───────────╯

Zugängliche CSAF-Dokumente sind diejenigen, die entweder mit TLP:WHITE/TLP:CLEAR, gekennzeichnet sind oder sich auf ein Produkt beziehen, für das Sie Zugriff erhalten haben.

Filtern

Der “csaf list” Befehl erlaubt eine große Anzahl an Filtern, um nur manche der CSAF Dokuemente anzuzeigen:

  • id: Die ID eines CSAF Dokuments ist eindeutig, sodass dieser Filter höchstens ein Ergebnis liefern kann.
  • filename: Laut dem OASIS Standard erlauben CSAF IDs mehr Zeichen als deren Dateinamen. Aus diesem Grund ist der Dateiname eines CSAF Dokuments nicht zwingend eindeutig.
  • before: Zeigt nur CSAF Dokumente, deren initiales Veröffentlichungsdatum vor einem bestimmten Zeitpunkt liegen. Die Eingabe kann in den Formaten “YYYY”, “YYYY-MM”, “YYYY-MM-DD”, “YYYY-MM-DD HH”, “YYYY-MM-DD HH:MM” oder “YYYY-MM-DD HH:MM:SS” erfolgen. Falls die Eingabe weniger als auf die Sekunde genau ist, wird der niedrigste Wert angenommen. Dies bedeutet, dass “before 2025-08” nach Dokumenten filtert, die vor 2025-08-01 00:00:00 veröffentlicht wurden. Als Zeitzohne wird UTC angenommen, es sei denn sie spezifizieren eine andere, indem Sie einen Offset (z.B. “+02:00”) an den Input anfügen.
  • after: Zeigt nur CSAF Dokumente, deren initiales Veröffentlichungsdatum hinter einem bestimmten Zeitpunkt liegen. Falls die Eingabe weniger als auf die Sekunde genau ist, wie der höchste Wert angenommen. Dies bedeutet, dass “after 2025-08” nach Dokumenten filtert, die nach 2025-08-31 13:59:59 veröffentlicht wurden.
  • year: Zeigt nur CSAF Dokuemente, dere initiales Veröffentlichungsdatum in einem gegebenen Jahr liegen.
  • status: Filtert nach Dokumentenstatus. Der OASIS standard listet alle erlaubten Werte.
  • tlp: Zeigt nur CSAF Dokumente mit einer gewissen TLP Klassifizierung. Zusätzlich zu den TLP1 und TLP2 Labeln sind auch “default”, “none”, “unclassified” und “unlabeled” hier valide Eingaben (welche alle dasselbe meinen).
Eingabe (lange Variante)
bomnipotent_client csaf list --year=2025 --status=final --tlp=amber
Eingabe (kurze Variante)
bomnipotent_client csaf list -y 2025 -s final -t amber
Ausgabe
[INFO] 
╭────────────────────────────┬────────────────────────────┬─────────────────────────┬─────────────────────────┬────────┬───────────╮
│ ID                         │ Title                      │ Initial Release         │ Current Release         │ Status │ TLP       │
├────────────────────────────┼────────────────────────────┼─────────────────────────┼─────────────────────────┼────────┼───────────┤
│ ghsa-qg5g-gv98-5ffh_adviso │ Network-reachable panic in │ 2025-01-01 10:11:12 UTC │ 2025-01-01 10:11:12 UTC │ final  │ TLP:AMBER │
│ ry                         │  Your Product              │                         │                         │        │           │
╰────────────────────────────┴────────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴───────────╯
Eingabe (lange Variante)
bomnipotent_client csaf list --before=2025-03-01 --after="2024-11-08 15:44:13.26+02:00"
Eingabe (kurze Variante)
bomnipotent_client csaf list -b 2025-03-01 -a "2024-11-08 15:44:13.26+02:00"
Ausgabe
[INFO] 
╭────────────────────────────┬────────────────────────────┬─────────────────────────┬─────────────────────────┬────────┬───────────╮
│ ID                         │ Title                      │ Initial Release         │ Current Release         │ Status │ TLP       │
├────────────────────────────┼────────────────────────────┼─────────────────────────┼─────────────────────────┼────────┼───────────┤
│ ghsa-qg5g-gv98-5ffh_adviso │ Network-reachable panic in │ 2025-01-01 10:11:12 UTC │ 2025-01-01 10:11:12 UTC │ final  │ TLP:AMBER │
│ ry                         │  Your Product              │                         │                         │        │           │
╰────────────────────────────┴────────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴───────────╯

Herunterladen

Um alle für Sie zugänglichen CSAF-Dokumente lokal zu spiegeln, führen Sie den folgenden Befehl aus:

Eingabe
bomnipotent_client csaf download /home/csaf
Ausgabe
[INFO] Storing CSAF documents under /home/csaf

Dies speichert die CSAF-Dokumente im angegebenen Ordner ("/home/csaf"in diesem Beispiel). Falls der Ordner noch nicht existiert, wird die Verzeichnisstruktur automatisch erstellt. Die CSAF-Dokumente werden in Dateipfaden abgelegt, die dem Namensschema “{tlp}/{initial_release_year}/{csaf_id}.json”.

Die Dateinamen der CSAF-Dokumente folgen einem vom OASIS Standard vorgegebenen Namensschema: Die IDs werden in Kleinbuchstaben umgewandelt, und die meisten Sonderzeichen werden durch einen Unterstrich ‘_’ ersetzt. Das bedeutet, dass theoretisch verschiedene CSAF-Dokumente zum selben Dateipfad führen könnten. In einem solchen Fall zeigt BOMnipotent einen Fehler an, anstatt eine Datei stillschweigend zu überschreiben.

Eingabe
tree /home/csaf/
Ausgabe
/home/csaf/
`-- amber
    `-- 2025
        `-- ghsa-qg5g-gv98-5ffh_advisory.json

3 directories, 1 file

Bevor Dateien zum Download angefordert werden, erstellt der BOMnipotent-Client eine Inventarliste der bereits im Ordner vorhandenen CSAF-Dokumente und lädt nur die fehlenden herunter.

Es ist auch möglich, eine einzelne Datei herunterzuladen, indem der Pfad als zusätzliches Argument angegeben wird:

Eingabe
bomnipotent_client csaf download /home/csaf amber/2025/ghsa-qg5g-gv98-5ffh_advisory.json
Ausgabe
[INFO] Storing CSAF document under /home/csaf

BOMnipotent überschreibt existierende Dateien nicht, selbst falls sie sich auf dem Server geändert haben. Stattdessen gibt es eine Warnung aus:

Eingabe
bomnipotent_client csaf download /home/csaf
Ausgabe
[INFO] Storing CSAF documents under /home/csaf
[WARN] File /home/csaf/amber/2025/ghsa-qg5g-gv98-5ffh_advisory.json already exists.
The existing CSAF doc has ID 'GHSA-QG5G-GV98-5FFH%ADVISORY' while the new one has ID 'ghsa-qg5g-gv98-5ffh_advisory'.
Note that according to the OASIS standard, both IDs are mapped to the same filename 'ghsa-qg5g-gv98-5ffh_advisory.json'.
For more information, see Section 5.1 of
https://docs.oasis-open.org/csaf/csaf/v2.0/os/csaf-v2.0-os.html#51-filename
Skipping download to prevent data loss.

Sie können BOMnipotentn mitteilen, dass Sie die Datei wirklich gern überschrieben hätten, indem Sie die “–overwrite” flag nutzen:

Eingabe (lange Variante)
bomnipotent_client csaf download /home/csaf --overwrite
Eingabe (kurze Variante)
bomnipotent_client csaf download /home/csaf -o
Ausgabe
[INFO] Storing CSAF documents under /home/csaf
[INFO] Overwriting existing CSAF document at '/home/csaf/amber/2025/ghsa-qg5g-gv98-5ffh_advisory.json'.

Der Download Befehl akzeptiert exakt die gleichen Filter wie der Befehl zum Auflisten, sodass Sie nur die Dokumente herunterladen können, welche relevant für Sie sind.

Anzeigen

Sie können den Inhalt eines einzelnen CSAF Dokuments direkt in die Konsole ausgeben lassen, indem Sie folgendes rufen:

Eingabe
bomnipotent_client csaf get ghsa-qg5g-gv98-5ffh_advisory | tail -n 16
Ausgabe
          "your_project_1.1.0"
        ]
      },
      "remediations": [
        {
          "category": "vendor_fix",
          "date": "2025-01-01T11:00:00.000Z",
          "details": "Update to version 1.1.0.",
          "product_ids": [
            "your_project_1.0.0"
          ]
        }
      ]
    }
  ]
}

Das ist besonder praktisch falls Sie den Inhalt des CSAF Dokuments in einem Skript weiterverwenden wollen.

Existenz

Der Sub-Befehl "exist" prüft, wie viele Einträge auf dem Server mit bestimmten Filtern übereinstimmt. Er ist für alle Befehle verfügbar, die den "list" Sub-Befehl akzeptieren, und akzeptiert dieselben Filter.

Basierend auf dem Ausgabeformat gibt der Client Folgendes aus:

  • Normaler Modus: Ein Satz, der die Anzahl der gefundenen Objekte enthält.
  • code: Den String "200", falls mindestens ein Element gefunden wurde, oder "404", falls keine gefunden wurden.
  • raw: Die Anzahl der Einträge, die gefunden wurden.
Eingabe (lange Variante)
bomnipotent_client csaf exist --year=2023
Eingabe (kurze Variante)
bomnipotent_client csaf exist -y 2023
Ausgabe
[INFO] The server does not contain any CSAF document(s) matching the filters.
18.07.2025

Produkte

Auflisten

Um genau zu sehen, welche Produkte von welchem CSAF Dokument behandelt werden, führen Sie den folgenden Befehl aus:

Eingabe
bomnipotent_client product list
Ausgabe
[INFO] 
╭────────────────────────────┬──────────────┬─────────────┬────────────────────────────┬────────────────┬────────────────────────────┬───────────╮
│ Full Product Name          │ BOM Name     │ BOM Version │ Vulnerability              │ Status         │ CSAF ID                    │ TLP       │
├────────────────────────────┼──────────────┼─────────────┼────────────────────────────┼────────────────┼────────────────────────────┼───────────┤
│ Best Vendor's Your Project │ Your Project │ 1.0.0       │ GHSA-qg5g-gv98-5ffh        │ known_affected │ ghsa-qg5g-gv98-5ffh_adviso │ TLP:AMBER │
│  v1.0.0                    │              │             │ Rustls network-reachable p │                │ ry                         │           │
│                            │              │             │ anic                       │                │                            │           │
│ Best Vendor's Your Project │ Your Project │ 1.1.0       │ GHSA-qg5g-gv98-5ffh        │ fixed          │ ghsa-qg5g-gv98-5ffh_adviso │ TLP:AMBER │
│  v1.1.0                    │              │             │ Rustls network-reachable p │                │ ry                         │           │
│                            │              │             │ anic                       │                │                            │           │
│ Best Vendor's Your Project │ Your Project │ 1.1.0       │ GHSA-qg5g-gv98-5ffh        │ recommended    │ ghsa-qg5g-gv98-5ffh_adviso │ TLP:AMBER │
│  v1.1.0                    │              │             │ Rustls network-reachable p │                │ ry                         │           │
│                            │              │             │ anic                       │                │                            │           │
╰────────────────────────────┴──────────────┴─────────────┴────────────────────────────┴────────────────┴────────────────────────────┴───────────╯

Der Befehl akzeptiert die optionalen Filter “name”, “vulnerability”, “status” und “csaf”:

Eingabe (lange Variante)
bomnipotent_client product list --status=known_affected --csaf="ghsa-qg5g-gv98-5ffh_advisory"
Eingabe (kurze Variante)
bomnipotent_client product list -s known_affected -c "ghsa-qg5g-gv98-5ffh_advisory"
Ausgabe
[INFO] 
╭────────────────────────────┬──────────────┬─────────────┬────────────────────────────┬────────────────┬────────────────────────────┬───────────╮
│ Full Product Name          │ BOM Name     │ BOM Version │ Vulnerability              │ Status         │ CSAF ID                    │ TLP       │
├────────────────────────────┼──────────────┼─────────────┼────────────────────────────┼────────────────┼────────────────────────────┼───────────┤
│ Best Vendor's Your Project │ Your Project │ 1.0.0       │ GHSA-qg5g-gv98-5ffh        │ known_affected │ ghsa-qg5g-gv98-5ffh_adviso │ TLP:AMBER │
│  v1.0.0                    │              │             │ Rustls network-reachable p │                │ ry                         │           │
│                            │              │             │ anic                       │                │                            │           │
╰────────────────────────────┴──────────────┴─────────────┴────────────────────────────┴────────────────┴────────────────────────────┴───────────╯

Existenz

Der Sub-Befehl "exist" prüft, wie viele Einträge auf dem Server mit bestimmten Filtern übereinstimmt. Er ist für alle Befehle verfügbar, die den "list" Sub-Befehl akzeptieren, und akzeptiert dieselben Filter.

Basierend auf dem Ausgabeformat gibt der Client Folgendes aus:

  • Normaler Modus: Ein Satz, der die Anzahl der gefundenen Objekte enthält.
  • code: Den String "200", falls mindestens ein Element gefunden wurde, oder "404", falls keine gefunden wurden.
  • raw: Die Anzahl der Einträge, die gefunden wurden.
Eingabe (lange Variante)
bomnipotent_client product exist --status=known_affected
Eingabe (kurze Variante)
bomnipotent_client product exist -s known_affected
Ausgabe
[INFO] The server contains 1 product(s) matching the filters.