CVE查询服务器

用于与NIST国家漏洞数据库(NVD) API交互,搜索和检索CVE(常见漏洞和暴露)信息的模型上下文协议(MCP)服务器。

  • by olegbet
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 olegbet/cve-mcp-server

使用说明

NIST CVE MCP服务器

模型上下文协议(MCP)服务器,用于与NIST国家漏洞数据库(NVD)API交互,以搜索和检索CVE(常见漏洞和暴露)信息。

特性

  • 按关键字、CVE ID、日期范围和严重性搜索CVE
  • 具有精确匹配和模糊搜索功能的增强搜索
  • 获取特定CVE的详细信息
  • 搜索最近的CVE(过去N天)
  • 按供应商/产品搜索CVE
  • 获取有关最近CVE活动的统计信息
  • 新:检查特定库和工具中的漏洞
  • 新:分析多个项目的安全风险依赖关系
  • 新:全面的漏洞报告和严重性分析

安装

先决条件

  • Python 3.8或更高版本(适用于本地安装)
  • Docker和Docker Compose(用于容器化部署)- 推荐)
  • 用于访问NIST NVD API的互联网连接

选项1:Docker安装(推荐)

脚本快速入门

  1. 构建Docker镜像:

    ./build.sh
    
  2. 部署容器:

    ./deploy.sh start
    
  3. 检查状态:

    ./deploy.sh status
    
  4. 查看日志:

    ./deploy.sh logs -f
    

使用管理脚本

  1. 启动服务:

    ./deploy.sh start
    
  2. 检查状态:

    ./deploy.sh status
    
  3. 查看日志:

    ./deploy.sh logs -f
    
  4. 停止服务:

    ./deploy.sh stop
    

手动Docker命令

塑造形象:

docker build -f Containerfile -t cve-mcp-server:latest .

运行容器:

docker run -d \
  --name cve-mcp-server \
  --restart unless-stopped \
  -v $(pwd)/logs:/app/logs \
  --security-opt no-new-privileges:true \
  --read-only \
  --memory=512m \
  --cpus=1.0 \
  cve-mcp-server:latest

选项2:本地安装

  1. 安装所需的依赖项:
pip install -r requirements.txt
  1. 测试服务器(可选但推荐):
python -c "import mcp_server; print('Server imports successfully')"

用法

选项1:直接使用(用于测试)

直接运行MCP服务器:

python mcp_server.py

选项2:与MCP客户端集成(推荐)

对于Claude Desktop:

  1. 打开您的Claude Desktop配置文件:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  2. 添加服务器配置:

