
Automatisierte SBOM-zu-VEX-Pipeline unter Verwendung eines sicheren Multi-Agenten-KI-Systems, um CVEs zu analysieren, Ausnutzbarkeit zu bewerten und signierte CycloneDX VEX-Dokumente in Übereinstimmung mit OWASP GenAI guidelines zu generieren
Generieren Sie automatisch signierte CycloneDX-VEX-Dokumente aus SBOMs mittels einer sicheren Multi-Agenten-KI-Pipeline, entwickelt gemäß den Richtlinien des OWASP GenAI Security Projects.
Die Erstellung eines SBOMs fördert hunderte CVEs zutage. In der Praxis sind über 90 % in der Laufzeitumgebung eines bestimmten Produkts nicht ausnutzbar. Ohne ein Vulnerability Exploitability eXchange (VEX)-Dokument ertrinken alle nachgelagerten Tools – Dependency-Track, Release-Gates, Beschaffungschecklisten – in Fehlalarmen.
Weitere technische Details und Testergebnisse entnehmen Sie bitte dem WIKI.
Die manuelle VEX-Erstellung ist zeitaufwändig und skaliert nicht. Ein erfahrener Analyst kann Stunden mit der Bewertung einer einzigen Komponente verbringen. Ein produktives SBOM kann 500–2.000 Komponenten enthalten.
Dieses Projekt automatisiert diese Argumentationspipeline – sicher, ohne Vendor-Lock-in, wobei alle Daten in Ihrer Infrastruktur verbleiben.
Im Jahr 2024 dokumentierte die Sicherheitsforscherin Johanna Curiel genau dieses Problem bei der Analyse des Kubernetes Java Client (). Der OSV-Scanner identifizierte in Sekundenschnelle ein hohes CVE-Risiko in . Die Feststellung, dass es sei (Build-Zeit-Plugin, wird zur Laufzeit nie ausgeführt), erforderte Stunden manueller Analyse. Dieses Projekt automatisiert diesen Argumentationsschritt.
com.diffplug.spotless:spotless-maven-plugin 1.17.0not_affectedVier Sicherheitszonen. Nichts überschreitet eine Grenze ohne explizite Validierung.
┌─────────────────────────────────────────────────────────────────┐
│ ZONE 1 — Eingabe (kein LLM) │
│ SBOM-Upload → Schema validieren → Bereinigen → SHA-256-Prüfhash │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 2 — OWASP-Guardrail-Middleware │
│ Prompt Guard (LLM01) · Output-Filter (LLM02/05) │
│ Agency-Limiter (LLM06) · Token-Budget (LLM10) │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 3 — Multi-Agenten-Pipeline (AutoGen AgentChat) │
│ │
│ Orchestrator │
│ ├── CVE-Analyst NVD v2 + OSV + EPSS pro Komponente │
│ ├── Exploit-Reasoner Call-Graph · LLM-Reasoning · RAG │
│ └── VEX-Autor CycloneDX 1.6 schema-validiert │
│ │
│ Vektor-Store (Qdrant) — signierte frühere VEX-Entscheidungen │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 4 — Ausgabe, Signierung, Audit │
│ Human-in-the-Loop-Gate → cosign/GPG signieren → Audit-Log │
└─────────────────────────────────────────────────────────────────┘
Dieses Projekt ist in Anlehnung an den OWASP Top 10 for LLM Applications 2025 und den OWASP Top 10 for Agentic Applications 2026 konzipiert.
| OWASP-Risiko | ID | Gegenmaßnahme in diesem Projekt |
|---|---|---|
| Prompt Injection | LLM01 | Alle SBOM-Felder vor der LLM-Eingabe bereinigt; Injizierungsmuster-Blocklist |
| Offenlegung sensibler Informationen | LLM02 | PII-Scrubber auf allen Agentenausgaben; interner Pfadfilter |
| Unsachgemäße Ausgabehandhabung | LLM05 | CycloneDX-Schemavalidierung vor der Signierung; Wiederholung bei Fehlschlag |
| Übermäßige Agency | LLM06 | Schreibgeschützte Tools während der Analyse; HITL-Gate für alle Entscheidungen mit CVSS ≥ 7.0 |
| Leckage von System-Prompts | LLM07 | Interne Richtlinien vom System-Prompt getrennt |
| Schwäche von Vektoren/Embeddings | LLM08 | Gespeicherte Vektoren signiert; Herkunft vor Kontexteinspritzung geprüft |
| Unbegrenzter Verbrauch | LLM10 | MaxMessageTermination(20); Token-Budget pro Komponente; NVD-Timeout |
Human-in-the-loop ist obligatorisch. Eine VEX-Aussage
not_affectedfür ein schwerwiegendes CVE ist eine rechtlich relevante Behauptung. Keine VEX wird ohne Genehmigung eines menschlichen Prüfers signiert. Dies ist nicht konfigurierbar.
| Komponente | Tool | Anmerkungen |
|---|---|---|
| Agenten-Orchestrierung | AutoGen AgentChat v0.4 | Multi-Agent, Tool-Nutzung, Message Hooks |
| LLM (empfohlen) | Qwen2.5-Coder-32B | Bestes strukturiertes JSON + Security-Reasoning |
| LLM-Server | vLLM (Produktion) / Ollama (Entwicklung) | OpenAI-kompatible API |
| CVE-Daten | NVD v2 API + OSV.dev + EPSS | Alle kostenlos, kein API-Key erforderlich |
| Vektor-Store | Qdrant | Selbst gehostet, vergangene VEX-Entscheidungen |
| Embeddings | all-MiniLM-L6-v2 (sentence-transformers) | Vollständig lokal |
| SBOM-Formate | CycloneDX 1.4–1.7 (JSON/XML), SPDX 2.3/3.0 | Schema-validiert bei Aufnahme |
| VEX-Ausgabe | CycloneDX 1.6 VEX | Schema-validiert vor Signierung |
| Signierung | cosign (Sigstore keyless) | Zeitgestempelt, audit-logged |
| Audit-Log | PostgreSQL (append-only, pgaudit) | Jede Agentenentscheidung aufgezeichnet |
Alles läuft vor Ort. Keine Daten verlassen Ihre Infrastruktur.
Hardware (Produktion):
Hardware (Entwicklung / kleine SBOMs):
llama3.1:8b über OllamaSoftware:
git clone https://github.com/your-org/sbom-vex-agent
cd sbom-vex-agent
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Entwicklung — Ollama (CPU/GPU, jedes Notebook)
ollama pull llama3.1
ollama serve
# Produktion — vLLM (GPU erforderlich)
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-Coder-32B-Instruct \
--gpu-memory-utilization 0.90 \
--host 0.0.0.0 --port 8000
docker compose up -d # startet Qdrant + PostgreSQL
python -m vex_agent analyse \
--sbom path/to/your-sbom.cdx.json \
--output path/to/output.vex.json
Die Pipeline wird:
Kopieren Sie .env.example nach .env und setzen Sie:
# LLM-Backend
VLLM_BASE_URL=http://localhost:8000/v1 # oder Ollama: http://localhost:11434/v1
LLM_MODEL=Qwen2.5-Coder-32B-Instruct # oder llama3.1 für Entwicklung
# Dienste
QDRANT_URL=http://localhost:6333
AUDIT_DB_URL=postgresql://audit:secret@localhost:5432/audit
# Signierung (leer lassen für cosign keyless über Sigstore OIDC)
GPG_KEY_ID= # optional: GPG stattdessen verwenden
sbom-vex-agent/
├── vex_agent/
│ ├── ingest.py # Zone 1: SBOM-Validierung und -Bereinigung
│ ├── guardrails.py # Zone 2: OWASP-Middleware (GuardrailedAgent)
│ ├── agents/
│ │ ├── orchestrator.py
│ │ ├── cve_analyst.py
│ │ ├── exploit_reasoner.py
│ │ └── vex_writer.py
│ ├── tools/
│ │ ├── nvd.py # NVD v2 API-Client
│ │ ├── osv.py # OSV.dev-Client
│ │ └── epss.py # EPSS-Scoring
│ ├── vector_store.py # Qdrant-Integration + Provenance-Signierung
│ ├── hitl.py # Human-in-the-Loop-Prüfgate
│ └── sign.py # Zone 4: cosign / GPG-Signierung
├── schemas/
│ ├── cdx-1.6.schema.json
│ └── cdx-1.6-vex.schema.json
├── tests/
├── docker-compose.yml
├── .env.example
└── requirements.txt
Der Agent erstellt CycloneDX 1.6 VEX-Dokumente. Beispielausgabe für eine einzelne Komponente:
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"version": 1,
"metadata": {
"timestamp": "2026-04-26T10:00:00Z",
"tools": [{ "name": "sbom-vex-agent", "version": "1.0.0" }]
},
"vulnerabilities": [
{
"id": "CVE-2021-37714",
"affects": [{ "ref": "pkg:maven/com.diffplug.spotless/[email protected]" }],
"analysis": {
"state": "not_affected",
"justification": "vulnerable_code_not_in_execute_path",
"detail": "Plugin executes only at build time; not present in deployed runtime."
}
}
]
}
Gültige state-Werte: affected · not_affected · fixed · under_investigation
Gültige justification-Werte (für not_affected):
component_not_presentvulnerable_code_not_presentvulnerable_code_not_in_execute_pathvulnerable_code_cannot_be_controlled_by_adversaryinline_mitigations_already_existBeiträge sind willkommen. Bitte eröffnen Sie ein Issue, bevor Sie einen Pull-Request für wesentliche Änderungen einreichen.
Sicherheitsprobleme bitte vertraulich melden – siehe SECURITY.md.
MIT – siehe LICENSE.
Erstellt in Anlehnung an das OWASP GenAI Security Project. Kein offizielles OWASP-Projekt.