
OWASP GenAI セキュリティプロジェクトのガイドラインに準拠して構築されたセキュアなマルチエージェント AI パイプラインを使用し、SBOM から署名付き CycloneDX VEX ドキュメントを自動生成します。
SBOM を生成すると、数百もの CVE が浮上します。実際には、その 90% 以上が特定の製品のランタイムコンテキストでは悪用不可能です。脆弱性悪用可能性交換(VEX)ドキュメントがなければ、Dependency-Track、リリースゲート、調達チェックリストなど、下流のすべてのツールが誤検知に埋もれてしまいます。
詳細な技術情報とテスト結果については WIKI を参照してください。
手動での VEX 生成は時間がかかり、スケーラビリティに欠けます。熟練したアナリストでも、単一のコンポーネントの評価に数時間を費やすことがあります。本番環境の SBOM には 500〜2,000 のコンポーネントが含まれる場合があります。
このプロジェクトは、その推論パイプラインを自動化します。ベンダーロックインなしで、すべてのデータを自社インフラ上に保持したまま、安全に実行できます。
実世界の動機: 2024 年、セキュリティ研究者の Johanna Curiel 氏は、Kubernetes Java Client を分析中にまさにこの問題を記録しました(LinkedIn 記事)。OSV スキャナーは
com.diffplug.spotless:spotless-maven-plugin 1.17.0の高リスク CVE を数秒で特定しました。一方、それがnot_affected(ビルド時のみに実行され、ランタイムでは決して実行されないプラグイン)であると判断するには、数時間の手動分析が必要でした。このプロジェクトは、その推論ステップを自動化します。
4 つのセキュリティゾーンで構成されています。明示的な検証なしに境界を越えるものはありません。
┌─────────────────────────────────────────────────────────────────┐
│ 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 に対応して設計されています。
Human-in-the-loop は必須です。 高深刻度 CVE に対する VEX の
not_affectedステートメントは、法的グレードの表明です。人間のレビュアーの承認なしに VEX が署名されることはありません。これは設定変更できません。
すべてオンプレミスで実行されます。データがインフラの外に出ることはありません。
ハードウェア(本番環境):
ハードウェア(開発 / 小規模 SBOM):
llama3.1:8b を使用ソフトウェア:
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
# Development — Ollama (CPU/GPU, any laptop)
ollama pull llama3.1
ollama serve
# Production — vLLM (GPU required)
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 # starts 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 # or Ollama: http://localhost:11434/v1
LLM_MODEL=Qwen2.5-Coder-32B-Instruct # or llama3.1 for dev
# Services
QDRANT_URL=http://localhost:6333
AUDIT_DB_URL=postgresql://audit:secret@localhost:5432/audit
# Signing (leave blank to use cosign keyless via Sigstore OIDC)
GPG_KEY_ID= # optional: use GPG instead
sbom-vex-agent/
├── vex_agent/
│ ├── ingest.py # Zone 1: SBOM validation and sanitisation
│ ├── 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 signing
│ ├── hitl.py # Human-in-the-loop review gate
│ └── sign.py # Zone 4: cosign / GPG signing
├── 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 を開いてください。
セキュリティの問題は非公開で報告してください — SECURITY.md を参照してください。
MIT — LICENSE を参照してください。
OWASP GenAI セキュリティプロジェクトに準拠して構築されています。公式の OWASP プロジェクトではありません。
| OWASP リスク | ID | 本プロジェクトでの緩和策 |
|---|
| プロンプトインジェクション | LLM01 | LLM インジェクション前にすべての SBOM フィールドをサニタイズ。インジェクションパターンのブロックリスト |
| 機密情報の開示 | LLM02 | すべてのエージェント出力に対する PII スクラバー。内部パスフィルター |
| 不適切な出力処理 | LLM05 | 署名前の CycloneDX スキーマ検証。失敗時の再試行 |
| 過剰なエージェンシー | LLM06 | 分析中の読み取り専用ツール。CVSS ≥ 7.0 のすべての判定に対する HITL ゲート |
| システムプロンプトの漏えい | LLM07 | 内部ポリシーをシステムプロンプトから分離 |
| ベクター / 埋め込みの弱点 | LLM08 | 保存されたベクターに署名。コンテキスト注入前に来歴を検証 |
| 無制限な消費 | LLM10 | MaxMessageTermination(20)。コンポーネントごとのトークン予算。NVD タイムアウト |
| コンポーネント | ツール | 備考 |
|---|
| エージェントオーケストレーション | AutoGen AgentChat v0.4 | マルチエージェント、ツール使用、メッセージフック |
| LLM(推奨) | Qwen2.5-Coder-32B | 構造化 JSON とセキュリティ推論に最適 |
| LLM サーバー | vLLM(本番)/ Ollama(開発) | 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 キーレス) | タイムスタンプ付き、監査ログ記録 |
| 監査ログ | PostgreSQL(追記専用、pgaudit) | すべてのエージェントの判定を記録 |