mukul975/cve-mcp-server

GitHub: mukul975/cve-mcp-server

一个生产级的 MCP 服务器,将 27 种安全情报工具整合到 Claude 中,实现一键式漏洞情报聚合与风险评分。

Stars: 105 | Forks: 15

# 🛡️ CVE MCP 服务器 ![CVE MCP 服务器](https://raw.githubusercontent.com/mukul975/cve-mcp-server/main/assets/banner.png) **AI 驱动的安全情报触手可及 —— 27 种工具,21 个数据源,一个协议。** [![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white)](https://python.org) [![许可证: MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE) [![MCP 兼容](https://img.shields.io/badge/MCP-Compatible-blue?style=flat-square)](https://modelcontextprotocol.io) [![安全工具](https://img.shields.io/badge/Security-Intelligence-red?style=flat-square&logo=shield)](https://github.com/mukul975/cve-mcp-server) [![FastMCP](https://img.shields.io/badge/FastMCP-Python-00d4ff?style=flat-square)](https://gofastmcp.com) 一款生产级别的 **模型上下文协议 (MCP) 服务器**,将 Claude 转变为一个全方位的安全分析师。无需在 NVD、EPSS、CISA KEV、Shodan、VirusTotal 和 GreyNoise 之间切换 15 个以上的浏览器标签页,只需向 Claude 提出一个问题,即可在数秒内获得关联情报。基于 Python、FastMCP、httpx、aiosqlite、Pydantic v2 和 defusedxml 构建。 **问题:** 梳理一个 CVE 意味着要查询 NVD 获取 CVSS 分数、EPSS 获取利用概率、CISA KEV 获取主动利用状态、GitHub 查找补丁、VirusTotal 获取恶意软件关联,然后在大脑中进行信息关联。对于 50 个 CVE,这可能意味着整整一天的时间。 **解决方案:** CVE MCP 服务器为 Claude 提供对 27 种安全工具和 21 个 API 的直接访问。询问“是否应该修补 CVE-2024-3400?”,Claude 将并行查询所有相关来源,计算复合风险评分,并给出带有证据的优先级建议。 --- ## 📑 目录 - [架构](#架构) - [工具目录](#-tool-catalog-27-tools) - [安装](#安装) - [API 密钥配置](#-api-keys-setup) - [配置](#配置) - [快速开始](#快速开始) - [使用示例](#-usage-examples) - [风险评分详解](#-risk-score-explained) - [数据源](#-data-sources) - [运行测试](#-running-tests) - [深度架构解析](#-architecture-deep-dive) - [安全与隐私](#-security-and-privacy) - [故障排除](#-troubleshooting) - [路线图与已知限制](#-roadmap-and-known-limitations) - [贡献](#-contributing) - [许可证](#-license) --- ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Claude Desktop / Claude Code │ │ (MCP Client via stdio) │ └──────────────────────────────┬──────────────────────────────────────┘ │ Model Context Protocol (stdio) ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ CVE MCP Server (Python) │ │ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │ │ │ 27 MCP │ │ Composite │ │ SQLite Cache │ │ │ │ Tools │ │ Risk Engine │ │ + Audit Log │ │ │ └──────┬──────┘ └──────┬───────┘ └───────┬───────┘ │ │ │ │ │ │ │ ┌──────┴────────────────┴───────────────────┴──────┐ │ │ │ Async HTTP Client (httpx) │ │ │ │ Rate Limiter · Response Cache │ │ │ └──────────────────────┬───────────────────────────┘ │ └─────────────────────────┼───────────────────────────────────────────┘ │ HTTPS (outbound only) ┌───────────────┼───────────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ VULNERABILITY│ │ NETWORK │ │ THREAT │ │ INTELLIGENCE │ │ INTELLIGENCE │ │ INTELLIGENCE │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ NVD API 2.0 │ │ AbuseIPDB │ │ VirusTotal │ │ EPSS / FIRST │ │ GreyNoise v3 │ │ MalwareBazaar│ │ CISA KEV │ │ Shodan │ │ ThreatFox │ │ OSV.dev │ │ CIRCL PDNS │ │ Ransomwhere │ │ GitHub GHSA │ │ │ │ AlienVault │ │ MITRE ATT&CK │ │ │ │ URLScan.io │ └──────────────┘ └──────────────┘ └──────────────┘ ``` 所有流量均为 **仅出站 HTTPS** —— 不打开任何入站端口。API 密钥从环境变量加载,永不记录。私有/内部 IP 地址被所有查询工具屏蔽。 --- ## 🔍 工具目录(27 种工具) ### 核心漏洞情报(8 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `lookup_cve` | 从 NVD 获取详细的 CVE 记录,包括 CVSS 分数、CWE、受影响的组件、引用和时间线 | 免费 / 无密钥(推荐使用密钥) | `lookup_cve("CVE-2024-3400")` | | `search_cves` | 按关键词、产品名称、严重性或日期范围搜索 NVD 中的 CVE | 免费 / 无密钥(推荐使用密钥) | `search_cves(keyword="Apache Log4j", severity="CRITICAL")` | | `get_epss_score` | 获取 CVE 的 EPSS 利用概率(0–1)及百分位 | 免费 / 无密钥 | `get_epss_score("CVE-2024-3400")` | | `check_kev_status` | 检查 CVE 是否出现在 CISA 的已知被利用漏洞目录中 | 免费 / 无密钥 | `check_kev_status("CVE-2021-44228")` | | `get_cvss_details` | 解析并解释 CVSS v3.1 向量字符串,提供每个度量的详细分解 | 免费 / 无密钥 | `get_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H")` | | `get_cwe_info` | 从内嵌数据库中查找 CWE ID 的通用弱点枚举详情 | 免费 / 无密钥 | `get_cwe_info("CWE-79")` | | `get_cve_references` | 提取并分类某个 CVE 的所有引用链接(补丁、公告、漏洞利用) | 免费 / 无密钥(推荐使用密钥) | `get_cve_references("CVE-2023-44487")` | | `bulk_cve_lookup` | 单次调用批量获取最多 20 个 CVE 的详细信息并进行并行增强 | 免费 / 无密钥(推荐使用密钥) | `bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])` | ### 漏洞利用与攻击情报(4 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `search_exploits` | 搜索 GitHub 上的公开漏洞利用代码和代码仓库 | `GITHUB_TOKEN`(可选) | `search_exploits("CVE-2024-3400")` | | `get_mitre_techniques` | 将 CVE 或 CWE 映射到相关的 MITRE ATT&CK 技术、战术和缓解措施 | 免费 / 无密钥 | `get_mitre_techniques("CVE-2021-44228")` | | `check_poc_availability` | 判断多个来源是否存在针对某 CVE 的已知漏洞利用代码 | `GITHUB_TOKEN`(可选) | `check_poc_availability("CVE-2024-3400")` | | `get_attack_patterns` | 获取与 CWE 或 CVE 相关的 CAPEC 攻击模式详情 | 免费 / 无密钥 | `get_attack_patterns("CWE-89")` | ### 高级风险与报告(4 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `calculate_risk_score` | 基于 CVSS、EPSS、KEV 状态和漏洞利用代码可用性计算 0–100 的复合风险评分 | 免费 / 无密钥(推荐使用密钥) | `calculate_risk_score("CVE-2024-3400")` | | `generate_risk_report` | 为一个或多个 CVE 生成格式化的安全主管报告及建议 | 免费 / 无密钥(推荐使用密钥) | `generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"])` | | `prioritize_cves` | 按复合风险评分对 CVE 列表进行排序以优化处理优先级 | 免费 / 无密钥(推荐使用密钥) | `prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"])` | | `get_trending_cves` | 基于高 EPSS 分数和近期新增的 KEV 条目获取热门 CVE | 免费 / 无密钥 | `get_trending_cves(days=7, min_epss=0.5)` | ### 网络情报(4 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `lookup_ip_reputation` | 通过 AbuseIPDB 检查 IP 地址的滥用历史与可信度评分 | `ABUSEIPDB_API_KEY` | `lookup_ip_reputation("185.220.101.34")` | | `check_ip_noise` | 查询 GreyNoise 以获取 IP 的扫描/攻击活动、分类及相关 CVE | `GREYNOISE_API_KEY` | `check_ip_noise("185220.101.34")` | | `shodan_host_lookup` | 通过 Shodan 获取主机的开放端口、服务、横幅及漏洞信息 | `SHODAN_API_KEY` | `shodan_host_lookup("8.8.8.8")` | | `passive_dns_lookup` | 从 CIRCL 被动 DNS 获取域名的历史解析数据 | `CIRCL_PDNS_USER` + `CIRCL_PDNS_PASSWORD` | `passive_dns_lookup("example.com")` | ### 威胁情报(4 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `virustotal_lookup` | 对文件哈希、URL、域名或 IP 地址进行 70 多种杀毒引擎分析 | `VIRUSTOTAL_API_KEY` | `virustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f")` | | `search_malware` | 通过哈希、标签或签名在 MalwareBazaar 中搜索恶意软件样本 | `ABUSECH_AUTH_KEY`(可选) | `search_malware(tag="Emotet")` | | `search_iocs` | 查询 ThreatFox 中与恶意软件家族相关的 IOC | `ABUSECH_AUTH_KEY`(可选) | `search_iocs(malware="CobaltStrike")` | | `check_ransomware` | 查询 Ransomwhere 中的勒索软件支付地址和交易数据 | 免费 / 无密钥 | `check_ransomware(address="bc1q...")` | ### DevSecOps(3 种工具) | 工具 | 描述 | 需要 API 密钥 | 示例用法 | |------|------|-----------------|---------------| | `scan_dependencies` | 扫描软件包名称和版本是否存在于 OSV.dev 中的已知漏洞 | 免费 / 无密钥 | `scan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"})` | | `scan_github_advisories` | 按生态系统、软件包或严重性搜索 GitHub 安全公告 | `GITHUB_TOKEN`(可选) | `scan_github_advisories(ecosystem="pip", package="django")` | | `urlscan_check` | 提交 URL 进行扫描或从 URLScan.io 获取历史扫描结果 | `URLSCAN_API_KEY` | `urlscan_check("https://suspicious-site.com")` | --- ## 📦 安装 ### 先决条件 - **Python 3.10+**(推荐 3.11 或 3.12) - **pip** 或 **uv** 包管理器 - **Git** 用于克隆仓库 - 可访问环境变量的终端 ### 分步安装 ``` # 克隆仓库 git clone https://github.com/mukul975/cve-mcp-server.git cd cve-mcp-server # 创建并激活虚拟环境 python -m venv venv # macOS / Linux: source venv/bin/activate # Windows (PowerShell): .\venv\Scripts\Activate.ps1 # Windows (CMD): venv\Scripts\activate.bat # 安装依赖项 pip install -e . # 复制并配置环境变量 cp .env.example .env # 使用您的 API 密钥编辑 .env(请参阅下方“API 密钥设置”部分) # 验证服务器是否启动 python -m cve_mcp.server ``` ### 使用 uv(更快的替代方案) ``` git clone https://github.com/mukul975/cve-mcp-server.git cd cve-mcp-server uv venv source .venv/bin/activate # or .venv\Scripts\activate on Windows uv pip install -e . cp .env.example .env ``` ### 包含测试依赖 ``` pip install -e ".[test]" ``` --- ## 🔑 API 密钥配置 API 密钥按优先级组织 —— 先获取 **Tier 1** 密钥以获得最大覆盖范围和免费工具的最高性能,然后根据需要逐步添加 Tier 2 和 Tier 3。 ### Tier 1:高优先级(免费、即时访问、覆盖最广) | 环境变量 | 启用功能 | 获取方式 | 免费限制 | 是否必需 | |----------|----------|----------|----------|----------| | `NVD_API_KEY` | 10 倍加速的 NVD 查询(50 请求/30 秒) | [在 nvd.nist.gov 申请](https://nvd.nist.gov/developers/request-an-api-key) | **每 30 秒 50 次请求** | 可选但强烈推荐 | | `GITHUB_TOKEN` | GitHub 安全公告 + 漏洞利用 PoC 搜索 | [在 github.com/settings/tokens 创建](https://github.com/settings/tokens) | **每小时 5,000 次请求** | 可选(无密钥时每小时 60 次) | ### Tier 2:推荐(免费账户,价值显著) | 环境变量 | 启用功能 | 获取方式 | 免费限制 | 是否必需 | |----------|----------|----------|----------|----------| | `ABUSEIPDB_KEY` | IP 信誉查询 | [在 abuseipdb.com 注册](https://www.abuseipdb.com/register) | **每天 1,000 次检查** | 使用 IP 工具必需 | | `VIRUSTOTAL_KEY` | 文件/URL/域名/IP 恶意软件扫描 | [在 virustotal.com 注册](https://www.virustotal.com/gui/join-us) | **每天 500 次查询,每分钟 4 次** | 使用 VT 工具必需 | | `GREYNOISE_API_KEY` | IP 噪声/扫描活动情报 | [在 viz.greynoise.io 注册](https://viz.greynoise.io/signup) | **每周 50 次查询**(社区版) | 使用 GreyNoise 工具必需 | | `SHODAN_KEY` | 主机/端口/服务侦察 | [在 account.shodan.io 注册](https://account.shodan.io) | 基础主机查询(免费层) | 使用 Shodan 工具必需 | ### Tier 3:可选(扩展情报) | 环境变量 | 启用功能 | 获取方式 | 免费限制 | 是否必需 | |----------|----------|----------|----------|----------| | `URLSCAN_KEY` | URL 扫描与网站分析 | [在 urlscan.io 注册](https://urlscan.io/user/signup) | **每天 5,000 次公开扫描** | 可选 | | `CIRCL_PDNS_USER` | CIRCL 被动 DNS 查询 | [在 circl.lu 申请](https://www.circl.lu/services/passive-dns/) | 仅合作伙伴 | 可选 | | `CIRCL_PDNS_PASS` | CIRCL 被动 DNS 认证 | 注册后提供 | 仅合作伙伴 | 可选 | --- ## ⚙️ 配置 ### 环境变量示例(.env.example) ``` # NVD API 密钥 — 免费获取于 https://nvd.nist.gov/developers/request-an-api-key # 无密钥:5 req/30s | 有密钥:50 req/30s NVD_API_KEY= # GitHub 令牌 — 将速率限制从 60/hr 提升至 5000/hr(无需作用域) GITHUB_TOKEN= # 威胁情报密钥(均为可选 — 工具在缺少时会优雅降级) ABUSEIPDB_KEY= # https://www.abuseipdb.com/account/api VIRUSTOTAL_KEY= # https://www.virustotal.com/gui/join-us URLSCAN_KEY= # https://urlscan.io/user/signup SHODAN_KEY= # https://account.shodan.io/register # GreyNoise — 使用 /v3/ip/{ip} 端点(NOT 已废弃的 /v3/community) GREYNOISE_API_KEY= # https://viz.greynoise.io/signup # CIRCL 被动 DNS — 需要合作伙伴注册 CIRCL_PDNS_USER= CIRCL_PDNS_PASS= # 可选覆盖 CACHE_DB_PATH= # defaults to ~/.cve-mcp/cache.db AUDIT_LOG_PATH= # defaults to ~/.cve-mcp/audit.log REQUEST_TIMEOUT=30 # HTTP timeout in seconds MAX_RETRIES=3 # retries on transient errors ``` ### Claude Desktop 配置 **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` ``` { "mcpServers": { "cve-mcp": { "command": "python", "args": ["-m", "cve_mcp.server"], "cwd": "/absolute/path/to/cve-mcp-server", "env": { "NVD_API_KEY": "your-key-here", "GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx", "ABUSEIPDB_KEY": "your-abuseipdb-key", "GREYNOISE_API_KEY": "your-greynoise-key", "SHODAN_KEY": "your-shodan-key" } } } } ``` ### Claude Code 配置 ``` # 基础设置 claude mcp add cve-mcp -- python -m cve_mcp.server # 使用来自 .env 文件的环境变量 claude mcp add cve-mcp --env-file .env -- python -m cve_mcp.server # 验证连接 claude mcp list ``` --- ## 🚀 快速开始 ### 步骤 1:安装(2 分钟) ``` git clone https://github.com/mukul975/cve-mcp-server.git cd cve-mcp-server python -m venv venv && source venv/bin/activate pip install -e . ``` ### 步骤 2:使用免费工具首次测试 无需 `.env` 文件。将服务器添加到 Claude Desktop 或 Claude Code,然后尝试: Claude 将使用 `lookup_cve`(NVD)、`get_epss_score`(EPSS)和 `check_kev`(CISA KEV)——全部免费,无需密钥。 ### 步骤 3:添加首个密钥以获得 10 倍性能提升 ``` echo 'NVD_API_KEY=your-key-here' > .env ``` 申请一个免费的 NVD 密钥,访问 [nvd.nist.gov](https://nvd.nist.gov/developers/request-an-api-key) —— 即时通过邮件获取,将速率限制从 **5 提升至 50 次请求/30 秒**。 ### 步骤 4:完整模式 添加 Tier 1 和 Tier 2 密钥后,即可获得完整功能。 --- ## 💬 使用示例 ### 场景 1:“是否应立即修补 Log4Shell?” Claude 在后台协调多个工具: ``` → lookup_cve("CVE-2021-44228") CVSS 3.1: 10.0 (CRITICAL) | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H → get_epss_score("CVE-2021-44228") EPSS: 0.97531 (97.5%) | Percentile: 99.99% → check_kev("CVE-2021-44228") ✅ IN CISA KEV — Added 2021-12-10 | Known ransomware use: Yes → check_poc_exists("CVE-2021-44228") ✅ WEAPONIZED — 300+ public PoC repositories found → calculate_risk_score("CVE-2021-44228") Risk Score: 97/100 (CRITICAL) | Urgency: PATCH IMMEDIATELY ``` **Claude 的回答:** “CVE-2021-44228 评分为 **97/100(严重)**。Apache Log4j 远程代码执行,CVSS 10.0,EPSS 概率 97.5%,CISA KEV 中确认存在活跃利用(包括勒索软件活动),公开漏洞利用代码超过 300 个。**立即修补。**” ### 场景 2:“扫描我的 Python requirements.txt” ``` → scan_dependencies(ecosystem="PyPI", packages={...}) Found 12 vulnerabilities across 4 packages ``` **Claude 的回答:** “发现 **12 个漏洞**。立即采取行动:Django 3.2.0(含 3 个严重 CVE,包括 SQL 注入)、Pillow 9.0.0(堆溢出)、cryptography 37.0.0(OpenSSL 链)。升级至:django>=4.2.16、pillow>=10.3.0、cryptography>=42.0.0。” ### 场景 3:“分析一个可疑” ``` → check_ip_reputation("185.220.101.34") AbuseIPDB Confidence: 100% | Reports: 4,832 | ISP: Tor Exit Node → check_ip_noise("185.220.101.34") GreyNoise: MALICIOUS | Tags: [Tor Exit Node, Web Scanner] CVEs targeted: CVE-2024-3400, CVE-2023-46805 → shodan_host_lookup("185.220.101.34") Open ports: 22, 80, 443, 9001 | OS: Linux ``` **Claude 的回答:** “**185.220.101.34 是已知 Tor 出口节点**,在 AbuseIPDB 中恶意度评分为 100%,累计 4,832 次举报。GreyNoise 确认其正在扫描 CVE-2024-3400(Palo Alto)和 CVE-2023-46805(Ivanti)。**建议:在防火墙处阻断。**” ### 场景 4:“生成一份安全主管报告” ``` → compare_cves([...]) Compiles: NVD, EPSS, KEV, PoC availability, MITRE ATT&CK mapping Generates: Ranked risk table, remediation timeline, executive summary ``` --- ## 📊 风险评分详解 `calculate_risk_score` 工具生成一个 **0–100 的复合风险评分**,基于四个独立信号加权计算。 ### 计算公式 ``` Risk Score = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15) ``` | 组件 | 权重 | 含义 | |------|------|------| | **CVSS v3.1 基础评分** | 20% | 理论最严重程度 | | **EPSS 概率** | 35% | 未来 30 天内被利用的统计概率 | | **CISA KEV 状态** | 30% | 真实世界中已被利用 | | **漏洞利用代码可用性** | 15% | 公开 PoC 降低攻击门槛 | ### 增强乘数 - **KEV + 活跃漏洞利用** → ×1.15 - **CVSS ≥ 9.0 且 EPSS > 0.7** → ×1.10 - **发布于 7 天内** → ×1.05 评分上限为 100。 ### 风险标签 | 评分 | 标签 | 建议操作 | |------|------|----------| | **0 – 25** | **低** | 在下一个维护窗口中安排修复 | | **26 – 50** | **中** | 在 30 天 SLA 内修补 | | **51 – 75** | **高** | 在 7 天内修补;升级给团队负责人 | | **76 – 100** | **严重** | **在 24–48 小时内修补。** 紧急变更窗口。 | ### 权重依据 **EPSS 占最高权重(35%)**,因为它是预测实际利用的最佳指标——比 CVSS 单独使用更准确。CVSS 10.0 但 EPSS 0.01 的漏洞理论上危险但实际可能性低。**KEV 占 30%** 是真实证据:确认已被利用,而非预测。**CVSS 占 20%** 用于捕捉新漏洞的严重性背景(此时 EPSS 数据可能不足)。**漏洞利用代码占 15%**,反映公开 PoC 会显著加速实际攻击。 --- ## 🌐 数据源 | # | 来源 | 提供数据 | 认证 | 免费限制 | |---|------|----------|------|----------| | 1 | **NVD** | CVE 详情、CVSS、CWE、受影响的组件、引用、时间线 | `apiKey` 头部(可选) | 每 30 秒 5 次请求(使用密钥 50 次) | | 2 | **EPSS** | 利用概率及百分位 | 无 | 每分钟 1,000 次 | | 3 | **CISA KEV** | 已知被利用漏洞目录 | 无 | 静态文件 | | 4 | **OSV.dev** | 开源软件包漏洞 | 无 | 无公开限制 | | 5 | **GitHub 安全公告** | GHSA 公告、补丁、受影响的版本 | `Bearer` 令牌 | 每小时 60 次(个人访问令牌 5,000 次) | | 6 | **MITRE ATT&CK** | TTPs、技术、缓解措施 | 无 | 无限制 | | 7 | **AbuseIPDB** | IP 滥用置信度、报告、ISP、地理位置 | `Key` 头部 | 每天 1,000 次检查 | | 8 | **GreyNoise** | IP 噪声/扫描活动、分类 | `key` 头部 | 每周 50 次查询(社区版) | | 9 | **Shodan** | 开放端口、服务、横幅、漏洞 | `key` 查询参数 | 基础查询免费 | | 10 | **VirusTotal** | 多引擎扫描结果、信誉 | `x-apikey` 头部 | 每天 500 次,每分钟 4 次 | | 11 | **MalwareBazaar** | 恶意软件样本、哈希、签名 | `Auth-Key` 头部 | 合理使用 | | 12 | **ThreatFox** | 与恶意软件家族相关的 IOC | `Auth-Key` 头部 | 合理使用 | | 13 | **Ransomwhere** | 勒索软件比特币地址及交易数据 | 无 | 无限制 | | 14 | **URLScan.io** | URL 扫描、截图、DOM | `API-Key` 头部 | 每天 5,000 次公开扫描 | | 15 | **CIRCL PDNS** | 历史被动 DNS 记录 | HTTP 基本认证 | 合作伙伴访问 | | 16 | **GitHub 代码搜索** | 漏洞利用 PoC 仓库搜索 | `Bearer` 令牌 | 与 GHSA 限制共享 | | 17 | **Exploit-DB** | 公开漏洞利用数据库 CSV | 无 | 无限制 | | 18 | **Nuclei 模板** | 社区检测模板 | 无 | 无限制 | | 19 | **MSRC** | 微软安全公告 | 无 | 无限制 | | 20 | **Red Hat 安全** | Red Hat CVE 公告 | 无 | 无限制 | | 21 | **Ubuntu 安全** | Ubuntu CVE 跟踪 | 无 | 无限制 | --- ## 🧪 运行测试 ``` # 运行完整测试套件 pytest tests/ -v # 运行特定测试文件 pytest tests/test_validators.py tests/test_risk_scorer.py -v # 运行覆盖率测试 pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missing ``` ### 使用 MCP Inspector ``` npx @modelcontextprotocol/inspector python -m cve_mcp.server ``` 在 `http://localhost:6274` 打开 —— 交互式测试每个工具,查看输入模式和响应格式。 ### 测试覆盖范围 - **单元测试**:风险评分计算、CVSS 向量解析、输入验证 - **集成测试**:工具注册、参数验证、缺失密钥的错误处理 - **缓存测试**:SQLite 缓存写入、TTL 过期、缓存命中/未命中 - **安全测试**:私有 IP 阻断、XML 炸弹防护(defusedxml)、输入净化 --- ## 🏛️ 深度架构解析 ### 文件结构 ``` src/cve_mcp/ ├── server.py # FastMCP server — all 27 @mcp.tool() definitions ├── config.py # Environment config and API base URLs ├── models.py # Pydantic models (CVERecord, KEVEntry, EPSSScore, ...) ├── audit.py # Rotating audit log (50MB, 5 backups) ├── api/ │ ├── nvd_client.py # NVD REST API v2.0 │ ├── osv_client.py # OSV.dev package vulnerability API │ ├── epss_client.py # FIRST EPSS API │ ├── kev_client.py # CISA KEV catalog │ ├── ip_intel.py # AbuseIPDB + GreyNoise │ ├── domain_intel.py # crt.sh + CIRCL passive DNS │ ├── shodan_client.py # Shodan host intelligence │ ├── hash_intel.py # MalwareBazaar + VirusTotal │ ├── url_safety.py # URLScan.io │ ├── malware_intel.py # ThreatFox IOC lookup │ ├── ransomware_intel.py# Ransomwhere Bitcoin address lookup │ ├── exploit_intel.py # GitHub PoC/exploit search │ ├── vendor_advisory.py # MSRC + Red Hat + Ubuntu advisories │ ├── attack_mapping.py # MITRE ATT&CK STIX mapping │ ├── cve_timeline.py # CVE event timeline builder │ ├── dependency_scan.py # OSV-based dependency scanning │ ├── poc_checker.py # GitHub + Exploit-DB + Nuclei PoC search │ ├── report_generator.py# Vuln report + CVE comparison matrix │ └── rate_limiter.py # Token bucket rate limiter for NVD ├── cache/ │ └── sqlite_cache.py # Async SQLite cache with per-key TTL └── utils/ ├── validators.py # CVE ID normalization, IP/hash validation └── risk_scorer.py # Composite risk score computation ``` ### 缓存策略 | 资源 | TTL | |------|-----| | CVE 记录(NVD) | 1 小时 | | EPSS 评分 | 6 小时 | | KEV 目录 | 1 小时 | | IP / 域名情报 | 1 小时 | | Exploit-DB CSV | 24 小时 | | ATT&CK STIX 数据 | 24 小时 | | 勒索软件情报 | 24 小时 | ### 审计日志 每次工具调用都会记录到 `~/.cve-mcp/audit.log`: ``` { "timestamp": "2026-04-14T10:23:45.123Z", "tool": "lookup_cve", "parameters": {"cve_id": "CVE-2024-3400"}, "duration_ms": 342, "cache_hit": false, "status": "ok" } ``` API 密钥和响应负载**绝不会**写入审计日志。 --- ## 🔐 安全与隐私 ### 离开你机器的数据 - **仅出站 HTTPS** —— 不打开任何入站端口,无遥测 - CVE ID、IP、哈希、域名和软件包名称会发送到相应 API 进行查询 - API 响应缓存在本地 SQLite 中 —— 缓存数据保留在你的机器上 ### 私有 IP 屏蔽 所有网络情报工具在调用外部 API 前会屏蔽私有和保留的 IP 范围: - `10.0.0.0/8`、`172.16.0.0/12`、`192.168.0.0/16`(RFC 1918) - `127.0.0.0/8`(回环)、`169.254.0.0/16`(链路本地) - `::1`、`fc00::/7`(IPv6 私有) ### API 密钥保护 - 密钥仅从变量加载 —— 永不硬编码 - `.env` 文件已加入 `.gitignore` - 密钥永不记录、缓存或包含在审计条目中 ### XML 安全 所有 XML 解析均使用 `defusedxml`,以防止 XML 炸弹攻击(十亿大笑、XXE 注入)。 --- ## 🔧 故障排除 ### 服务器无法启动 ``` # 确保虚拟环境已激活且包已安装 pip install -e . python --version # must be 3.10+ ``` **Claude Desktop 未显示锤子图标(🔨)** - 检查配置文件中的 JSON 语法错误(不要有尾随逗号) - 使用**绝对路径**——相对路径会静默失败 - 完全退出 Claude Desktop(Cmd+Q / Alt+F4)并重新启动 ### NVD 限流 ``` # 添加您的免费 NVD API 密钥到 .env NVD_API_KEY=your-key-here # https://nvd.nist.gov/developers/request-an-api-key ``` 服务器会自动排队超额请求;使用密钥可获得 10 倍吞吐量。 ### GreyNoise 401 未授权 ``` # 验证密钥是否生效: curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8 # 服务器使用 /v3/ip/{ip} — NOT 已废弃的 /v3/community 端点 ``` ### Windows 编码问题 ``` $env:PYTHONUTF8 = "1" $env:PYTHONIOENCODING = "utf-8" ``` --- ## 🗺️ 路线图与已知限制 ### 服务器不执行的操作 - **无主动扫描** —— 仅情报查询,不探测你的基础设施 - **无写入操作** —— 仅从外部 API 读取(URLScan 提交除外) - **无 CVSS v4.0 本地计算** —— 内置计算器仅支持 v3.1;NVD 提供的 v4.0 分数会显示但不会重新计算 ### 已知 API 限制 - NVD 单次查询最多返回 **2,000 条结果** - EPSS 评分对于 **24 小时内的新 CVE** 可能尚不存在 - CISA KEV 仅在工作日更新 - GreyNoise 社区版:**每周 50 次查询** - VirusTotal 免费版:**每分钟 4 次请求** - CIRCL PDNS 需手动注册并获得批准 - Ransomwhere 对新地址有 **90 天禁运** ### 计划改进 - CVSS v4.0 本地计算器 - Webhook/告警功能(KEV 新增与 EPSS 评分变化监控) - STIX 2.1 导出以集成 SIEM - 零安装 Docker 容器 - 流式 HTTP 传输(MCP SSE) - 额外数据源:Censys、SecurityTrails、VulnCheck --- ## 🤝 贡献 欢迎贡献。 ### 添加新工具 1. 在 `server.py` 中使用 `@mcp.tool()` 装饰器添加工具函数 2. 在 `utils/validators.py` 中添加输入验证 3. 在 `api/` 中实现 API 客户端 4. 在 `tests/` 中添加测试 5. 更新本 README ``` @mcp.tool() async def my_new_tool(param: str, ctx: Context = None) -> str: """ One-line description for Claude to know when to use this tool. Args: param: Description of the parameter """ app = _get_app(ctx) # validate → cache check → API call → cache write → audit → return ``` ### 测试要求 - 所有新工具必须至少有一个**离线测试**,使用模拟响应 - 风险评分变更必须包含**公式验证测试用例** - 网络工具必须包含**私有 IP 阻断测试** - 所有测试必须通过:`pytest tests/ -v` --- ## 📄 许可证 MIT 许可证 —— 详见 [LICENSE](LICENSE)。 ``` Copyright (c) 2025-2026 Mahipal Jangra (mukul975) ```

使用 🔐 构建 · 由 Mahipal Jangra(柏林,德国)开发
将安全情报转化为对话。

标签:aiosqlite, Ask搜索, CISA KEV, Claude集成, Cloudflare, CVE查询, defusedxml, EPSS评分, FastMCP, GreyNoise, httpx, MCP服务器, MITRE ATT&CK, Pydantic, Python, SEO, VirusTotal, 优先级推荐, 威胁情报, 安全分析师, 安全情报, 开发者工具, 无后门, 模型上下文协议, 漏洞分析, 生产级, 网络安全, 自动化关联, 路径探测, 运行时操纵, 逆向工具, 隐私保护, 风险评分