Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
vex-repo-spec — VEX-Repository-Spezifikation | Kitploit
Tools/GitHubGitHub/aquasecurity/vex-repo-spec
SchwachstellenanalyseDevSecOpsBedrohungsanalyseLieferkettensicherheit
GitHubaquasecurity/vex-repo-spec

vex-repo-spec

VEX-Repository-Spezifikation

Repository anzeigen
72vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

VEX-Repository-Spezifikation v0.1

  • VEX-Repository-Spezifikation v0.1
    • 1. Versionierung
    • 2. Repository-Manifest
      • 2.1 Übersicht
      • 2.2 Dateispeicherort
      • 2.3 Schema
      • 2.4 Beispiel
      • 2.5 Feldbeschreibungen und Verwendungshinweise
        • Hauptfelder
        • Unterfelder der Versionen
        • Unterfelder der Standorte
    • 3. Repository-Struktur
      • 3.1 Dateistruktur
      • 3.2 index.json
      • 3.3 VEX-Dokumente
      • 3.4 Verwendungshinweise
        • Verzeichnisstruktur
        • Inhalt der VEX-Dokumente
      • 3.5 Aktualisieren des Repository
    • 4. Verteilung des Repository
      • 4.1 Übersicht
      • 4.2 Archivformat
    • 5. Richtlinien für die Client-Implementierung
      • 5.1 Auswahl der Version
      • 5.2 Auswahl des Standorts
      • 5.3 Unterstützung mehrerer Repositorys
        • Priorisierung der Repositorys
      • 5.4 Prüfung auf Updates
      • 5.5 Effizienzstrategien

Die Schlüsselwörter "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" und "OPTIONAL" in diesem Dokument sind wie in RFC 2119 beschrieben zu interpretieren.

Tool herunterladen

1. Versionierung

  • Die VEX-Repository-Spezifikation (Vulnerability Exploitability eXchange) MUSS die Versionierung vX.Y verwenden.
  • Für v1.0 und später:
    • X (Hauptversion) MUSS bei inkompatiblen Änderungen aktualisiert werden.
    • Y (Nebenversion) MUSS bei abwärtskompatiblen Änderungen aktualisiert werden.
  • Bei v0.Y-Versionen KÖNNEN inkompatible Änderungen bei Updates der Nebenversion auftreten.

Beim Vergleichen von Versionen:

  • Versionen MÜSSEN numerisch und nicht lexikografisch verglichen werden.
  • Hauptversionen MÜSSEN zuerst verglichen werden:
    • Wenn sich die Hauptversionen unterscheiden, gilt die Version mit der höheren Hauptversion als neuer.
    • Wenn die Hauptversionen gleich sind, werden die Nebenversionen verglichen.
  • Nebenversionen MÜSSEN nur verglichen werden, wenn die Hauptversionen gleich sind:
    • Die Version mit der höheren Nebenversion gilt als neuer.

Beispielvergleiche:

  • 1.0 < 2.0
  • 1.1 < 1.2
  • 1.10 > 1.2

2. Repository-Manifest

2.1 Übersicht

Die Manifestdatei stellt Metadaten über ein VEX-Datenrepository bereit. Diese Datei MUSS die Informationen enthalten, die zum Abrufen und Aktualisieren von VEX-Daten erforderlich sind.

2.2 Dateispeicherort

  • Für HTTPS: Die Manifestdatei MUSS sich unter https://<domain>/.well-known/vex-repository.json befinden.
  • Für GitHub-Repositorys: vex-repository.json MUSS im Stammverzeichnis des Hauptzweigs abgelegt werden.

2.3 Schema

Das JSON-Schema für die Manifestdatei ist hier definiert.

2.4 Beispiel

root@kitploit:~
{
  "name": "Example Org VEX Repository",
  "description": "VEX repository for Example Organization",
  "versions": [
    {
      "spec_version": "0.1",
      "locations": [
        {
          "url": "https://example.com/vex-hub/v0/vex-data-v0.tar.gz"
        }
      ],
      "update_interval": "24h",
      "repository_specific": {
        "location": {
          "repository_type": "db",
          "db_type": "bbolt",
          "url": "oci://ghcr.io/example.com/vex-db:0"
        }
      }
    },
    {
      "spec_version": "1.0",
      "locations": [
        {
          "url": "https://example.com/vex-hub/v1/vex-data-v1.tar.gz//subdirectory"
        },
        {
          "url": "https://example.com/vex-api/v1"
        }
      ],
      "update_interval": "1h"
    }
  ]
}

