Miri-Shtul/-vulnerability-registry-mcp
GitHub: Miri-Shtul/-vulnerability-registry-mcp
一个 MCP 服务器,将管道分隔的漏洞数据库封装为 LLM 工具,提供自然语言驱动的漏洞检索、聚合统计与交互式 CLI 辅助分析。
Stars: 0 | Forks: 0
# 漏洞登记 MCP 服务器
一个 MCP (Model Context Protocol) 服务器,它封装了一个遗留的管道分隔漏洞数据库,并将其暴露为供 LLM 驱动的安全分析使用的工具。为 Deloitte 的家庭作业而构建。
## 快速开始
```
# 安装依赖
npm install
# 构建
npm run build
# 运行测试(3 套件共 86 个测试)
npm test
# Lint(Biome — 格式化、导入、Lint 规则)
npm run lint # check only
npm run lint:fix # auto-fix
# 使用 MCP Inspector 测试
npm run inspect
```
### Claude Desktop 配置
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`:
```
{
"mcpServers": {
"vulnerability-registry": {
"command": "node",
"args": ["/absolute/path/to/vulnerability-registry-mcp/dist/index.js"]
}
}
}
```
## 工具
### `list_vendors`
列出所有软件供应商及其每个供应商的漏洞摘要。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `category` | 字符串 | 否 | 按类别过滤(例如 "Open Source"、"Software") |
**示例输出:**
```
VENDORS (5 total)
[V1] Microsoft
Category: Software | HQ: Redmond, WA | Founded: 1975
Vulnerabilities: 5 total, 1 open | Highest CVSS: 9.8
```
### `get_vendor`
获取完整的供应商档案,包括所有相关漏洞。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `vendor_id` | 字符串 | 是 | 供应商 ID(例如 "V1")或名称关键字(例如 "Microsoft") |
**示例输出:**
```
VENDOR: Apache Software Foundation [V2]
Category: Open Source
HQ: Wilmington, DE
Founded: 1999
VULNERABILITY SUMMARY (5 total)
By severity: critical: 3, high: 2
By status: patched: 5, open: 0
TOP VULNERABILITIES (showing 5 of 5, by CVSS):
CVE-2021-44228 | Log4Shell | CRITICAL | CVSS 10.0 | patched | 2.0-2.14.1 | 2021-12-10
```
### `lookup_vulnerability`
通过 CVE ID 或标题关键字查找特定漏洞。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `query` | 字符串 | 是 | CVE ID(例如 "CVE-2021-44228")或标题关键字(例如 "Log4Shell") |
**示例输出:**
```
SEARCH RESULTS (1 match)
CVE-2021-44228 — Log4Shell
Vendor: Apache Software Foundation [V2]
Severity: CRITICAL | CVSS: 10.0
Status: patched
Affected versions: 2.0-2.14.1
Published: 2021-12-10
```
### `list_vulnerabilities`
列出并过滤漏洞 — 主要的 triage 工具。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `severity` | 字符串 | 否 | critical、high、medium 或 low |
| `status` | 字符串 | 否 | open 或 patched |
| `vendor_id` | 字符串 | 否 | 供应商 ID(例如 "V1") |
| `min_cvss` | 数字 | 否 | 最小 CVSS 分数(0-10) |
| `max_cvss` | 数字 | 否 | 最大 CVSS 分数(0-10) |
| `sort_by` | 字符串 | 否 | cvss_score(默认)、published 或 severity |
| `limit` | 数字 | 否 | 每页最大结果数(默认:50,最大:200) |
| `offset` | 数字 | 否 | 跳过的结果数用于分页(默认:0) |
**示例输出:**
```
VULNERABILITIES (showing 1-4 of 4 total)
Filters: status=open
1. CVE-2024-27198 | TeamCity Auth Bypass | Microsoft | CRITICAL | CVSS 9.8 | open | 2024-03-04
2. CVE-2024-21762 | Fortinet SSL VPN OOB | Google | CRITICAL | CVSS 9.6 | open | 2024-02-08
3. CVE-2024-1086 | Linux Netfilter UAF | Linux Kernel Organization | HIGH | CVSS 7.8 | open | 2024-01-31
4. CVE-2023-35829 | Linux Race Condition | Linux Kernel Organization | HIGH | CVSS 7.0 | open | 2023-06-18
```
### `get_summary_stats`
获取一个风险仪表板及汇总统计。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| *(无)* | — | — | — |
**示例输出:**
```
VULNERABILITY REGISTRY — SUMMARY DASHBOARD
============================================
Total vendors: 5
Total vulnerabilities: 20
BY SEVERITY:
CRITICAL: 8
HIGH: 10
MEDIUM: 2
BY STATUS:
patched: 16
open: 4
⚠ OPEN CRITICAL VULNERABILITIES: 2
```
### `find_critical_open`
查找高于 CVSS 阈值的开放漏洞 — 紧急 triage 工具。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `min_cvss` | 数字 | 否 | 最小 CVSS 阈值(默认:7.0) |
**示例输出:**
```
CRITICAL OPEN VULNERABILITIES (CVSS ≥ 7.0)
Found: 4 items requiring attention
CVE-2024-27198 — TeamCity Auth Bypass
Vendor: Microsoft [V1]
Severity: CRITICAL | CVSS: 9.8
Affected: TeamCity < 2023.11.4
Published: 2024-03-04 (778 days ago) *** LONG OVERDUE ***
```
## 设计决策
| 决策 | 理由 |
|----------|-----------|
| **从 `# FORMAT:` 元数据动态解析列** | 面向未来 — 如果 VERSION 变更或添加列,解析器无需代码变更即可适应。解析器中未硬编码任何列名。 |
| **基于 Map 的多索引** | 对供应商 ID 和 CVE ID 提供 O(1) 查找;仅当需要多字段组合时才会扫描。扩展到数千条记录。 |
| **6 个专注工具而非 1 个巨型查询** | 当每个工具都有清晰且有明确范围的目的时,LLM 能更准确地选择工具。单一“查询任意内容”的工具会导致参数构建不佳。 |
| **文本响应(非 JSON)** | LLM 在对话中更自然地消费和转发人类可读文本。JSON 响应需要额外的解析说明。 |
| **仅使用 `console.error()` 进行日志记录** | stdout 是 MCP JSON-RPC 传输通道。任何写入 stdout 的日志都会破坏协议。所有诊断信息都输出到 stderr。 |
| **专用的 `find_critical_open` 工具** | 最常见的 SOC 问题(“现在需要注意什么?”)值得一个零摩擦、单调用的答案,并附带丰富上下文(已打开天数、过期标志)。 |
| **灵活的 `get_vendor`,接受 ID 或名称** | 分析师通常以供应商名称(“Apache”)而非 ID(“V2”)思考。支持两者意味着 LLM 可以使用其拥有的任何上下文。 |
## CLI 代理(第二阶段)
一个交互式 CLI 代理,能够接受自然语言问题、调用适当的 MCP 工具,并使用 Groq API 综合答案。
### 设置
```
# 创建包含 Groq API 密钥的 .env 文件
echo "GROQ_API_KEY=your_api_key_here" > .env
# 构建(如果尚未构建)
npm run build
# 运行代理
npm run agent
```
### 使用示例
```
$ npm run agent
Starting MCP server...
Connected to MCP server
Discovered 6 tools: list_vendors, get_vendor, lookup_vulnerability, list_vulnerabilities, get_summary_stats, find_critical_open
Vulnerability Registry Agent ready. Type your questions (Ctrl+C to exit).
You: How many critical vulnerabilities are still open?
[Tool: get_summary_stats]
Based on the vulnerability registry statistics, there are 2 open critical vulnerabilities
out of a total of 20 vulnerabilities tracked across 5 vendors.
You: What is the CVSS score of Log4Shell?
[Tool: lookup_vulnerability]
The CVSS score of Log4Shell (CVE-2021-44228) is 10.0, which is the maximum severity rating.
It affects Apache Log4j versions 2.0 through 2.14.1 and has been patched.
You: List all vulnerabilities from Microsoft
[Tool: get_vendor]
Microsoft has 5 vulnerabilities in the registry:
1. CVE-2024-27198 - TeamCity Auth Bypass (CRITICAL, CVSS 9.8, open)
2. CVE-2021-34527 - PrintNightmare (CRITICAL, CVSS 8.8, patched)
3. CVE-2021-26855 - ProxyLogon (CRITICAL, CVSS 9.8, patched)
4. CVE-2020-1472 - Zerologon (CRITICAL, CVSS 10.0, patched)
5. CVE-2017-0144 - EternalBlue (HIGH, CVSS 8.1, patched)
You: Which open vulnerabilities need urgent attention?
[Tool: find_critical_open]
There are 4 open vulnerabilities requiring attention (CVSS ≥ 7.0):
1. CVE-2024-27198 - TeamCity Auth Bypass (Microsoft, CVSS 9.8) *** LONG OVERDUE ***
2. CVE-2024-21762 - Fortinet SSL VPN OOB (Google, CVSS 9.6) *** LONG OVERDUE ***
3. CVE-2024-1086 - Linux Netfilter UAF (Linux, CVSS 7.8)
4. CVE-2023-35829 - Linux Race Condition (Linux, CVSS 7.0)
```
### 代理功能
- **自然语言查询** — 用普通英语提问
- **自动工具选择** — LLM 根据问题选择正确的 MCP 工具
- **多步推理** — 复杂查询触发多个工具调用
- **会话日志记录** — 所有交互记录到 `logs/agent.log`,包含时间指标
- **Groq API 集成** — 使用 Llama 3.3 70B 模型,30 秒请求超时
### 日志输出
代理将详细日志写入 `logs/agent.log`:
```
[2026-04-21T12:34:56.789Z] [INFO] Session started
[2026-04-21T12:34:57.123Z] [INFO] Connected to MCP server, discovered 6 tools
[2026-04-21T12:35:02.456Z] [INFO] User question: "How many critical vulnerabilities are still open?"
[2026-04-21T12:35:02.457Z] [INFO] Groq API call started
[2026-04-21T12:35:03.890Z] [INFO] Groq API call completed in 1433ms (tokens: 245/89/334)
[2026-04-21T12:35:03.891Z] [INFO] Tool call: get_summary_stats with args {}
[2026-04-21T12:35:03.895Z] [INFO] Tool call: get_summary_stats completed in 4ms
[2026-04-21T12:35:04.568Z] [INFO] Final answer delivered (iteration 2)
```
## 设计决策
| 决策 | 理由 |
|----------|-----------|
| **从 `# FORMAT:` 元数据动态解析列** | 面向未来 — 如果 VERSION 变更或添加列,解析器无需代码变更即可适应。解析器中未硬编码任何列名。 |
| **基于 Map 的多索引** | 对供应商 ID 和 CVE ID 提供 O(1) 查找;仅当需要多字段组合时才会扫描。扩展到数千条记录。 |
| **6 个专注工具而非 1 个巨型查询** | 当每个工具都有清晰且有明确范围的目的时,LLM 能更准确地选择工具。单一“查询任意内容”的工具会导致参数构建不佳。 |
| **文本响应(非 JSON)** | LLM 在对话中更自然地消费和转发人类可读文本。JSON 响应需要额外的解析说明。 |
| **仅使用 `console.error()` 进行日志记录** | stdout 是 MCP JSON-RPC 传输通道。任何写入 stdout 的日志都会破坏协议。所有诊断信息都输出到 stderr。 |
| **专用的 `find_critical_open` 工具** | 最常见的 SOC 问题(“现在需要注意什么?”)值得一个零摩擦、单调用的答案,并附带丰富上下文(已打开天数、过期标志)。 |
| **灵活的 `get_vendor`,接受 ID 或名称** | 分析师通常以供应商名称(“Apache”)而非 ID(“V2”)思考。支持两者意味着 LLM 可以使用其拥有的任何上下文。 |
| **不区分大小写的 CVE 查询** | CVE ID 在索引期间统一转换为大写,以确保无论输入大小写都能正确查询。 |
| **30 秒 API 超时** | 防止 CLI 在网络缓慢或 API 无响应时无限期挂起。 |
## 如果有更多时间,我将添加
- **交互式 Web UI** — 一个现代化的 React/Next.js 前端,与代理集成,提供聊天界面、漏洞仪表板和数据可视化
- **对话历史侧边栏** — 左侧面板显示过去 24 小时的对话,允许用户恢复或引用之前的分析会话
- **全文搜索** — 对所有字段进行模糊匹配,而不仅限于 CVE ID 和标题
- **文件监视/热重载** — 检测 `.db` 文件变更并重建索引,无需重启
- **模式迁移处理** — 检测 VERSION 变更并应用转换以保持向后兼容
- **统计缓存** — 缓存 `getSummaryStats()` 结果并在数据变更时失效(在 20 条记录时可忽略,在 10 万条记录时很重要)
- **优雅关闭** — 等待进行中的操作完成后再退出
标签:Biome, Cilium, CLI 代理, Cloudflare, CMS安全, CVE, CVSS, Deloitte 作业, GNU通用公共许可证, GPT, JavaScript, Lint, LLM 工具, LLM 调用, Log4Shell, MCP Server, MITM代理, MITRE ATT&CK, Node.js, NPM, RAG, TypeScript, 交互式命令行, 供应商画像, 单元测试, 大语言模型安全, 安全作业, 安全分析流水线, 安全插件, 按供应商过滤, 按类别过滤, 数字签名, 数据接口, 文档结构分析, 机密管理, 检索增强生成, 模型上下文协议, 测试, 漏洞严重性, 漏洞修复, 漏洞列表, 漏洞查询, 漏洞汇总, 漏洞状态, 漏洞管理, 漏洞过滤, 管道分隔符, 网络安全培训, 自动化攻击, 遗留系统, 风险看板