CVE MCP Server

MCP MCP Servers Open Source v0.2.0 · 22.06.2026 активный

MCP-сервер с 27 инструментами threat intelligence через 21 API: CVE-поиск (NVD), EPSS-скоринг, CISA KEV, MITRE ATT&CK, Shodan, VirusTotal, ExploitDB, Censys, AlienVault OTX. Всё это из Claude в одном запросе.

v0.2.0
22.06.2026 current
Добавлен 06.07.2026 · Обновлён 06.07.2026 · MCP Servers
Установка
Требуются API-ключи: NVD_API_KEY, SHODAN_API_KEY, VT_API_KEY.
Получить: nvd.nist.gov/developers/request-an-api-key, shodan.io, virustotal.com

# Claude Desktop — claude_desktop_config.json:
{ "mcpServers": { "cve-mcp": { "command": "uvx", "args": ["cve-mcp-server"], "env": { "NVD_API_KEY": "key", "SHODAN_API_KEY": "key", "VT_API_KEY": "key" } } } }

# Claude Code (CLI):
claude mcp add cve-mcp --env NVD_API_KEY=key --env SHODAN_API_KEY=key --env VT_API_KEY=key -- uvx cve-mcp-server

# OpenCode — ~/.config/opencode/opencode.json:
{ "mcp": { "cve-mcp": { "type": "local", "command": ["uvx", "cve-mcp-server"], "environment": { "NVD_API_KEY": "key", "SHODAN_API_KEY": "key", "VT_API_KEY": "key" } } } }
переведено ИИ

🛡️ CVE MCP Server

CVE MCP Server

Интеллект безопасности на основе ИИ у вас под рукой — 28 инструментов + однострочный оркестратор triage_cve, 24 источника данных, один протокол. GARS-2026 Survey Python 3.10+ License: MIT MCP Compatible Security Tool FastMCP

Производственный сервер Model Context Protocol (MCP), который превращает Claude в всезнающего аналитика по безопасности. Вместо того чтобы переключаться между 15+ вкладками браузера с NVD, EPSS, CISA KEV, Shodan, VirusTotal и GreyNoise, задайте Claude один вопрос и получите коррелированную информацию за секунды. Создан на Python, FastMCP, httpx, aiosqlite, Pydantic v2 и defusedxml.

Проблема: Триаж одной CVE означает запрос CVSS-оценок в NVD, вероятности эксплуатации в EPSS, статуса активной эксплуатации в CISA KEV, патчей на GitHub и связей с вредоносным ПО в VirusTotal — а затем мысленная корреляция всей информации. Для 50 CVE это целый потерянный день.

Решение: CVE MCP Server дает Claude прямой доступ к 28 инструментам безопасности через 24 API — с оркестратором triage_cve для одного вызова. Спросите «Нужно ли нам исправлять CVE-2024-3400?», и Claude параллельно обратится ко всем релевантным источникам, рассчитает комплексную оценку риска (с жестким приоритетом CISA KEV) и выдаст приоритизированную рекомендацию с доказательствами.


🌍 GARS-2026 — Глобальное исследование готовности к агентному ИИ

Я провожу глобальное академическое исследование, измеряющее реальную готовность специалистов по безопасности, разработчиков и корпоративных команд к агентному ИИ — MCP-серверам, вызовам инструментов, управлению и рабочим процессам с участием человека.

Если вы используете этот репозиторий, ваш ответ станет действительно ценным точка данных.

📋 Пройдите опрос (10 минут): Опрос

  • 60 вопросов · Анонимный · Кураторство SRH Berlin
  • Вы получите 50 Casky Tokens для раннего доступа к casky.ai
  • Результаты будут опубликованы в открытом доступе по лицензии CC-BY 4.0

📑 Содержание


🏗️ Архитектура

┌─────────────────────────────────────────────────────────────────────┐
│                        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 (только исходящий трафик)
          ┌───────────────┼───────────────────────────┐
          ▼               ▼                           ▼
┌──────────────┐ ┌──────────────┐            ┌──────────────┐
│ 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-адреса заблокированы во всех инструментах поиска.


🔍 Каталог инструментов (28 инструментов)

⭐ Оркестрация (v0.2.0) — начните здесь