{
  "mcpServers": {
    "nist-cve": {
      "command": "python",
      "args": ["/full/path/to/your/cve-mcp-server/mcp_server.py"],
      "env": {
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}
  1. 替换 /full/path/to/your/cve-mcp-server/mcp_server.py 使用服务器文件的实际路径。

  2. 重新启动克劳德桌面。

对于其他MCP客户端:

使用适合您客户的配置格式,参考 config_example.json 文件。

可用工具

1. search_cves

使用各种过滤器搜索CVE。

参数:

  • keyword:CVE描述的搜索词(模糊搜索)
  • keyword_exact_match:CVE描述的精确匹配搜索词
  • cve_id:特定CVE ID(例如“CVE-2023-1234”)
  • pub_start_date:发布的开始日期(ISO 8601格式:YYYY-MM-DTHH:MM:SS.000Z)
  • pub_end_date:已发布的结束日期(ISO 8601格式:YYYY-MM-DTHH:MM:SS.000Z)
  • mod_start_date:修改的开始日期(ISO 8601格式:YYYY-MM-DDTHH:MM:SS.000Z)
  • mod_end_date:修改的结束日期(ISO 8601格式:YYYY-MM-DDTHH:MM:SS.000Z)
  • cvss_v3_severity:CVSS v3严重程度(低、中、高、严重)
  • is_vulnerable:仅筛选易受攻击的配置(需要cpeName-尚未实现)
  • results_per_page:每页结果数(最多2000个)
  • start_index:分页的起始索引

2. get_cve_details

获取特定CVE的详细信息。

参数:

  • cve_id:CVE标识符(例如“CVE-2023-1234”)

3. search_recent_cves

搜索过去N天内发布的CVE。

参数:

  • days:回顾的天数(默认值:7)
  • severity:按CVSS v3严重程度(低、中、高、临界)过滤

4. search_cves_by_vendor

按供应商/产品名称搜索CVE。

参数:

  • vendor:供应商名称(例如“microsoft”、“apache”)
  • product:可选产品名称(例如“windows”、“httpd”)

5. get_cve_statistics

获取最近CVE活动的基本统计数据(过去30天)。

6. check_library_vulnerabilities

检查特定库或工具中的漏洞。

参数:

  • library_name:库/工具的名称(例如,“express”、“lodash”、“spring boot”)
  • version:要检查的特定版本(例如“4.18.0”)[可选]
  • exact_match:使用精确匹配搜索而不是模糊搜索(默认值:false)
  • severity_filter:按严重程度过滤(低、中、高、临界)[可选]
  • only_vulnerable:仅返回具有易受攻击配置的CVE(默认值:true)

退货:

  • CVE结果和漏洞摘要,包括严重性计数和最关键的CVE

7. check_project_dependencies

检查多个项目依赖项是否存在漏洞。

参数:

  • dependencies:逗号分隔的依赖关系列表(例如,“express、lodash、react”)
  • package_manager:上下文的包管理器类型(npm、pip、maven等)(默认:“npm”)
  • severity_threshold:要报告的最低严重程度(低、中、高、严重)(默认值:“中”)

退货:

  • 综合项目漏洞报告,包括汇总统计数据和每个依赖项的结果

使用示例

搜索包含“缓冲区溢出”的CVE

await search_cves(keyword="buffer overflow", results_per_page=10)

获取特定CVE的详细信息

await get_cve_details(cve_id="CVE-2023-1234")

搜索过去7天的关键CVE

await search_recent_cves(days=7, severity="CRITICAL")

搜索Microsoft Windows CVE

await search_cves_by_vendor(vendor="microsoft", product="windows")

获取CVE统计信息

await get_cve_statistics()

检查特定库中的漏洞

# Check Express.js vulnerabilities
await check_library_vulnerabilities(library_name="express", version="4.18.0")

# Check with exact match for more precise results
await check_library_vulnerabilities(library_name="lodash", exact_match=True, severity_filter="HIGH")

检查多个项目依赖关系

# Check Node.js project dependencies
await check_project_dependencies(
    dependencies="express,lodash,react,axios",
    package_manager="npm",
    severity_threshold="MEDIUM"
)

# Check Python project dependencies
await check_project_dependencies(
    dependencies="django,requests,flask",
    package_manager="pip",
    severity_threshold="HIGH"
)

使用精确匹配搜索以获得精确结果

# Search for exact matches only
await search_cves(keyword_exact_match="Spring Boot", is_vulnerable=True)

# Combine with severity filtering
await search_cves(
    keyword_exact_match="Apache Log4j",
    cvss_v3_severity="CRITICAL",
    is_vulnerable=True
)

Docker部署

为了简单和减少依赖性,该项目使用纯Docker而不使用Docker compose。

集装箱特征

  • 安全强化:使用只读文件系统以非root用户身份运行
  • 资源有限:生产使用的内存和CPU限制
  • 健康检查:内置健康监测
  • 日志记录:旋转式结构化测井
  • 多阶段构建:优化了图像大小和安全性
  • 无需作曲:仅限简单的Docker命令
  • 符合 OCI 标准使用 Containerfile 而不是 Dockerfile

管理脚本

构建脚本(./build.sh)

# Build with default tag
./build.sh

# Build with custom tag
./build.sh v1.0

# Features:
# - Multi-stage build for smaller images
# - Security scanning with Trivy (if available)
# - Image testing and validation
# - Proper labeling and metadata

部署脚本(./deploy.sh)

# Start container
./deploy.sh start

# Stop container
./deploy.sh stop

# Restart container
./deploy.sh restart

# Show status
./deploy.sh status

# View logs
./deploy.sh logs -f

# Open shell in container
./deploy.sh shell

# Create Docker network
./deploy.sh network

# Clean up everything
./deploy.sh clean

容器配置

Docker设置包括:

  • 基本图像:Python 3.11-slim用于最小化攻击面
  • 用户:非根 mcp 安全用户
  • 文件系统:具有特定可写挂载的只读根文件系统
  • 资源:512MB内存限制,1个CPU限制
  • 安全:无新权限,功能正常下降
  • 网络:隔离网桥网络
  • 持久性:日志卷装载用于数据持久化

与MCP客户端(Docker)一起使用

当在Claude Desktop等MCP客户端上使用容器化版本时,您有两个选择:

  1. 通过stdio曝光 (修改容器以使用stdio传输)
  2. 使用TCP传输 (未来增强)

目前,推荐的方法是使用本地安装进行MCP客户端集成。

API费率限制

NIST NVD API有速率限制:

  • 没有API密钥:每30秒5个请求
  • 使用API密钥:每30秒50个请求

若要使用API密钥,您需要修改 make_request 函数,以便在标头中包含API键。

数据源

此MCP服务器使用NIST国家漏洞数据库(NVD)API v2.0:

  • 基本URL:https://services.nvd.nist.gov/rest/json
  • 文档:https://nvd.nist.gov/developers/vulnerabilities

许可证

这个项目是开源的,可以在MIT许可证下使用。