
Автоматизированный конвейер от SBOM к VEX, использующий безопасную многоагентную систему ИИ для анализа CVE, оценки эксплуатационной возможности и создания подписанных документов CycloneDX VEX в соответствии с рекомендациями OWASP GenAI.
Автоматически создавайте подписанные CycloneDX VEX-документы из SBOM с помощью безопасного многомодульного AI-пайплайна, построенного в соответствии с рекомендациями проекта OWASP GenAI Security.
Генерация SBOM выявляет сотни CVE. На практике более 90% из них не эксплуатируемы в контексте runtime конкретного продукта. Без документа Vulnerability Exploitability eXchange (VEX) каждый инструмент нижнего уровня — Dependency-Track, шлюзы релизов, чек-листы закупок — тонет в ложных срабатываниях.
Читайте WIKI для получения дополнительных технических деталей и результатов тестирования.
Ручная генерация VEX требует времени и не масштабируется. Опытный аналитик может потратить часы на оценку одного компонента. Продуктивный SBOM может содержать 500–2000 компонентов.
Этот проект автоматизирует этот конвейер анализа — безопасно, без привязки к вендору, при этом все данные остаются в вашей инфраструктуре.
Реальный пример из практики: в 2024 году исследователь безопасности Johanna Curiel задокументировала именно эту проблему, анализируя Kubernetes Java Client (статья в LinkedIn). Сканер OSV за секунды выявил высокорисковый CVE в
com.diffplug.spotless:spotless-maven-plugin 1.17.0. Определение того, что онnot_affected(плагин для сборки, никогда не выполняется в рантайме), заняло часы ручного анализа. Этот проект автоматизирует этот шаг рассуждения.
Четыре зоны безопасности. Ничто не пересекает границу без явной проверки.
┌─────────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────────┘
Этот проект разработан в соответствии с OWASP Top 10 for LLM Applications 2025 и OWASP Top 10 for Agentic Applications 2026.
Человек в контуре обязателен. Утверждение VEX
not_affectedдля CVE высокой степени серьезности является юридически значимым. Ни один VEX не подписывается без одобрения человека-рецензента. Это не настраивается.
Все работает на месте. Никакие данные не покидают вашу инфраструктуру.
Аппаратное обеспечение (продакшн):
Аппаратное обеспечение (разработка / небольшие SBOM):
llama3.1:8b через OllamaПрограммное обеспечение:
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
# Разработка — Ollama (CPU/GPU, любой ноутбук)
ollama pull llama3.1
ollama serve
# Продакшн — vLLM (требуется GPU)
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 # запускает Qdrant + PostgreSQL
python -m vex_agent analyse \
--sbom path/to/your-sbom.cdx.json \
--output path/to/output.vex.json
Конвейер выполнит:
Скопируйте .env.example в .env и задайте:
# LLM backend
VLLM_BASE_URL=http://localhost:8000/v1 # или Ollama: http://localhost:11434/v1
LLM_MODEL=Qwen2.5-Coder-32B-Instruct # или llama3.1 для разработки
# Services
QDRANT_URL=http://localhost:6333
AUDIT_DB_URL=postgresql://audit:secret@localhost:5432/audit
# Подписание (оставьте пустым для использования cosign keyless через Sigstore OIDC)
GPG_KEY_ID= # опционально: используйте GPG вместо этого
sbom-vex-agent/
├── vex_agent/
│ ├── ingest.py # Зона 1: валидация и санирование SBOM
│ ├── guardrails.py # Зона 2: промежуточное ПО OWASP (GuardrailedAgent)
│ ├── agents/
│ │ ├── orchestrator.py
│ │ ├── cve_analyst.py
│ │ ├── exploit_reasoner.py
│ │ └── vex_writer.py
│ ├── tools/
│ │ ├── nvd.py # клиент NVD v2 API
│ │ ├── osv.py # клиент OSV.dev
│ │ └── epss.py # оценка EPSS
│ ├── vector_store.py # интеграция с Qdrant + подписание происхождения
│ ├── hitl.py # шлюз рецензирования Human-in-the-loop
│ └── sign.py # Зона 4: подписание cosign / GPG
├── schemas/
│ ├── cdx-1.6.schema.json
│ └── cdx-1.6-vex.schema.json
├── tests/
├── docker-compose.yml
├── .env.example
└── requirements.txt
Агент создает документы CycloneDX 1.6 VEX. Пример вывода для одного компонента:
{
"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."
}
}
]
}
Допустимые значения state: affected · not_affected · fixed · under_investigation
Допустимые значения justification (для not_affected):
component_not_presentvulnerable_code_not_presentvulnerable_code_not_in_execute_pathvulnerable_code_cannot_be_controlled_by_adversaryinline_mitigations_already_existПриветствуются вклады. Пожалуйста, откройте issue перед отправкой pull request для значительных изменений.
Проблемы безопасности следует сообщать приватно — см. SECURITY.md.
MIT — см. LICENSE.
Создано в соответствии с проектом OWASP GenAI Security. Не является официальным проектом OWASP.
| Угроза OWASP | ID | Меры смягчения в этом проекте |
|---|
| Инъекция промптов | LLM01 | Все поля SBOM санируются перед инъекцией в LLM; блок-лист шаблонов инъекций |
| Раскрытие конфиденциальной информации | LLM02 | Очиститель PII на всех выходах агентов; фильтр внутренних путей |
| Некорректная обработка вывода | LLM05 | Валидация схемы CycloneDX перед подписанием; повторная попытка при ошибке |
| Чрезмерное агентирование | LLM06 | Инструменты только для чтения во время анализа; HITL-шлюз для всех решений с CVSS ≥ 7.0 |
| Утечка системного промпта | LLM07 | Внутренние политики отделены от системного промпта |
| Уязвимости векторов/вложений | LLM08 | Сохраненные векторы подписаны; проверка происхождения перед внедрением контекста |
| Неограниченное потребление | LLM10 | MaxMessageTermination(20); бюджет токенов на компонент; тайм-аут NVD |
| Компонент | Инструмент | Примечания |
|---|
| Оркестрация агентов | AutoGen AgentChat v0.4 | Мультиагент, использование инструментов, хуки сообщений |
| Языковая модель (рекомендуется) | Qwen2.5-Coder-32B | Лучший структурированный JSON + анализ безопасности |
| Сервер LLM | vLLM (prod) / Ollama (dev) | OpenAI-совместимое API |
| Данные CVE | NVD v2 API + OSV.dev + EPSS | Все бесплатно, ключ API не требуется |
| Векторное хранилище | Qdrant | Самолично размещенное, прошлые решения VEX |
| Эмбеддинги | all-MiniLM-L6-v2 (sentence-transformers) | Полностью локальные |
| Форматы SBOM | CycloneDX 1.4–1.7 (JSON/XML), SPDX 2.3/3.0 | Валидация схемы на этапе загрузки |
| Вывод VEX | CycloneDX 1.6 VEX | Валидация схемы перед подписанием |
| Подписание | cosign (Sigstore keyless) | С отметкой времени, аудит логов |
| Журнал аудита | PostgreSQL (append-only, pgaudit) | Каждое решение агента записано |