2.5 Feldbeschreibungen und Verwendungshinweise

Hauptfelder

FeldErforderlichBeschreibung und Verwendungshinweise
name✓Der Name des Repository.
description✓Eine kurze Beschreibung des Repository.
versions✓Ein Array mit Details zu den verfügbaren Versionen. Jedes Objekt im Array repräsentiert eine Version, die eine Version der VEX-Repository-Spezifikation implementiert. Versionen MÜSSEN in aufsteigender Reihenfolge sortiert sein, von der ältesten zur neuesten Version. Siehe separate Tabelle für Unterfelder.

Unterfelder der Versionen

FeldErforderlichBeschreibung und Verwendungshinweise
spec_version✓Die Version der implementierten VEX-Repository-Spezifikation (z. B. "0.1"). Das Format MUSS "X.Y" sein, wie in Abschnitt 1 definiert.
locations✓Ein Array von Objekten, die VEX-Datenspeicherorte beschreiben. MUSS mindestens ein Standortobjekt enthalten. Siehe separate Tabelle für Unterfelder.
update_interval✓Das empfohlene Intervall für die Aktualisierungsprüfung der VEX-Daten dieser Version. Verwendet das Go-Dauernformat (z. B. "1h", "30m", "24h").
repository_specific-Zusätzliche repository-spezifische Informationen.

Unterfelder der Standorte

FeldErforderlichBeschreibung und Verwendungshinweise
url✓Eine URL für den VEX-Datenspeicherort, die mit "https://" beginnt. Der Inhalt entspricht den Spezifikationen zur Repository-Struktur in Abschnitt 3 und 4. Die URL kann eine Unterverzeichnisangabe enthalten, indem '//' gefolgt vom Unterverzeichnispfad angehängt wird.

3. Repository-Struktur

3.1 Dateistruktur

Das Repository MUSS die folgende Struktur aufweisen:

root@kitploit:~
vex-repository.<archive_extension>
[optional_subdirectory/]
├── index.json
└── pkg/
    ├── <type>/
    │   ├── <namespace>/
    │   │   ├── <name>/
    │   │   │   └── vex.json
    │   │   └── ...
    │   └── ...
    └── ...

Wobei <archive_extension> eines der unterstützten Archivformate ist.

Das [optional_subdirectory/] ist enthalten, wenn die URL im Feld locations mit // gefolgt von einem Unterverzeichnispfad endet. Dies ermöglicht Flexibilität bei der Repository-Struktur, insbesondere bei der Verwendung vorhandener Repository-Layouts wie denen in GitHub-Repositorys.

Wenn die URL beispielsweise https://github.com/org/repo/archive/refs/heads/main.tar.gz//repo-main lautet, wäre die Dateistruktur:

root@kitploit:~
main.tar.gz
└──repo-main/
   ├── index.json
   └── pkg/
       └── ...

In diesem Fall ist repo-main/ das Stammverzeichnis für das VEX-Repository innerhalb der tar.gz-Datei.

3.2 index.json

Die Datei index.json dient als Manifest für den Inhalt der Archivdatei. Sie MUSS im Stammverzeichnis des Archivs oder im angegebenen Unterverzeichnis abgelegt werden, sofern eines in der URL definiert ist. Die Datei MUSS die folgende Struktur aufweisen:

root@kitploit:~
{
  "updated_at": "2023-07-04T12:00:00Z",
  "packages": [
    {
      "id": "pkg:deb/debian/curl",
      "location": "pkg/deb/debian/curl/vex.json"
    },
    {
      "id": "pkg:npm/lodash",
      "location": "pkg/npm/lodash/vex.json",
      "format": "csaf"
    }
  ]
}

Feldbeschreibungen:

FeldErforderlichBeschreibung
updated_at✓Zeitstempel, der angibt, wann diese index.json zuletzt aktualisiert wurde.
packages✓Array von Objekten, die jeweils ein Paket im Repository darstellen.
packages[].id✓Kennung des Pakets. Derzeit wird nur Package URL (PURL) akzeptiert. Version, Qualifizierer und Unterpfad MÜSSEN weggelassen werden, da sie im VEX-Dokument enthalten sind. Bei Paketen vom Typ OCI MUSS der Qualifizierer repository_url in der id enthalten sein.
packages[].location✓Relativer Pfad zur VEX-Datei für dieses Paket innerhalb des Archivs. Clients MÜSSEN dieses Feld verwenden, um die VEX-Dateien bestimmter Pakete zu finden.
packages[].format-Format der VEX-Daten. Entweder "openvex" oder "csaf". Wenn es weggelassen wird, wird "openvex" angenommen.

