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, 交互式命令行, 供应商画像, 单元测试, 大语言模型安全, 安全作业, 安全分析流水线, 安全插件, 按供应商过滤, 按类别过滤, 数字签名, 数据接口, 文档结构分析, 机密管理, 检索增强生成, 模型上下文协议, 测试, 漏洞严重性, 漏洞修复, 漏洞列表, 漏洞查询, 漏洞汇总, 漏洞状态, 漏洞管理, 漏洞过滤, 管道分隔符, 网络安全培训, 自动化攻击, 遗留系统, 风险看板