Инструмент Описание Требуется ключ API Пример использования
triage_cve Однострочный триаж, который параллельно запрашивает NVD + EPSS + CISA KEV (+ публичные PoC, если depth != "quick"), вычисляет комплексную оценку риска с жестким приоритетом KEV, при throttling NIST NVD использует VulnCheck NVD++ как запасной вариант, а при depth="deep" выдает решение SSVC v2 с учетом условий Бесплатно / Без ключа (рекомендуется ключ) triage_cve("CVE-2021-44228", depth="deep")

Также доступен через примитивы MCP — Ресурсы: kev://catalog, epss://scores/{cve_id}, manifest://tool-hash (SHA-256 от поверхности зарегистрированных инструментов для обнаружения подделки). Промпты: patch_decision, compare_and_prioritize, dependency_triage.

Основной интеллект по уязвимостям (8 инструментов)

Инструмент Описание Требуется ключ API Пример использования
lookup_cve Получение детальной записи CVE из NVD, включая оценки CVSS, CWE, затронутые продукты, ссылки и временную шкалу Бесплатно / Без ключа (рекомендуется ключ) lookup_cve("CVE-2024-3400")
search_cves Поиск CVE в NVD по ключевым словам, названию продукта, уровню серьезности или диапазону дат Бесплатно / Без ключа (рекомендуется ключ) search_cves(keyword="Apache Log4j", severity="CRITICAL")
get_epss_score Получение вероятности эксплуатации EPSS (0–1) и процентиля для одной или нескольких CVE Бесплатно / Без ключа get_epss_score("CVE-2024-3400")
check_kev_status Проверка, входит ли CVE в каталог CISA Known Exploited Vulnerabilities Бесплатно / Без ключа 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 Поиск информации о Common Weakness Enumeration по ID CWE из встроенной базы данных Бесплатно / Без ключа get_cwe_info("CWE-79")
get_cve_references Извлечение и категоризация всех ссылок для CVE (патчи, advisory, эксплойты) Бесплатно / Без ключа (рекомендуется ключ) get_cve_references("CVE-2023-44487")
bulk_cve_lookup Пакетное получение деталей до 20 CVE за один вызов с параллельным обогащением данных Бесплатно / Без ключа (рекомендуется ключ) bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])
### Инструменты эксплойтов и атак (4 инструмента)
Инструмент Описание Требуется ключ API Пример использования
search_exploits Поиск публичных proof-of-concept эксплойтов и репозиториев с кодом эксплойтов на 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 Определение наличия известного кода proof-of-concept для CVE из различных источников GITHUB_TOKEN (необязательно) check_poc_availability("CVE-2024-3400")
get_attack_patterns Получение деталей паттернов атак CAPEC, связанных с CWE или CVE Бесплатно / Без ключа get_attack_patterns("CWE-89")

Этап 3: Расширенный анализ рисков и отчетность (4 инструмента)

Инструмент Описание Требуется ключ API Пример использования
calculate_risk_score Вычисление составного балла риска от 0 до 100 на основе CVSS, EPSS, статуса KEV и наличия PoC Бесплатно / Без ключа (рекомендуется ключ) 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 Получение актуальных CVE на основе высоких баллов EPSS и недавних добавлений в KEV Бесплатно / Без ключа get_trending_cves(days=7, min_epss=0.5)

Сетевая разведка (4 инструмента)

Инструмент Описание Требуется ключ API Пример использования
lookup_ip_reputation Проверка истории злоупотреблений IP-адресом и балла доверия через AbuseIPDB ABUSEIPDB_API_KEY lookup_ip_reputation("185.220.101.34")
check_ip_noise Запрос к GreyNoise для получения данных о сканировании/атаках, классификации и связанных CVE GREYNOISE_API_KEY check_ip_noise("185.220.101.34")
shodan_host_lookup Получение открытых портов, сервисов, баннеров и уязвимостей для IP через Shodan SHODAN_API_KEY shodan_host_lookup("8.8.8.8")
passive_dns_lookup Получение исторических данных DNS-разрешений для домена из пассивного DNS CIRCL 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 для индикаторов компрометации, связанных с семействами вредоносного ПО 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 для клонирования репозитория
  • Терминал с доступом к переменным окружения

Пошаговая настройка

# 1. Клонируйте репозиторий
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server

# 2. Создайте и активируйте виртуальное окружение
python -m venv venv

# macOS / Linux:
source venv/bin/activate

# Windows (PowerShell):
.\venv\Scripts\Activate.ps1

