CVE研究Slack机器人

一个基于Slack的CVE研究机器人,提供漏洞检测、分类和参考信息,适用于安全研究和漏洞管理。

  • by ddamme05
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ddamme05/slack-mcp-cve

使用说明

演示

https://github.com/user-attachments/assets/6b7763a1-6a5e-45d1-992c-0647ba3e4471

演示显示确切的CVE查询、关键字搜索、资源链接和CVE概述

Slack CVE Bot-MCP实现

一个使用模型上下文协议(MCP)、Docker、Redis和Python进行CVE研究的生产就绪Slack机器人。

主要特点

🚨 即时漏洞检测和NVD数据质量解决方案

高级参考分类 -使用基于URL的启发式分类处理不完整的NVD数据:

  • 🚨 利用:可用的公开漏洞利用(直接威胁)
  • 🔧 修补/修复:供应商补丁、修复和缓解措施
  • 📰 咨询:安全建议(供应商+第三方)
  • 🚨 CISA-KEV:已知的漏洞(在野外被积极利用)
  • 🔗 自动分类:NVD标签缺失时的启发式分类(约85%的准确率)

主要特点:

  • Slack块套件用户界面:具有标题、部分和格式化块的丰富交互式消息
  • 精细分类:基于URL的启发式方法将漏洞利用与警告区分开来(不再有误报)
  • NVD订单保存:按时间顺序显示的参考文献(尊重NVD的语义顺序)
  • URL净化:正确转义的URL可防止Slack链接格式问题
  • 多类别支持:引用可以属于多个类别
  • CWE显示器:显示漏洞弱点类型(CWE-79:XSS、CWE-89:SQLi等)
  • NVD危机抵御能力:适用于60-70%的标签不完整的新CVE(自2024年2月以来)
  • 透明度:自动分类参考标记清晰,显示数据质量警告
  • 稳健的输入处理:针对无效类型标志的优美错误消息

示例 (Slack块套件格式):

🔴 CVE-2021-44228
CRITICAL (CVSS 10.0) • 🚨 ACTIVELY EXPLOITED (CISA KEV)

Description
Apache Log4j2 2.0-beta9 through 2.15.0 JNDI features do not protect...

Weakness Types
CWE-20, CWE-400, CWE-502

Published: 2021-12-10

🚨 CISA Known Exploited Vulnerability
Added to KEV: 2021-12-10
Remediation Due: 2021-12-24
Ransomware Use: Known

🚨 Exploits & PoCs (showing 5 of 47)
• packetstormsecurity.com/files/165270/...Remote-Code-Execution.html (inferred)
• github.com/christophetd/log4shell-vulnerable-app (inferred)
...

🔧 Patches & Fixes (showing 5 of 6)
• msrc-blog.microsoft.com/2021/12/11/microsofts-response...
• oracle.com/security-alerts/cpuapr2022.html
...

📰 Security Advisories (showing 5 of 28)
• nvd.nist.gov/vuln/detail/CVE-2021-44228
• github.com/advisories/GHSA-jfh8-c2jp-5v3q
...

💻 GitHub Resources (475 found)
• fullhunt/log4j-scan (3433 ⭐)
• NCSC-NL/log4shell (1892 ⭐)
...

Risk Assessment
🚨 Critical severity. Immediate patching required.

过滤:使用 --type poc, --type fix,或 --type advisory 按类别筛选结果


建筑

Slack User → Slack Bot (Socket Mode)
         ↓
    Redis Queue (FIFO)
         ↓
    Worker Service (2 replicas)
         ↓
    MCP Server (rate-limited, sandboxed)
         ↓
    External APIs (NIST NVD, GitHub)
         ↓
    Python Formatter
         ↓
    Slack Webhook Response

服务

  • 松弛机器人:套接字模式处理程序、斜线命令处理器
  • 瑞迪斯:具有持久性的作业队列
  • 工人 (2x):MCP客户端的工作消费者
  • mcp服务器:带3个工具的FastMCP+速率限制