Das Schema für die Indexdatei ist hier definiert.

3.3 VEX-Dokumente

Die VEX-Informationen jedes Pakets MÜSSEN in einer separaten JSON-Datei gespeichert werden, die der in der Datei index.json definierten Pfadstruktur folgt. Der Inhalt dieser Dateien MUSS der Spezifikation des VEX-Formats (OpenVEX oder CSAF VEX) entsprechen, wie im Feld format angegeben. Ein einzelnes VEX-Dokument KANN Informationen für verschiedene Versionen, Qualifizierer und Unterpfade desselben Pakets enthalten.

Beispiele für OpenVEX-Dokumente finden Sie in der OpenVEX-Spezifikation.

3.4 Verwendungshinweise

Verzeichnisstruktur

  • Es wird EMPFOHLEN, Verzeichnisstrukturen für Pakete basierend auf ihrer PURL zu erstellen, ohne Version, Qualifizierer und Unterpfad. Beispielsweise könnte ein Paket mit der PURL "pkg:deb/debian/curl" unter "pkg/deb/debian/curl/vex.json" gespeichert werden.
  • Für OCI-Pakete KANN der Qualifizierer repository_url der PURL verwendet werden, um die Verzeichnisstruktur zu erstellen. Beispielsweise könnte ein Paket mit der PURL "pkg:oci/debian@sha256:3e45770a143ee5afd1ebde5a6aea6e32a71d2bt5602f5dac8025db0d9cc19f10?repository_url=docker.io/library/debian" unter "pkg/oci/docker.io/library/debian/vex.json" gespeichert werden.
  • Der tatsächliche Speicherort der VEX-Dateien KANN im Feld location der Datei index.json frei definiert werden, unabhängig von der empfohlenen Struktur.
  • Alle Dateipfade innerhalb des Archivs MÜSSEN unabhängig vom Betriebssystem Schrägstriche (/) als Trennzeichen verwenden.
  • Paketnamen in der Verzeichnisstruktur MÜSSEN URL-kodiert werden, wenn sie Sonderzeichen enthalten.

Inhalt der VEX-Dokumente

  • Ein einzelnes VEX-Dokument KANN Informationen für verschiedene Versionen, Qualifizierer und Unterpfade desselben Pakets enthalten.
  • Beim Abfragen einer bestimmten Version, eines bestimmten Qualifizierers oder Unterpfads MÜSSEN Clients das gesamte VEX-Dokument parsen, um die relevanten Informationen zu finden.

3.5 Aktualisieren des Repository

Beim Aktualisieren des VEX-Repository:

  1. Neue oder aktualisierte vex.json-Dateien für betroffene Pakete erstellen.
  2. Die Datei index.json aktualisieren, um alle Änderungen widerzuspiegeln, einschließlich der Aktualisierung des Zeitstempels updated_at.
  3. Ein neues Archiv mit dem aktualisierten Inhalt erstellen.
  4. Das neue Archiv an den in der Manifestdatei (vex-repository.json) angegebenen Speicherort hochladen.
  5. Bei Bedarf die entsprechende locations-URL in der Manifestdatei (vex-repository.json) aktualisieren.

4. Verteilung des Repository

4.1 Übersicht

Das VEX-Repository MUSS als Archivdatei verteilt werden, die die VEX-Daten und zugehörige Metadaten enthält. Dieses Archiv MUSS über das Feld locations in der Datei vex-repository.json referenziert werden und ist das primäre Mittel zur Verteilung von VEX-Informationen.

4.2 Archivformat

Die Archivdatei MUSS in einem der folgenden Formate vorliegen:

  • tar.gz und tgz
  • tar.bz2 und tbz2
  • tar.xz und txz
  • zip
  • gz
  • bz2
  • xz

5. Richtlinien für die Client-Implementierung

5.1 Auswahl der Version