# Windows (CMD):
venv\Scripts\activate.bat

# 3. Установите зависимости
pip install -e .

# 4. Скопируйте и настройте переменные окружения
cp .env.example .env
# Отредактируйте .env с вашими ключами API (см. раздел "Настройка ключей API" ниже)

# 5. Проверьте запуск сервера
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  # или .venv\Scripts\activate в Windows
uv pip install -e .
cp .env.example .env

С тестовыми зависимостями

pip install -e ".[test]"

🔑 Настройка ключей API

Ключи API организованы по приоритету — сначала получите ключи Уровня 1 для максимального покрытия бесплатными инструментами, затем постепенно добавляйте ключи Уровня 2 и Уровня 3 по мере необходимости.

Уровень 1: Высокий приоритет (бесплатно, мгновенный доступ, максимальное покрытие)

Переменная окружения Что открывает Как получить Лимиты бесплатного тарифа Обязательно?
NVD_API_KEY Поиск в NVD в 10 раз быстрее (50 запросов/30 сек вместо 5) Запросите на nvd.nist.gov 50 запросов за 30 секунд Необязательно, но настоятельно рекомендуется
GITHUB_TOKEN Поиск в GitHub Advisory + поиск эксплойтов PoC Создайте PAT на github.com/settings/tokens 5 000 запросов в час Необязательно (без него 60 в час)

Уровень 2: Рекомендуемые (бесплатные аккаунты, значительная ценность)

Переменная окружения Что открывает Как получить Лимиты бесплатного тарифа Обязательно?
ABUSEIPDB_KEY Проверка репутации IP Зарегистрируйтесь на abuseipdb.com 1 000 проверок в день Обязательно для инструментов с IP
VIRUSTOTAL_KEY Сканирование файлов/URL/доменов/IP на вредоносное ПО Зарегистрируйтесь на virustotal.com 5 000 проверок в день, 4 в минуту Обязательно для инструментов VT
GREYNOISE_API_KEY Разведка данных о шуме/сканировании IP Зарегистрируйтесь на viz.greynoise.io 50 запросов в неделю (сообщество) Обязательно для инструментов GreyNoise
SHODAN_KEY Разведка хостов/портов/сервисов Зарегистрируйтесь на account.shodan.io Базовые проверки хостов (бесплатный тариф) Обязательно для инструментов Shodan

Уровень 3: Необязательные (расширенная разведка)

Переменная окружения Что открывает Как получить Лимиты бесплатного тарифа Обязательно?
URLSCAN_KEY Сканирование URL и анализ сайтов Зарегистрируйтесь на urlscan.io 5 000 публичных сканирований в день Необязательно
CIRCL_PDNS_USER Проверки пассивного DNS CIRCL Запросите доступ на circl.lu Только для партнёров Необязательно
CIRCL_PDNS_PASS Аутентификация пассивного DNS CIRCL Предоставляется при регистрации в CIRCL Только для партнёров Необязательно

⚡ Начало без ключей: Восемь инструментов работают без каких-либо ключей API — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, поиск CWE, парсинг CVSS, Ransomwhere и NVD (со сниженным рейтингом запросов). Вы можете начать использовать сервер сразу и добавлять ключи постепенно.


⚙️ Конфигурация

Переменные окружения (.env.example)

# Ключ API NVD — бесплатно на https://nvd.nist.gov/developers/request-an-api-key
# Без ключа: 5 запросов/30 сек  |  С ключом: 50 запросов/30 сек
NVD_API_KEY=


# Токен GitHub — увеличивает лимит запросов с 60/час до 5000/час (scope не требуются)
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} (НЕ устаревший /v3/community)
GREYNOISE_API_KEY=   # https://viz.greynoise.io/signup

# Пассивный DNS CIRCL — требует партнёрской регистрации
CIRCL_PDNS_USER=
CIRCL_PDNS_PASS=

# Необязательные переопределения
CACHE_DB_PATH=       # по умолчанию ~/.cve-mcp/cache.db
AUDIT_LOG_PATH=      # по умолчанию ~/.cve-mcp/audit.log
REQUEST_TIMEOUT=30   # Тайм-аут HTTP-запроса в секундах
MAX_RETRIES=3        # Повторы при временных ошибках

Конфигурация 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 Desktop (Cmd+Q / Alt+F4) — простой перезагрузки недостаточно.