特性

  1. Slack机器人 (松螺栓1.27.0)

    • Socket模式用于实时事件处理
    • /cve-search 斜杠命令
    • @提及对CVE查询解析的支持
    • 当@没有查询时,默认的帮助命令
    • 支持@sentences中的--type过滤器
    • Redis作业队列集成
    • 自动捕获webhook传递的response_url
  2. MCP服务器 (FastMCP 2.13.0.2)

    • 4个异步工具:
      • lookup_cve_details:具有启发式分类的NVD数据
      • search_github_cve_repos:GitHub PoC/漏洞利用仓库
      • search_cve_by_keyword:NVD关键字搜索
      • check_cisa_kev_details:CISA KEV目录元数据(可选)
    • 端口8080上的流式HTTP传输(/mcp 端点)
    • API速率限制:基于API密钥存在的自动节流
      • NVD:50个要求/30s(带钥匙)或5个要求/3os(不带钥匙)
      • GitHub:5000请求/小时(有令牌)或60请求/小时
    • GitHub速率限制监控:剩余请求少于10个时发出主动警告
    • 精细启发式分类:路径感知漏洞检测
      • 将漏洞利用代码与同一平台上的咨询页面区分开来(例如PacketStorm)
      • 咨询URL排除可防止误报
      • 不再将合法的安全公告过滤为漏洞利用
    • NVD订单保存:按原始NVD顺序返回所有引用
    • URL重复数据删除:防止来自不同NVD源的重复引用
    • CISA KEV检测:检查所有引用中的活动漏洞利用指标(准确率95%以上)
    • CWE显示器:显示漏洞弱点类型
    • 安全性:非root用户(uid 1000),只读文件系统,功能下降
  3. 工人服务 (2个复制品)

    • 具有指数回退重试的Redis作业消费者
    • 弹性Redis连接(1秒、2秒、4秒、8秒、16秒重试延迟)
    • 查询调度程序(自动检测CVE ID与关键字)
    • 支持流式HTTP的FastMCP客户端
    • 纯Python格式(确定性,无AI API)
    • Slack块套件格式化:具有标题、部分和分隔符的丰富交互式消息
    • URL净化:转义的特殊字符可防止Slack链接问题
    • 参考文献分类:每个CVE最多显示5个漏洞、5个补丁和5个警告
    • NVD订单保存:按时间顺序显示的参考文献
    • 即时威胁评估 通过参考类型表情符号(🚨 利用,🔧 补丁,📰 咨询)
    • CISA KEV元数据显示 (添加日期、到期日期、勒索软件使用)
    • 双输送系统:Webhook(斜杠命令)+Slack Web API(@提及)
    • 针对CISA API故障和无效用户输入的优雅错误处理
  4. 瑞迪斯 (版本7-alpine)

    • 持久性已启用(仅附录是)
    • 已配置健康检查
    • 后端网络隔离
  5. Docker基础架构

    • 3个隔离网络: frontend (Slack机器人), backend (Redis), mcp-isolated (MCP服务器)
    • 资源限制:256-512MB RAM,每次服务0.25-0.5 CPU
    • 安全策略:无新权限,功能下降
    • 对所有关键服务进行健康检查

入门指南

1.启动所有服务:

docker-compose up -d

2.检查服务状态:

docker-compose ps
docker-compose logs mcp-server worker redis slack-bot

3.在Slack中使用:

/cve-search CVE-2021-44228
/cve-search apache log4j
@CVE Research Bot help

4.手动作业测试(可选):

docker exec slack-mcp-redis-1 redis-cli LPUSH mcp_jobs \
  '{"query": "CVE-2021-44228", "user_id": "test", "response_url": "http://test.com/webhook"}'

5.查看员工日志:

docker logs slack-mcp-worker-1 --tail 50
docker logs slack-mcp-worker-2 --tail 50

输出示例

CVE查找(CVE-2021-44228):

🔴 **CRITICAL**: CVE-2021-44228 🚨 *ACTIVELY EXPLOITED (CISA KEV)*

📋 **Summary**
Apache Log4j2 2.0-beta9 through 2.15.0 JNDI features do not protect...

📊 **Details**
• CVSS Score: 10.0
• Weakness: CWE-20, CWE-400, CWE-502
• Published: 2021-12-10
• Last Modified: 2025-10-27

