演示
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+速率限制
特性
- Slack机器人 (松螺栓1.27.0)
- Socket模式用于实时事件处理 - /cve-search 斜杠命令 - @提及对CVE查询解析的支持 - 当@没有查询时,默认的帮助命令 - 支持@sentences中的--type过滤器 - Redis作业队列集成 - 自动捕获webhook传递的response_url
- 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),只读文件系统,功能下降
- 工人服务 (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故障和无效用户输入的优雅错误处理
- 瑞迪斯 (版本7-alpine)
- 持久性已启用(仅附录是) - 已配置健康检查 - 后端网络隔离
- Docker基础架构
- 3个隔离网络: frontend (Slack机器人), backend (Redis), mcp-isolated (MCP服务器) - 资源限制:256-512MB RAM,每次服务0.25-0.5 CPU - 安全策略:无新权限,功能下降 - 对所有关键服务进行健康检查
入门指南
1.启动所有服务:
docker-compose up -d2.检查服务状态:
docker-compose ps
docker-compose logs mcp-server worker redis slack-bot3.在Slack中使用:
/cve-search CVE-2021-44228
/cve-search apache log4j
@CVE Research Bot help4.手动作业测试(可选):
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:6379MCP_SERVER_URL=http://mcp-server:8080TEST_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
- 创建Slack应用程序 在https://api.slack.com/apps
- 点击“创建新应用”→ “从头开始” - 将其命名为“CVE研究机器人”并选择您的工作区
- 启用套接字模式
- 转到侧栏中的“套接字模式” - 启用套接字模式 - 生成应用级令牌 connections:write 范围 - 将此另存为 SLACK_APP_TOKEN
- 配置OAuth和权限
- 转到“OAuth和权限” - 添加Bot令牌范围: - chat:write -发送消息 - commands -使用斜线命令 - app_mentions:read -阅读@提及 - 将应用程序安装到工作区 - 将“Bot用户OAuth令牌”复制为 SLACK_BOT_TOKEN
- 获取签名密钥
- 转到“基本信息” - 将“签名密钥”复制为 SLACK_SIGNING_SECRET
- 创建Slash命令
- 转到“Slash Commands” - 创建命令 /cve-search - 请求URL可以是任何东西(套接字模式不使用它) - 描述:“搜索CVE信息” - 使用提示: CVE-2021-44228 或 apache log4j
- 更新.env文件
SLACK_BOT_TOKEN=xoxb-your-token
SLACK_APP_TOKEN=xapp-your-token
SLACK_SIGNING_SECRET=your-secret
TEST_MODE=false # Enable webhook delivery- 启动所有服务
docker-compose up -dSlack中的用法:
/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的服务被要求在应用程序中突出显示上述通知。