Bei der Auswahl einer Version aus dem versions-Array:

  • Clients MÜSSEN eine von ihnen unterstützte Version basierend auf dem Feld spec_version auswählen.
  • Clients MÜSSEN Versionen gemäß den in Abschnitt 1 definierten Regeln vergleichen.
  • Das versions-Array ist garantiert von der ältesten zur neuesten Version sortiert. Clients können diese Reihenfolge nutzen, um effizient eine geeignete Version auszuwählen.
  • Für Versionen v1.0 und später:
    • Clients KÖNNEN die neueste von ihnen unterstützte Version innerhalb derselben Hauptversion auswählen, da die Abwärtskompatibilität innerhalb der Hauptversionen gewahrt bleibt.
  • Für Versionen v0.Y (wobei Y eine beliebige Nebenversion ist):
    • Clients SOLLTEN eine exakt übereinstimmende Version auswählen.
    • Dies liegt daran, dass v0.Y-Versionen inkompatible Änderungen zwischen Nebenversionen enthalten KÖNNEN.
  • Wenn keine unterstützte Version verfügbar ist, DÜRFEN Clients das Repository NICHT verwenden und SOLLTEN den Benutzer benachrichtigen.

5.2 Auswahl des Standorts

Bei mehreren Standorten im locations-Array:

  1. Prioritätsreihenfolge: Clients MÜSSEN Standorte basierend auf ihrer Reihenfolge im Array priorisieren. Der zuerst aufgeführte Standort sollte zuerst versucht werden, bevor zu den folgenden Standorten übergegangen wird.
  2. Schema-Unterstützung:
    • Derzeit wird in der Spezifikation nur das Schema "https" unterstützt.
    • Zukünftige Versionen dieser Spezifikation können zusätzliche Schemata einführen.
    • Clients SOLLTEN das URL-Schema jedes Standorts prüfen und nur Standorte mit unterstützten Schemata verwenden.
  3. Fallback-Mechanismus: Wenn ein Client bei einem Standort auf einen Fehler stößt, SOLLTE er versuchen, den nächsten verfügbaren Standort im Array zu verwenden.

5.3 Unterstützung mehrerer Repositorys

Clients SOLLTEN so konzipiert sein, dass sie mehrere VEX-Repositorys unterstützen.

Priorisierung der Repositorys

  • Clients SOLLTEN einen Priorisierungsmechanismus für Repositorys implementieren.
  • Wenn mehrere Repositorys VEX-Daten für dieselbe PURL bereitstellen, SOLLTEN Clients die Daten basierend auf der Repository-Priorität auswählen.
  • Die Priorisierungsmethode SOLLTE konfigurierbar sein, damit Benutzer sie basierend auf ihren spezifischen Anforderungen und ihrem Vertrauen in verschiedene Datenquellen anpassen können.

5.4 Prüfung auf Updates

Clients SOLLTEN den folgenden Prozess verwenden, um auf Updates zu prüfen:

  1. Den Zeitstempel der letzten erfolgreichen Aktualisierung oder der letzten erfolgreichen Aktualisierungsprüfung lokal speichern.
  2. Wenn eine Aktualisierung in Betracht gezogen wird, den Wert update_interval aus der Datei vex-repository.json abrufen.
  3. Den nächsten Aktualisierungszeitpunkt berechnen, indem update_interval zum lokal gespeicherten Zeitstempel addiert wird.
  4. Diese berechnete Zeit mit der aktuellen Zeit vergleichen:
    • Wenn die aktuelle Zeit später ist als die berechnete Zeit, mit der Prüfung auf Updates fortfahren:
      • Eine Anfrage zum Herunterladen des neuesten Repository-Inhalts senden.
      • Wenn neue Inhalte verfügbar sind, das aktualisierte Repository herunterladen und verarbeiten.
      • Den lokal gespeicherten Zeitstempel mit der aktuellen Zeit aktualisieren.
    • Wenn die aktuelle Zeit früher ist als die berechnete Zeit, die zwischengespeicherten Repository-Inhalte weiter verwenden.

5.5 Effizienzstrategien

Für einen effizienten Betrieb KÖNNEN Clients die folgenden Strategien implementieren:

  1. Beim Senden von Anfragen zur Prüfung auf Updates HTTP-ETags- oder Last-Modified-Header verwenden. Dies kann dazu beitragen, unnötige Downloads zu minimieren, wenn sich der Inhalt nicht geändert hat.
  2. Ein Mindestintervall zwischen Aktualisierungsprüfungen implementieren (z. B. 1 Stunde), um übermäßige Netzwerkanfragen zu vermeiden, insbesondere in Fällen, in denen update_interval sehr kurz ist.
  3. Manuelles Überschreiben der Aktualisierungsprüfungen ermöglichen, damit Benutzer unabhängig von der berechneten nächsten Aktualisierungszeit eine sofortige Prüfung erzwingen können.