⚠️ *CISA KEV Details*
• Added to KEV: 2021-12-10
• Remediation Due: 2021-12-24
• Ransomware Use: Known
• Action Required: Apply updates per vendor instructions

🔗 **References**
• 🚨 Exploit: http://packetstormsecurity.com/files/165261/Apache-Log4j2-2.14.1-Information-Disclosure.html
• 🚨 Exploit: http://packetstormsecurity.com/files/165270/Apache-Log4j2-2.14.1-Remote-Code-Execution.html
• 🚨 Exploit: http://packetstormsecurity.com/files/165371/VMware-Security-Advisory-2021-0028.4.html
• 🚨 Exploit: http://packetstormsecurity.com/files/165532/Log4Shell-HTTP-Header-Injection.html
• 🚨 Exploit: http://packetstormsecurity.com/files/165642/VMware-vCenter-Server-Unauthenticated-Log4Shell-JNDI-Injection-Remote-Code-Execution.html

🐙 **GitHub Resources** (474 total)
• fullhunt/log4j-scan (3434 ⭐)
• NCSC-NL/log4shell (1892 ⭐)

⚠️ **Risk Assessment**
🚨 Critical severity. Immediate patching required.

🔍 Full details: https://nvd.nist.gov/vuln/detail/CVE-2021-44228

关键字搜索(apache log4j):

🔍 **CVE Search Results**: `apache log4j`
Found 16 CVEs (showing top 10):

🔴 **CVE-2021-44228** (CVSS: 10.0)
   Apache Log4j2 2.0-beta9 through 2.15.0...

🟠 **CVE-2021-45046** (CVSS: 9.0)
   Fix to address CVE-2021-44228 was incomplete...

💡 Use `/cve-search CVE-2021-44228` for detailed info

环境变量

复制 .env.example 到 .env:

cp .env.example .env

所需(第一阶段):

  • REDIS_URL=redis://redis:6379
  • MCP_SERVER_URL=http://mcp-server:8080
  • TEST_MODE=true (控制台输出)或 false (Slack webhooks)

对于生产(Slack集成):

  • SLACK_BOT_TOKEN=xoxb-... (来自api.llack.com/apps的Bot用户OAuth令牌)
  • SLACK_APP_TOKEN=xapp-... (带连接的应用级令牌:写入作用域)
  • SLACK_SIGNING_SECRET=... (基本信息中的签名秘密)
  • NVD_API_KEY=... (NIST NVD API密钥用于更高的速率限制)
  • GITHUB_TOKEN=... (GitHub个人访问令牌用于更高的速率限制)

设置Slack Bot

组件 技术 版本
语言 Python 3.11
松弛SDK 松弛螺栓 1.27.0
MCP框架 FastMCP 2.13.0.2
MCP SDK(工作程序) FastMCP客户端 2.13.0.2+
HTTP客户端 httpx 0.28.1
Redis客户端 Redis-py 7.0.1
作业队列 Redis 7-alpine
容器化 Docker Compose 3.8
CVE数据源 NIST NVD API 2.0
代码搜索 GitHub REST API v3
传输 流式HTTP/Socket模式 -

安全功能

集装箱安全和装箱

  • ✅ 网络隔离:三层网络架构(前端、后端、mcp隔离)
    • 隔离网络中的MCP服务器,没有直接的外部访问
    • Redis后端网络与Slack bot前端隔离
    • 服务间通信的最小特权原则
  • ✅ 集装箱硬化:
    • 所有容器中的非root用户(uid 1000)
    • MCP服务器上的只读根文件系统
    • 能力下降(cap_drop: [ALL])
    • no-new-privileges 安全选项已启用
    • 最小的阿尔卑斯山/超薄基础图像,减少攻击面
  • ✅ 资源控制:内存(256-512MB)和CPU(0.25-0.5核)限制可防止资源耗尽

应用安全

  • ✅ 输入验证和消毒:
    • CVE ID格式验证(CVE-YYYY-NNNN+ 图案)
    • URL净化可防止Slack注入攻击
    • 用户控制内容的Markdown转义处理
  • ✅ 秘密管理:
    • 代码或Dockerfiles中没有硬编码凭据
    • 基于环境变量的配置
    • .gitignore 保护 .env 文件
  • ✅ API安全:
    • 具有自动节流功能的速率限制(NVD:50需求/30s,GitHub:5000需求/hr)
    • Slack请求签名验证
    • 具有速率限制监控的GitHub令牌身份验证
    • NVD API关键支持增强的速率限制

