
Pipeline automatizado de SBOM a VEX que utiliza un sistema de IA multiagente seguro para analizar CVEs, razonar sobre la explotabilidad y generar documentos VEX CycloneDX firmados en cumplimiento con las directrices OWASP GenAI.
Genere automáticamente documentos CycloneDX VEX firmados a partir de SBOM utilizando un pipeline de IA multiagente seguro, construido de acuerdo con las directrices del proyecto OWASP GenAI Security.
Generar un SBOM revela cientos de CVEs. En la práctica, más del 90% no son explotables en el contexto de ejecución de un producto específico. Sin un documento Vulnerability Exploitability eXchange (VEX), todas las herramientas posteriores (Dependency‑Track, compuertas de lanzamiento, listas de verificación de adquisiciones) se ahogan en falsos positivos.
Lea la WIKI para más detalles técnicos y resultados de pruebas.
La generación manual de VEX consume mucho tiempo y no escala. Un analista experimentado puede pasar horas evaluando un solo componente. Un SBOM de producción puede contener entre 500 y 2000 componentes.
Este proyecto automatiza ese pipeline de razonamiento, de forma segura, sin dependencia del proveedor, con todos los datos en su infraestructura.
Motivación real: En 2024, la investigadora de seguridad Johanna Curiel documentó exactamente este problema al analizar el cliente Java de Kubernetes (artículo en LinkedIn). El escáner OSV identificó un CVE de alto riesgo en
com.diffplug.spotless:spotless-maven-plugin 1.17.0en segundos. Determinar que eranot_affected(plugin en tiempo de compilación, nunca se ejecuta en tiempo de ejecución) tomó horas de análisis manual. Este proyecto automatiza ese paso de razonamiento.
Cuatro zonas de seguridad. Nada cruza un límite sin validación explícita.
┌─────────────────────────────────────────────────────────────────┐
│ ZONE 1 — Input ingestion (no LLM) │
│ SBOM upload → Schema validate → Sanitise → SHA-256 audit hash │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 2 — OWASP guardrail middleware │
│ Prompt guard (LLM01) · Output filter (LLM02/05) │
│ Agency limiter (LLM06) · Token budget (LLM10) │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 3 — Multi-agent pipeline (AutoGen AgentChat) │
│ │
│ Orchestrator │
│ ├── CVE Analyst NVD v2 + OSV + EPSS per component │
│ ├── Exploit Reasoner Call graph · LLM reasoning · RAG │
│ └── VEX Writer CycloneDX 1.6 schema-validated │
│ │
│ Vector store (Qdrant) — signed past VEX decisions │
└────────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────────────┐
│ ZONE 4 — Output, signing, audit │
│ Human-in-the-loop gate → cosign/GPG sign → audit log │
└─────────────────────────────────────────────────────────────────┘
Este proyecto está diseñado según OWASP Top 10 for LLM Applications 2025 y OWASP Top 10 for Agentic Applications 2026.
| Riesgo OWASP | ID | Mitigación en este proyecto |
|---|---|---|
| Inyección de prompt | LLM01 | Todos los campos del SBOM se sanitizan antes de inyectarlos al LLM; lista de bloqueo de patrones de inyección |
| Divulgación de información sensible | LLM02 | Depurador de PII en todas las salidas del agente; filtro de rutas internas |
| Manejo incorrecto de salidas | LLM05 | Validación del esquema CycloneDX antes de firmar; reintento en caso de fallo |
| Agencia excesiva | LLM06 | Herramientas de solo lectura durante el análisis; puerta HITL para todos los fallos con CVSS ≥ 7.0 |
| Fuga de prompt del sistema | LLM07 | Políticas internas separadas del prompt del sistema |
| Debilidad en vectores/embeddings | LLM08 | Vectores almacenados firmados; procedencia verificada antes de inyectar contexto |
| Consumo sin límites | LLM10 | MaxMessageTermination(20); presupuesto de tokens por componente; timeout de NVD |
Humano en el bucle es obligatorio. Una declaración VEX
not_affectedpara un CVE de alta gravedad es una afirmación de nivel legal. Ningún VEX se firma sin la aprobación de un revisor humano. Esto no es configurable.
| Componente | Herramienta | Notas |
|---|---|---|
| Orquestación de agentes | AutoGen AgentChat v0.4 | Multiagente, uso de herramientas, hooks de mensajes |
| LLM (recomendado) | Qwen2.5-Coder-32B | Mejor JSON estructurado + razonamiento de seguridad |
| Servidor LLM | vLLM (prod) / Ollama (dev) | API compatible con OpenAI |
| Datos de CVE | API NVD v2 + OSV.dev + EPSS | Todos gratuitos, sin necesidad de clave API |
| Almacén de vectores | Qdrant | Autoalojado, decisiones VEX anteriores |
| Embeddings | all-MiniLM-L6-v2 (sentence-transformers) | Completamente local |
| Formatos SBOM | CycloneDX 1.4–1.7 (JSON/XML), SPDX 2.3/3.0 | Validado por esquema al ingerir |
| Salida VEX | CycloneDX 1.6 VEX | Validado por esquema antes de firmar |
| Firma | cosign (Sigstore keyless) | Con marca de tiempo, registrado en auditoría |
| Registro de auditoría | PostgreSQL (solo anexar, pgaudit) | Cada decisión del agente registrada |
Todo se ejecuta en las instalaciones. Ningún dato sale de su infraestructura.
Hardware (producción):
Hardware (desarrollo / SBOM pequeños):
llama3.1:8b mediante 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
# Desarrollo — Ollama (CPU/GPU, cualquier portátil)
ollama pull llama3.1
ollama serve
# Producción — vLLM (GPU requerida)
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 # inicia Qdrant + PostgreSQL
python -m vex_agent analyse \
--sbom ruta/a/tu-sbom.cdx.json \
--output ruta/a/salida.vex.json
El pipeline:
Copie .env.example a .env y establezca: