
# VENDORVET
### 第三方 / 供应商风险问卷与 SBOM 交叉引用

[](https://pypi.org/project/cognis-vendorvet/) [](https://github.com/cognis-digital/vendorvet/actions) [](LICENSE) [](https://github.com/cognis-digital)
*合规与 GRC —— 随时准备好接受审计,支持自托管。*
```
pip install cognis-vendorvet
vendorvet scan . # → prioritized findings in seconds
```
## 用法 —— 分步指南
1. **安装** (Python 3.9+):
pip install vendorvet
2. **评估安全问卷得分。** 将 `vendorvet questionnaire` 指向供应商问卷 JSON 文件,以获取剩余风险得分和风险等级:
vendorvet questionnaire vendor_questionnaire.json
3. **将 SBOM** 与公告源进行交叉比对,以查找易受攻击的组件:
vendorvet sbom vendor_sbom.json advisories.json
4. **获取综合结论**并读取 JSON 格式的输出以供工具使用。`assess` 命令可将问卷与可选的 SBOM 合并:
vendorvet --format json assess vendor_questionnaire.json --sbom vendor_sbom.json --advisories advisories.json | jq .tier
5. **在 CI 中进行拦截。** 退出码 `0` 表示低/中度风险,`2` 表示高/严重风险,`1` 表示用法/IO 错误 —— 这样当供应商处于高风险时,构建步骤就会失败:
vendorvet assess vendor_questionnaire.json --sbom vendor_sbom.json --advisories advisories.json || echo "Vendor flagged high/critical risk"
6. **导出 SARIF 2.1.0** 用于 GitHub 代码扫描 / 任何 SARIF 查看器。在任何子命令中添加 `--format sarif`:
vendorvet --format sarif assess vendor_questionnaire.json \
--sbom vendor_sbom.json --advisories advisories.json > vendorvet.sarif
每个问卷缺口和易受攻击的组件都会变成一个 SARIF 结果;CVE 带有 `security-severity` 属性,以便 GitHub 显示正确的徽章。有关完整的 Actions 工作流,请参见 [`demos/09-ci-gate-sarif`](demos/09-ci-gate-sarif)。
## 实战示例 (demos)
[`demos/`](demos) 下的每个文件夹都是一个可运行的、真实的用例场景,
包含一个 `SCENARIO.md`(说明数据来源、确切命令以及
预期结论)。它们全都使用了真实的、已公开文档记录的 CVE。
| Demo | 情况 | 结论 |
|---|---|---|
| [`01-basic`](demos/01-basic) | SBOM 中包含 Log4Shell 的 SaaS | CRITICAL (退出码 2) |
| [`02-clean`](demos/02-clean) | 完全自我证明的供应商,零缺口 | LOW (退出码 0) |
| [`03-mixed`](demos/03-mixed) | 中端供应商,MFA/渗透测试存在缺口 | MODERATE (退出码 0) |
| [`04-payroll-saas`](demos/04-payroll-saas) | 强大的薪资供应商,限制 PII,缺少泄露 SLA | MODERATE (退出码 0) |
| [`05-clean-vendor`](demos/05-clean-vendor) | 公开数据供应商,已修补的 SBOM | LOW (退出码 0) |
| [`06-supply-chain-struts`](demos/06-supply-chain-struts) | 仅限 SBOM:Apache Struts RCE (CVE-2017-5638) | CRITICAL (退出码 2) |
| [`07-startup-unanswered`](demos/07-startup-unanswered) | 早期阶段供应商未填写控制措施 | HIGH (退出码 2) |
| [`08-spring4shell`](demos/08-spring4shell) | 问卷无异常,但代码中存在 Spring4Shell | CRITICAL (退出码 2) |
| [`09-ci-gate-sarif`](demos/09-ci-gate-sarif) | CI 拦截 + SARIF 上传 (CVE-2021-45046) | CRITICAL (退出码 2) |
| [`10-data-broker-restricted`](demos/10-data-broker-restricted) | 数据代理商,发生过前期数据泄露,存在数据共享 | HIGH (退出码 2) |
| [`11-heartbleed-legacy`](demos/11-heartbleed-legacy) | 存在 Heartbleed OpenSSL 漏洞的传统设备 | HIGH (退出码 2) |
| [`12-feeds-osv-kev`](demos/12-feeds-osv-kev) | 基于 **实时 OSV + CISA-KEV** 丰富 SBOM 数据(支持离线运行) | CRITICAL (退出码 2) |
```
# 直接从 clone 运行任何 demo
python -m vendorvet assess demos/08-spring4shell/questionnaire.json \
--sbom demos/08-spring4shell/sbom.json \
--advisories demos/08-spring4shell/advisories.json
```
## 实时源数据丰富 (OSV + CISA-KEV) —— 适用于边缘 / 物理隔离环境
上面的 `sbom`/`assess` 子命令会将 SBOM 与*手动提供*的公告文件进行交叉比对。
而 `feeds` 子命令则将结论建立在从两个权威、无密钥数据源获取的**真实、最新的**漏洞情报之上,然后**离线**重新提供这些数据,以便该工具可以在断开连接 / 边缘 / 物理隔离的设备上继续工作。
| 源 ID | 数据来源 | URL |
|---|---|---|
| `osv` | OSV.dev — 包+版本 → 跨越 PyPI/npm/Maven/Go/crates.io/… 的已知漏洞 | `https://api.osv.dev/v1/query` |
| `cisa-kev` | CISA 已知被利用漏洞目录(在野被主动利用) | `https://www.cisa.gov/known-exploited-vulnerabilities-catalog` |
**真实的情报丰富:**每个 SBOM 组件都会通过 OSV 解析以获取实时公告;
然后每个 CVE 都会与 CISA-KEV 进行比对。命中 KEV 将引发
`known_exploited` 标志,并将结论升级为 **CRITICAL**,无论
CVSS 评分为多少 —— 处于主动利用中的漏洞是第三方风险升级中最强烈的
单一信号。
```
vendorvet feeds list # the two feeds this tool consumes
vendorvet feeds update osv cisa-kev # fetch + cache (online)
vendorvet feeds enrich vendor_sbom.json # live OSV + KEV enrichment
```
```
$ vendorvet feeds enrich demos/12-feeds-osv-kev/sbom.json --offline
Components scanned: 3
Max CVSS: 10.0 (critical)
Known-exploited (KEV): 2
Verdict: CRITICAL
org.apache.logging.log4j:log4j-core@2.14.1 CVE-2021-44228 CVSS 10.0 (critical) [!! CISA-KEV: ACTIVELY EXPLOITED]
remediate by 2021-12-24; ransomware: Known
django@3.0 CVE-2020-9402 CVSS 7.5 (high)
```
当结论为高/严重风险时,退出码为 `2`(对 CI 拦截友好)。
### 离线 / 物理隔离工作流
`datafeeds`(已内置,仅依赖标准库)会将每次获取的数据缓存到磁盘,并能在
**零网络** 请求的情况下重新提供数据:
```
export COGNIS_FEEDS_CACHE=/secure/feeds-cache # where the cache lives
vendorvet feeds update osv cisa-kev # on a connected host
vendorvet feeds enrich sbom.json --offline # serve from cache only
```
要将漏洞情报移动到断开连接的隔离环境中,请对缓存进行快照,并通过
物理媒介(sneakernet)跨越物理隔离带:
```
# 已连接的 host
python -m vendorvet.datafeeds snapshot-export feeds.tar.gz
# air-gapped host
export COGNIS_FEEDS_CACHE=/secure/feeds-cache
python -m vendorvet.datafeeds snapshot-import feeds.tar.gz
vendorvet feeds enrich sbom.json --offline
```
已提交的测试套件针对 [`tests/fixtures/feeds-cache/`](tests/fixtures/feeds-cache) 下精简的测试固件
进行**完全离线**运行 —— 没有任何测试会接触
网络。*仅限防御性 / 授权使用的情报。*
## 目录
- [为什么选择 vendorvet?](#why) · [功能](#features) · [快速开始](#quick-start) · [示例](#example) · [架构](#architecture) · [AI 技术栈](#ai-stack) · [对比](#how-it-compares) · [集成](#integrations) · [随处安装](#install-anywhere) · [相关项目](#related) · [贡献指南](#contributing)
## 为什么选择 vendorvet?
面向中小型企业的 TPRM
`vendorvet` 具有单一用途、可脚本化、支持自托管:将其指向目标,以您工作流中已有的格式(table · JSON · SARIF)获取优先级排序的结果,在 CI 中基于它进行拦截,并允许 agent 通过 MCP 驱动它。
## 功能
- ✅ 评估安全问卷得分(加权控制措施,固有风险乘数)
- ✅ 将 SBOM 与公告源进行交叉比对(精确版本匹配)
- ✅ 综合供应商结论(问卷 + SBOM)并提供建议
- ✅ 输出为 **table · JSON · SARIF 2.1.0** (`--format`)
- ✅ 对采购门禁友好的 CI 退出码 (0 / 2 / 1)
- ✅ 在 [`demos/`](demos) 中有 11 个可运行的真实用例演示
- ✅ 可在 Linux/macOS/Windows · Docker · devcontainer 上运行
- ✅ 提供 Python、JavaScript、Go 和 Rust 的移植版本 (`ports/`)
## 快速开始
```
pip install cognis-vendorvet
vendorvet --version
vendorvet scan . # scan current project
vendorvet scan . --format json # machine-readable
vendorvet scan . --fail-on high # CI gate (non-zero exit)
```
## 示例
```
$ vendorvet scan .
[HIGH ] VEN-001 example finding (./src/app.py)
[MEDIUM ] VEN-002 another signal (./config.yaml)
2 findings · risk score 5 · 38ms
```
## 架构
```
flowchart LR
IN[target / manifest] --> P[vendorvet
checks + rules]
P --> OUT[findings (JSON / SARIF)]
```
## 从任何 AI 技术栈中使用
`vendorvet` 可与所有流行的 AI 使用方式互操作:
- **MCP 服务器** —— `vendorvet mcp` (Claude Desktop, Cursor, Cognis.Studio, [uncensored-fleet](https://github.com/cognis-digital/uncensored-fleet))
- **兼容 OpenAI / JSON** —— 通过管道将 `vendorvet scan . --format json` 传给任何 agent 或 LLM
- **LangChain · CrewAI · AutoGen · LlamaIndex** —— 用一行代码将 CLI/JSON 封装为工具
- **CI / 脚本** —— 为非 AI 流水线提供退出码 + SARIF
## 对比
| | **Cognis vendorvet** | OneTrust TPRM |
|---|:---:|:---:|
| 支持自托管,无需账号 | ✅ | 视情况而定 |
| 单一命令,零配置 | ✅ | ⚠️ |
| 用于 CI 的 JSON + SARIF | ✅ | 视情况而定 |
| 原生支持 MCP (AI agent) | ✅ | ❌ |
| 多语言移植版 (JS/Go/Rust) | ✅ | ❌ |
| 开源许可 | ✅ COCL | 视情况而定 |
*本着 **OneTrust TPRM** 的精神打造,以 Cognis 的方式重新构建。缺少鸣谢?欢迎提交 PR。*
## 集成
通过管道接入您的技术栈:用于代码扫描的 **SARIF**,用于一切的 **JSON**,用于 AI agent 的 **MCP 服务器** (`vendorvet mcp`),以及用于 SIEM/Slack/Jira 的 webhook 转发器。请参见 [`docs/INTEGRATIONS.md`](docs/INTEGRATIONS.md)。
## 安装 —— 各种方式,各个平台
```
pip install "git+https://github.com/cognis-digital/vendorvet.git" # pip (works today)
pipx install "git+https://github.com/cognis-digital/vendorvet.git" # isolated CLI
uv tool install "git+https://github.com/cognis-digital/vendorvet.git" # uv
pip install cognis-vendorvet # PyPI (when published)
docker run --rm ghcr.io/cognis-digital/vendorvet:latest --help # Docker
brew install cognis-digital/tap/vendorvet # Homebrew tap
curl -fsSL https://raw.githubusercontent.com/cognis-digital/vendorvet/main/install.sh | sh
```
| Linux | macOS | Windows | Docker | 云平台 |
|---|---|---|---|---|
| `scripts/setup-linux.sh` | `scripts/setup-macos.sh` | `scripts/setup-windows.ps1` | `docker run ghcr.io/cognis-digital/vendorvet` | [DEPLOY.md](docs/DEPLOY.md) (AWS/Azure/GCP/k8s) |
## 相关的 Cognis 工具
- [`soc2box`](https://github.com/cognis-digital/soc2box) —— SOC 2 证据收集器和控制追踪器,支持自托管
- [`gdprkit`](https://github.com/cognis-digital/gdprkit) —— GDPR/CCPA DSAR、RoPA 和 Cookie 同意工具包
- [`policyforge`](https://github.com/cognis-digital/policyforge) —— 通过简短的问卷自动生成安全策略
- [`auditrail`](https://github.com/cognis-digital/auditrail) —— 带有哈希链证明的防篡改审计日志聚合器
- [`frameworkmap`](https://github.com/cognis-digital/frameworkmap) —— 跨越 NIST、ISO 27001、SOC 2、CMMC、PCI 的控制交叉映射
- [`dpiaforge`](https://github.com/cognis-digital/dpiaforge) —— DPIA 和欧盟 AI 法案影响评估生成器
**探索全套工具** [🗂️ 全部 170+ 个工具](https://github.com/cognis-digital/cognis-neural-suite) · [⭐ awesome-cognis](https://github.com/cognis-digital/awesome-cognis) · [🔗 cognis-sources](https://github.com/cognis-digital/cognis-sources) · [🤖 uncensored-fleet](https://github.com/cognis-digital/uncensored-fleet) · [🧠 engram](https://github.com/cognis-digital/engram)
## 互操作性
`{}` 与 300+ 工具的 Cognis 套件协同组合 —— JSON 输入/输出和共享的
兼容 OpenAI 的 `/v1` 主干。请参见 **[INTEROP.md](INTEROP.md)** 了解
套件图谱、组合模式和参考技术栈。
## 许可证
在 **Cognis Open Collaboration License (COCL) v1.0** 下开源可见 —— 个人、内部评估、研究和教育用途免费;**商业 / 生产用途需要许可证** (licensing@cognis.digital)。请参见 [LICENSE](LICENSE)。