MCP服务器隔离(OWASP MCP最佳实践)

  • ✅ 沙盒执行:MCP服务器在隔离的Docker网络中运行,出口受限
  • ✅ 最小特权原则:只读文件系统、丢弃功能、非根执行
  • ✅ 无外壳访问权限:基于Python的服务器,不执行shell命令
  • ✅ 受控的外部API访问:只有NIST NVD和GitHub API(没有任意HTTP请求)
  • ✅ 无状态设计:无持久存储要求,容器生命周期短暂

附加安全措施

  • ✅ 错误处理:巧妙的失误会阻止信息泄露
  • ✅ 日志记录:所有CVE查找和API调用的审核跟踪
  • ✅ 健康检查:自动服务监控和故障重启
  • ✅ Redis持久性:仅附加具有数据持久性的文件(AOF)

设置Slack Bot

  1. 创建Slack应用程序 在https://api.slack.com/apps

    • 点击“创建新应用”→ “从头开始”
    • 将其命名为“CVE研究机器人”并选择您的工作区
  2. 启用套接字模式

    • 转到侧栏中的“套接字模式”
    • 启用套接字模式
    • 生成应用级令牌 connections:write 范围
    • 将此另存为 SLACK_APP_TOKEN
  3. 配置OAuth和权限

    • 转到“OAuth和权限”
    • 添加Bot令牌范围:
      • chat:write -发送消息
      • commands -使用斜线命令
      • app_mentions:read -阅读@提及
    • 将应用程序安装到工作区
    • 将“Bot用户OAuth令牌”复制为 SLACK_BOT_TOKEN
  4. 获取签名密钥

    • 转到“基本信息”
    • 将“签名密钥”复制为 SLACK_SIGNING_SECRET
  5. 创建Slash命令

    • 转到“Slash Commands”
    • 创建命令 /cve-search
    • 请求URL可以是任何东西(套接字模式不使用它)
    • 描述:“搜索CVE信息”
    • 使用提示: CVE-2021-44228 或 apache log4j
  6. 更新.env文件

    SLACK_BOT_TOKEN=xoxb-your-token
    SLACK_APP_TOKEN=xapp-your-token
    SLACK_SIGNING_SECRET=your-secret
    TEST_MODE=false  # Enable webhook delivery
    
  7. 启动所有服务

    docker-compose up -d
    

Slack中的用法:

/cve-search CVE-2021-44228
/cve-search apache log4j
@CVE Research Bot help

测试

单元测试

该项目包括一个全面的测试套件,涵盖了关键的启发式方法和格式化程序:

cd tests
pip install -r requirements.txt
pytest

测试覆盖范围:

  • 启发式分类 (18个测试):漏洞检测、建议URL排除、补丁检测
  • URL净化 (17个测试):松弛逃逸、XSS预防、标记注入
  • 块套件格式化程序 (18个测试):参考过滤、重复数据删除、块生成
  • 总计:54项测试,全部通过✅

关键测试:

# Test PacketStorm advisory filtering (Round 8 bug fix)
pytest tests/test_heuristics.py::TestExploitDetection::test_packetstorm_advisory_urls_excluded -v

# Test URL sanitization
pytest tests/test_sanitization.py::TestURLSanitization -v

# Test reference filtering by type
pytest tests/test_formatters.py::TestReferenceFiltering -v

发展

构建所有服务:

docker-compose build

以分离模式启动:

docker-compose up -d

查看日志:

docker-compose logs -f worker

停止所有服务:

docker-compose down

清洁体积:

docker-compose down -v

许可证

麻省理工学院

归因

NVD API使用:本产品使用NVD API,但未经NVD认可或认证。

NVD API旨在用于开发从NVD数据中搜索、显示、分析、检索、查看和以其他方式“获取”信息的服务。使用或访问NVD API的服务被要求在应用程序中突出显示上述通知。