Конфигурация Claude Code

# Базовая настройка
claude mcp add cve-mcp -- python -m cve_mcp.server

# С переменными окружения (повторите -e для каждого ключа)
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
# Или просто запустите из каталога проекта — python-dotenv автоматически загружает .env при старте

# Проверьте подключение
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 и попробуйте:

«Что такое CVE-2021-44228? Активно ли он используется?»

Claude использует lookup_cve (NVD), get_epss_score (EPSS) и check_kev (CISA KEV) — все бесплатно, ключи не требуются.

«Проверь эти Python-пакеты на наличие уязвимостей: requests 2.28.0, flask 2.2.0, django 3.2.0»

Шаг 3: Добавьте первый ключ для 10× производительности

echo 'NVD_API_KEY=your-key-here' > .env

Запросите бесплатный ключ NVD на nvd.nist.gov — мгновенно по электронной почте, увеличивает лимит запросов с 5 до 50 за 30 секунд.

Шаг 4: Полная мощность

Как только вы добавите ключи Уровня 1 и Уровня 2:

«Рассчитай оценку риска для CVE-2024-3400 и скажи, нужно ли нам исправлять его немедленно.»


💬 Примеры использования

Сценарий 1: «Нужно ли нам немедленно исправлять Log4Shell?»

Вы: Проанализируй, требует ли CVE-2021-44228 (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")
  ✅ В CISA KEV — Добавлено 2021-12-10 | Известное использование вransomware: Да

→ check_poc_exists("CVE-2021-44228")
  ✅ ОРУЖИЕНО — Найдено 300+ публичных репозиториев PoC

→ calculate_risk_score("CVE-2021-44228")
  Оценка риска: 97/100 (CRITICAL) | Срочность: ИСПРАВИТЬ НЕМЕДЛЕННО

Ответ Claude: «CVE-2021-44228 получает оценку 97/100 (CRITICAL). Удаленное выполнение кода в Apache Log4j, CVSS 10.0, 97.5% вероятность по EPSS, подтвержденная активная эксплуатация в CISA KEV, включая кампанииransomware, 300+ публичных эксплойтов. Исправляйте немедленно.»

Сценарий 2: «Проверь мой requirements.txt»

Вы: Проверь эти зависимости: requests==2.28.0, flask==2.2.0, django==3.2.0, pillow==9.0.0, cryptography==37.0.0

→ scan_dependencies(ecosystem="PyPI", packages={...})
  Найдено 12 уязвимостей в 4 пакетах

Ответ 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: «Расследуй подозрительный IP»

Вы: Расследуй подозрительный IP 185.220.101.34 — вредоносный ли он?

→ check_ip_reputation("185.220.101.34")
  AbuseIPDB Доверие: 100% | Отчеты: 4,832 | Провайдер: Tor Exit Node

→ check_ip_noise("185.220.101.34")
  GreyNoise: MALICIOUS | Теги: [Tor Exit Node, Web Scanner]
  Целевые CVE: CVE-2024-3400, CVE-2023-46805

→ shodan_host_lookup("185.220.101.34")
  Открытые порты: 22, 80, 443, 9001 | ОС: Linux

Ответ Claude: «185.220.101.34 — известный Tor exit node, оцененный AbuseIPDB как 100% вредоносный с 4,832 отчетами о злоупотреблениях. GreyNoise подтверждает активное сканирование для CVE-2024-3400 (Palo Alto) и CVE-2023-46805 (Ivanti). Рекомендация: Заблокировать на файрволе.»

Сценарий 4: «Сгенерируй отчет по безопасности для руководства»

Вы: Сгенерируй отчет по безопасности для руководства по: CVE-2024-3400, CVE-2023-44487, CVE-2023-4966, CVE-2024-21887

→ compare_cves([...])
  Собирает: NVD, EPSS, KEV, наличие PoC, сопоставление с MITRE ATT&CK
  Генерирует: Ранжированную таблицу рисков, график исправлений, резюме для руководства

📊 Оценка риска

Инструмент calculate_risk_score выдает сводную оценку риска от 0 до 100, взвешивая четыре независимых сигнала.

Формула

Оценка риска = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
Компонент Вес Что он отражает
Базовый балл CVSS v3.1 20% Теоретическая максимальная критичность
Вероятность по EPSS 35% Статистическая вероятность эксплуатации в ближайшие 30 дней
Статус в CISA KEV 30% Подтвержденная активная эксплуатация в реальном мире
Наличие PoC 15% Публичный код эксплойта снижает порог для атакующих

Множители усиления

  • KEV + активный PoC → ×1.15
  • CVSS ≥ 9.0 + EPSS > 0.7 → ×1.10
  • Опубликовано менее 7 дней назад → ×1.05

Оценка ограничена значением 100.

Оценка рисков — v1 (2026-06)

Числовая система оценки имеет scoring_version 1.0 (отображается в triage_cve, calculate_risk_score и health_check). Линейная взвешенная сумма выше является вариантом по умолчанию для v1 для числовой оценки, с одним жестким правилом:

  • Жесткое правило CISA KEV: CVE из KEV считается подтвержденным для эксплуатации в реальном мире — это самый сильный сигнал эксплуатации. Его метка никогда не может быть ниже CRITICAL, а его оценка жестко фиксируется на уровне ≥ 76, независимо от CVSS/EPSS. (CVE из KEV с низким CVSS и низким EPSS по-прежнему вернет CRITICAL / 76.)
  • CVSS рассматривается как сигнал критичности, а не вероятности эксплуатации (согласно Allodi & Massacci 2014); EPSS и KEV несут сигнал эксплуатации.
  • Экспериментальное квантованное решение SSVC v2 (модель CISA Deployer → Act / Attend / Track* / Track) доступно через triage_cve(depth="deep") как качественная, объяснимая альтернатива числовой оценке 0–100.
Оценка Метка Рекомендуемое действие
0 – 25 LOW Запланировать на следующее окно обслуживания
26 – 50 MEDIUM Исправить в течение 30 дней в соответствии со SLA
51 – 75 HIGH Исправить в течение 7 дней; эскалировать руководителю команды
76 – 100 CRITICAL Исправить в течение 24–48 часов. Аварийное окно изменений.

Почему именно такие веса?

EPSS получает самый высокий вес (35%), потому что это лучший предиктор реальной эксплуатации — намного лучше, чем один только CVSS. CVSS 10.0 с EPSS 0.01 теоретически опасен, но практически маловероятен. KEV на 30% — это подтвержденные факты: эксплуатация, а не прогноз. CVSS на 20% отражает контекст критичности для новых CVE, у которых недостаточно данных EPSS. PoC на 15% отражает тот факт, что публичные эксплойты значительно ускоряют реальные атаки.


🚀 Что нового в v0.2.0

  • Оркестратор triage_cve — один вызов инструмента, который параллельно опрашивает NVD + EPSS + CISA KEV (+ публичный поиск PoC при depth != "quick"), вычисляет сводную оценку риска и возвращает чистый отчет. Параметр depth принимает значения quick / standard (по умолчанию) / deep; deep дополнительно выдает квантованное решение SSVC v2.
  • Новые внешние источники — VulnCheck NVD++ (прозрачный запасной вариант NVD, используемый автоматически внутри triage_cve, когда NIST NVD недоступен/ограничен), CIRCL hashlookup и range API HIBP Pwned Passwords.
  • Жесткое правило оценки KEV + scoring_version — CVE из KEV всегда имеют статус CRITICAL (оценка ≥ 76); версия системы оценки сообщается в triage_cve и health_check.
  • HTTP-транспорт — установите MCP_TRANSPORT=http, чтобы обслуживать потоковый HTTP на HOST:PORT (по умолчанию 0.0.0.0:8000, без состояния) вместо stdio. Включается Dockerfile.
  • Ресурсы и промпты — ресурсы kev://catalog, epss://scores/{cve_id} и manifest://tool-hash (SHA-256 по поверхности зарегистрированных инструментов); промпты patch_decision, compare_and_prioritize и dependency_triage.
  • Конфигурация безопасности — сервер никогда не регистрирует обработчик сэмплинга / никогда не отправляет sampling/createMessage (вектор атаки Unit 42 на MCP-сэмплинг); новые исходящие пути фильтруются по белому списку схем/хостов.

🌐 Источники данных

# Источник Предоставляемые данные Авторизация Лимит запросов (бесплатный)
1 NVD Детали CVE, CVSS, CWE, CPE Заголовок apiKey (опционально) 5 запросов/30 сек (50 с ключом)
2 EPSS Вероятность эксплуатации и перцентили Нет 1 000 запросов/мин
3 CISA KEV Каталог активно эксплуатируемых CVE Нет Статический файл
4 OSV.dev Уязвимости пакетов открытого ПО Нет Опубликованных лимитов нет
5 GitHub Advisories Уведомления GHSA, патчи, затронутые версии Токен Bearer 60/час (5 000 с персональным токеном доступа)
6 MITRE ATT&CK TTP, техники, меры противодействия Нет Опубликованных лимитов нет
7 AbuseIPDB Уровень доверия IP, отчёты, провайдер, геоданные Заголовок Key 1 000 проверок/день
8 GreyNoise Шум/сканирование IP-адресов, классификация Заголовок key 50 запросов/неделю
9 Shodan Открытые порты, сервисы, баннеры, CVE Параметр запроса key Базовые запросы
10 VirusTotal Результаты много-антивирусного сканирования, репутация Заголовок x-apikey 500/день, 4/мин
11 MalwareBazaar Образцы вредоносного ПО, хеши, сигнатуры Заголовок Auth-Key Fair use (справедливое использование)
12 ThreatFox IOCs, связанные с семействами вредоносного ПО Заголовок Auth-Key Fair use
13 Ransomwhere BTC-адреса и транзакции шифровальщиков Нет Опубликованных лимитов нет
14 URLScan.io Сканирование URL, скриншоты, DOM Заголовок API-Key 5 000 публичных сканирований/день
15 CIRCL PDNS Исторические записи пассивного DNS HTTP Basic Auth (базовая аутентификация) Доступ для партнёров
16 GitHub Code Search Поиск репозиториев эксплойтов и PoC Токен Bearer Совместно с лимитами GHSA
17 Exploit-DB База данных публичных эксплойтов (CSV) Нет Опубликованных лимитов нет
18 Nuclei Templates Шаблоны обнаружения от сообщества Нет Опубликованных лимитов нет
19 MSRC Уведомления о безопасности Microsoft Нет Опубликованных лимитов нет
20 Red Hat Security Уведомления о CVE от Red Hat Нет Опубликованных лимитов нет
21 Ubuntu Security Трекер CVE Ubuntu Нет Опубликованных лимитов нет
22 VulnCheck NVD++ CVE-записи по схеме NVD (прозрачный запасной вариант NVD) Токен Bearer (бесплатный Community) В соответствии с тарифом VulnCheck Community
23 CIRCL hashlookup Метаданные известных хороших файлов (NSRL + другие), hashlookup:trust Нет Best-effort (по возможности)
24 HIBP Pwned Passwords Количество скомпрометированных паролей через API k-anonymity range Нет Без жёстких лимитов

🧪 Запуск тестов

# Запуск полного набора тестов
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 — все 27 определений @mcp.tool()
├── config.py              # Конфигурация окружения и базовые URL API
├── models.py              # Модели Pydantic (CVERecord, KEVEntry, EPSSScore, ...)
├── audit.py               # Ротационный аудит-лог (50 МБ, 5 резервных копий)
├── api/
│   ├── nvd_client.py      # REST API NVD v2.0
│   ├── osv_client.py      # API уязвимостей пакетов OSV.dev
│   ├── epss_client.py     # API FIRST EPSS
│   ├── kev_client.py      # Каталог CISA KEV
│   ├── ip_intel.py        # AbuseIPDB + GreyNoise
│   ├── domain_intel.py    # crt.sh + пассивный DNS CIRCL
│   ├── shodan_client.py   # Информация о хостах Shodan
│   ├── hash_intel.py      # MalwareBazaar + VirusTotal
│   ├── url_safety.py      # URLScan.io
│   ├── malware_intel.py   # Поиск IOC в ThreatFox
│   ├── ransomware_intel.py# Поиск Bitcoin-адресов Ransomwhere
│   ├── exploit_intel.py   # Поиск PoC/эксплойтов в GitHub
│   ├── vendor_advisory.py # Уведомления MSRC + Red Hat + Ubuntu
│   ├── attack_mapping.py  # Маппинг MITRE ATT&CK STIX
│   ├── cve_timeline.py    # Построитель таймлайна событий CVE
│   ├── dependency_scan.py # Сканирование зависимостей на основе OSV
│   ├── poc_checker.py     # Поиск PoC в GitHub + Exploit-DB + Nuclei
│   ├── report_generator.py# Генератор отчётов об уязвимостях + матрица сравнения CVE
│   └── rate_limiter.py    # Лимитер запросов на основе ведерного алгоритма для NVD
├── cache/
│   └── sqlite_cache.py    # Асинхронный кэш SQLite с индивидуальным TTL для каждого ключа
└── utils/
    ├── validators.py       # Нормализация CVE ID, валидация IP/хешей
    └── risk_scorer.py      # Вычисление комплексного показателя риска

Стратегия кэширования

Ресурс Время жизни (TTL)
Записи CVE (NVD) 1 час
Оценки EPSS 6 часов
Каталог KEV 1 час
Информация об IP/доменах 1 час
CSV Exploit-DB 24 часа
Данные ATT&CK STIX 24 часа
Информация оransomware 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, IP-адреса, хеши, домены и имена пакетов отправляются в соответствующие API для поиска.
  • Ответы API кэшируются локально в SQLite — кэшированные данные остаются на вашем компьютере.

Блокировка частных IP-адресов

Все инструменты сетевой разведки блокируют частные и зарезервированные диапазоны IP перед любым внешним запросом: - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918) - 127.0.0.0/8 (loopback), 169.254.0.0/16 (link-local) - ::1, fc00::/7 (частные IPv6)

Защита ключей API

  • Ключи загружаются только из переменных окружения — никогда не захардкожены.
  • Файл .env добавлен в .gitignore.
  • Ключи никогда не логируются, не кэшируются и не включаются в записи аудита.

Безопасность XML

Для разбора XML используется defusedxml, чтобы предотвратить атаки с помощью XML-бомб (миллиард улыбок, внедрение XXE).


🔧 Устранение неполадок

Сервер не запускается


# Убедитесь, что виртуальная среда активирована, и пакет установлен
pip install -e .
python --version  # должна быть 3.10+

В Claude Desktop не отображается значок молота (🔨) - Проверьте синтаксические ошибки JSON (не должно быть запятых в конце) в вашей конфигурации. - Используйте абсолютные пути — относительные пути не работают молча. - Полностью выйдите из Claude Desktop (Cmd+Q / Alt+F4) и перезапустите его.

Лимиты NVD превышены

# Добавьте ваш бесплатный ключ NVD API в .env
NVD_API_KEY=ваш-ключ-здесь
# https://nvd.nist.gov/developers/request-an-api-key

Сервер автоматически ставит избыточные запросы в очередь, но с ключом вы получаете в 10 раз большую пропускную способность.

GreyNoise 401 Unauthorized (Неавторизовано)

# Проверьте, что ваш ключ работает:
curl -H "key: ВАШ_КЛЮЧ" https://api.greynoise.io/v3/ip/8.8.8.8
# Сервер использует /v3/ip/{ip} — НЕ устаревший эндпоинт /v3/community

Проблемы с кодировкой в Windows

$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"

🗺️ Дорожная карта и известные ограничения

Что НЕ делает сервер

  • Нет активного сканирования — только разведка/поиск, не исследует вашу инфраструктуру.
  • Нет операций записи — только чтение из внешних API (кроме отправок в URLScan).
  • Нет подсчёта CVSS v4.0 — встроенный калькулятор работает только с v3.1; оценки v4.0 от NVD отображаются, но не пересчитываются.

Известные ограничения API

  • NVD возвращает максимум 2 000 результатов за запрос.
  • Оценки EPSS для совсем новых CVE (моложе 24 часов) могут еще не существовать.
  • CISA KEV обновляется только в рабочие дни США.
  • GreyNoise (уровень community): 50 запросов в неделю.
  • VirusTotal (бесплатный тариф): 4 запроса в минуту.
  • CIRCL PDNS требует ручной регистрации и одобрения.
  • Ransomwhere вводит 90-дневный карантин для новых адресов.

Запланированные улучшения

  • Локальный калькулятор CVSS v4.0.
  • Webhook/оповещения о добавлении в KEV и изменении оценок EPSS для отслеживаемого списка CVE.
  • Экспорт в формате 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.

Copyright (c) 2025-2026 Mahipal Jangra (mukul975)

Создано с 🔐 Mahipal Jangra · Берлин, Германия
Превращаем данные о безопасности в диалог.

Комментарии
Войдите, чтобы оставить комментарий