yatuk/mcpradar

GitHub: yatuk/mcpradar

MCPRadar是一款针对Model Context Protocol(MCP)服务器的安全扫描器,用于在AI Agent接入外部工具前检测并拦截工具投毒、提示词注入和跨服务器攻击链等安全风险。

Stars: 1 | Forks: 0

MCPRadar

MCPRadar

Model Context Protocol 服务器的安全扫描器。
在您的 agent 运行之前,捕获 tool poisoning、prompt injection 和供应链中的 rug pull(突然撤资/恶意篡改)行为。

CI MIT License GitHub stars Last commit Status: Release Candidate
PyPI version Python 3.11 3.12 3.13 PyPI downloads Ruff OWASP MCP Top 10

快速开始 · 检测规则 · 功能对比 · OWASP 覆盖率 · GitHub Action · 路线图 · 架构

## 为什么需要? Model Context Protocol 生态系统正在快速增长,其攻击面也同样如此。 一项针对 **1,899 个 MCP 服务器**的 2025 年研究发现,其中 **7.2% 包含常规漏洞,5.5% 存在 MCP 特有的 tool poisoning** ([arXiv:2506.13538](https://arxiv.org/abs/2506.13538))。 OX Security 也独立演示了在官方 MCP SDK (Python、TypeScript、Java、Rust)中的远程代码执行,其中至少包含 10 个高危/严重级别的 CVE。 问题在于:传统的安全工具并不监控 MCP 的 tool descriptions,也无法检测在安装后服务器更改其 tool schema 的“rug pull”攻击。**MCPRadar 做到了。** ## 快速开始 ``` uvx mcpradar scan "npx -y @modelcontextprotocol/server-filesystem /tmp" -t stdio ``` 就是这样。只需一条命令,无需安装,即可针对任何你能启动的 MCP 服务器运行。 ## 功能 ### 🔍 安全检测(12 条规则,已全部内建) - 🎯 **R001–R105** — 危险的 tool names、零宽 Unicode、prompt injection(10 种模式)、base64/hex blobs、隐藏的 HTML/Markdown、权限范围不匹配 - ✅ **R106–R111** — Secret/token 泄露、command injection、供应链风险、schema poisoning、版本异常、不安全的 transport ### 🔗 跨服务器分析(7 条规则,已全部内建) - 🌐 **C001–C007** — tool name 冲突、遮蔽、数据外发链、能力重叠、权限梯度、攻击路径链(基于图)、通过跨服务器链实现的提权 ### 📦 包与源码扫描 - 📂 **`scan-source`** — 扫描 GitHub 仓库、npm/pip 包、Docker 镜像、MCP registry ID,无需运行服务器 - 🌳 **AST + Semgrep** — 源码静态分析:Description-Code Inconsistency (DCI)、不安全的反序列化、SQLi ### 🏗️ CI/CD 与输出 - 🔐 **SARIF v2.1.0** — 通过一个 Action 即可接入 GitHub Security 选项卡 - 📊 **AIVSS 0–10 评分** — AI 漏洞严重程度评分,附带 CWE 映射 - 📸 **Snapshot diff** — 基于 SQLite 的历史记录,*外观级 / 行为级 / **安全级*** 分类 - 🏃 **快速** — 纯 Python 编写,无 daemon,在 CI 中运行时间不到 5 秒 ### 🔗 供应链 - 📋 **CycloneDX SBOM** — 导出 + OSV/GitHub Advisory CVE 检查(可选,异步) - 📌 **基于 Hash 的 tool pinning** — description、schema 和 command 的 SHA-256 值 → 检测 rug pull - 🔍 **Typosquatting 检测** — 针对已知热门包计算 Levenshtein 距离 ### 🛡️ 企业级功能 - 🏖️ **Sandbox 模式** — `--sandbox`:带有出口锁定、临时 FS 和云端元数据拦截的一次性容器 - 📝 **审计跟踪** — 结构化事件日志(scan_start、finding_created、diff_detected) - 📈 **统计引擎** — 单服务器趋势分析、热门规则、严重程度分布 - 🧩 **插件系统** — `entry_points` 自动发现,`mcpradar plugin init/validate/install` ## 工作原理 ``` graph LR A[CLI] --> B[Scanner Engine] B -->|stdio/SSE/HTTP| C[MCP Server] B -->|git/npm/Docker| P[Package Scanner] C -->|tools, prompts, resources| B P -->|source code| S[Source Analysis] S -->|AST + Semgrep| D2[Rule Engine] B --> D[Rule Engine] D -->|findings| E[SQLite Snapshot] D2 -->|findings| E E --> F[Scoring Engine] F -->|AIVSS 0-10| G[Rich / JSON / SARIF] B --> H[Sandbox Engine] H -->|egress lock| C ``` MCPRadar 连接到 MCP 服务器(或从 GitHub/npm/Docker 拉取其源码),枚举 tools/prompts/resources,通过规则引擎运行每个 tool schema,在可用时执行基于 AST+Semgrep 的源码分析,计算 AIVSS 分数,将 snapshot 存储在 SQLite 中,并输出报告。后续扫描会与历史记录进行 diff,以捕获静默更改。可选的 sandbox 引擎会在出口网络被完全锁定的一次性容器中运行不受信任的 STDIO 服务器。 ## 功能对比 | 功能 | MCPRadar | Cisco mcp-scanner | Snyk agent-scan | Pipelock | Hermes | agent-audit | MCP Guardian | |---|---|---|---|---|---|---|---| | **方法** | 静态分析 + Diff + Sandbox | YARA + LLM + VirusTotal | LLM 分类器 | 运行时代理 (Go) | Fuzz + Probe (Rust) | SAST 40+ 规则 | 策略代理 | | **零宽 Unicode** | ✅ | ❌ | ❌ | ✅ (实时) | ❌ | ❌ | ❌ | | **Prompt injection** | 10 种模式 | YARA 模式 | 基于 LLM | ✅ (实时) | ❌ | ❌ | ❌ | | **Base64/hex blob** | ✅ | ❌ | ❌ | ✅ (解码) | ❌ | ❌ | ❌ | | **隐藏的 HTML/MD** | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | **Secret/token 扫描** | ✅ R106 | ✅ (YARA) | ❌ | ✅ (48 DLP) | ✅ | ✅ | ❌ | | **Command injection** | ✅ R107 | ❌ | ❌ | ✅ (实时) | ✅ | ✅ | ❌ | | **供应链风险** | ✅ R108 | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | **DCI (desc ≠ code)** | ✅ 基于 AST | ❌ | ❌ | ❌ | ❌ | 部分 | ❌ | | **跨服务器分析** | ✅ C001-C007 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | **源码扫描** | ✅ GitHub/npm/Docker | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | | **SBOM + 依赖 CVE** | ✅ CycloneDX | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | **Sandbox 执行** | ✅ Docker 出口锁定 | ❌ | ❌ | 不适用 (代理) | ❌ | ❌ | ❌ | | **AIVSS 评分** | ✅ 0–10 + CWE | LLM 评分 | ✅ | ❌ | ❌ | ❌ | ❌ | | **Snapshot diff** | ✅ 3 个级别 | 未记录 | 版本比较 | ✅ (每次调用) | ❌ | ❌ | ❌ | | **SARIF 输出** | ✅ v2.1.0 | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | | **stdio transport** | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | **运行时代理** | ❌ (计划在 v1.1) | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | | **License** | MIT | Apache 2.0 | Snyk 平台 | Apache 2.0 | 未知 | 未知 | 自定义 | | **支持离线** | ✅ | ❌ (VT/LLM API) | ❌ (LLM API) | ✅ | ✅ | ✅ | ✅ | ✅ = 已内建 · 🔜 = 计划中 (见 [ROADMAP.md](ROADMAP.md)) ## 安装说明 ``` # 无需安装 — 一次性运行 uvx mcpradar scan http://localhost:8080 # 或永久安装 pip install mcpradar ``` ## 使用说明 ``` # 扫描本地 stdio server mcpradar scan stdio -- npx -y @modelcontextprotocol/server-filesystem /tmp # 扫描 HTTP server,仅限关键发现 mcpradar scan http://localhost:8080 -s critical # 用于 CI 的 SARIF mcpradar scan http://x --format sarif -o results.sarif # 对比最后 2 次扫描(rug pull 检测) mcpradar diff http://localhost:8080 # 无需运行 server 直接扫描 GitHub repo mcpradar scan-source github:user/mcp-server # 静态扫描 npm/pip package mcpradar scan-source npm:mcp-server-package mcpradar scan-source pip:mcp-server-lib # 安全的沙盒化执行(一次性 container,无网络) mcpradar scan stdio -- ./untrusted-server --sandbox # Plugin 管理 mcpradar plugin init my-rule mcpradar plugin validate ./my-rule mcpradar plugin list # Runtime 探测(仅限安全的只读工具) mcpradar probe http://localhost:8080 --safe-only # Server 指纹识别 mcpradar fingerprint http://localhost:8080 # 跨 Server 深度分析 mcpradar analyze-context --deep --graph -o risk.dot # Audit trail 与统计信息 mcpradar audit --target http://localhost:8080 mcpradar stats http://localhost:8080 ``` ## GitHub Action ``` - name: Scan MCP server run: uvx mcpradar scan ${{ inputs.server }} --format sarif -o results.sarif - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: results.sarif ``` 检测结果将显示在您仓库的 Security 选项卡中。完整模板: [`.github/workflows/example-action.yml`](.github/workflows/example-action.yml) ## 检测规则 ### 内建规则 (v1.0) | ID | 规则 | 严重程度 | OWASP | 捕获内容 | |------|-----------------------|---------------|-------|---------| | R001 | 危险的 Tool Name | CRITICAL | MCP03 | `eval`, `exec`, `rm`, `shell`, `curl`, `wget`, `chmod` … | | R101 | 零宽 Unicode | HIGH/CRITICAL | MCP06 | ZWSP, LRM, RLO, BOM — 在 tool name 中 (CRITICAL) 或 description 中 (HIGH) | | R102 | Prompt Injection | HIGH/CRITICAL | MCP06 | "ignore previous", `system:`, `<\|im_start\|>`, "you must", 覆盖指令, 越狱 … (10 种模式) | | R103 | 编码的 Blob | MEDIUM/HIGH | MCP06 | Base64 (40+ 字符), hex (32+ 字符) — 如果解码为可读文本则为 HIGH | | R104 | 隐藏内容 | HIGH | MCP03 | `display:none`, `font-size:0`, 隐藏的 Markdown 链接, 具有欺骗性的 `` 标签 | | R105 | 权限范围不匹配 | LOW/MEDIUM | MCP02 | Tool name 暗示为文件/数据库/只读,而 description 提及网络/shell/写入 | | R106 | Secret/Token 泄露 | CRITICAL/HIGH | MCP01 | API keys, GitHub tokens, JWTs, 数据库连接字符串, 高熵字符串 | | R107 | Command Injection | CRITICAL/HIGH | MCP05 | Shell 元字符, 危险的默认值, 过于宽泛的正则表达式, command enums | | R108 | 供应链风险 | HIGH/MEDIUM | MCP04 | `curl \| bash`, `pip install`, `eval()`, `npx`, 动态导入 | | R109 | Schema Poisoning | HIGH/MEDIUM | MCP03 | `additionalProperties: true`, 缺失类型, 过大的 maxLength/maxItems | | R110 | 版本异常 | HIGH/CRITICAL | MCP09 | 版本回退, 主版本升级, tool 列表更改, TLS 降级 | | R111 | 不安全的 Transport | HIGH/CRITICAL | MCP07 | 明文 HTTP, TLS < 1.2, 过期/自签名证书, 缺失 HSTS | ### 跨服务器 (v0.5.0) | ID | 规则 | 严重程度 | OWASP | 捕获内容 | |------|-----------------------|---------------|-------|---------| | C001 | Tool Name 冲突 | CRITICAL | MCP10 | 相同的 tool name 被 2 个以上的服务器暴露 — LLM 可能会调用错误的那个 | | C002 | Tool Name 遮蔽 | HIGH | MCP10 | 跨服务器存在相似的 tool names(相似度 ≥75%) | | C003 | 数据外发链 | CRITICAL | MCP10 | 服务器 A 读取敏感数据,服务器 B 将其发送出去 | | C004 | 能力重叠 | MEDIUM | MCP10 | 3 个以上的服务器暴露相同的能力 (file_read, shell_exec…) | | C005 | 权限梯度 | MEDIUM | MCP02 | 只读与具备写入能力的服务器混合 — 注入可能会劫持写入权限 | | C006 | 攻击路径链 | CRITICAL/HIGH/MEDIUM | MCP03/MCP10 | 跨服务器 tool 输出与输入的 schema 类型匹配揭示了链式攻击路径 | | C007 | 提权 | CRITICAL | MCP02 | 服务器 A 上的只读 tool 输出传入了服务器 B 上的写入/执行 tool 输入中 | 完整文档:[docs/detection-rules.md](docs/detection-rules.md) ## 公共排行榜 针对热门 MCP 服务器的安全评分,每周更新:

🔗 yatuk.github.io/mcpradar


⭐ If MCPRadar helped you catch something, please star us on GitHub.
It's the single biggest signal that this work matters.

Star on GitHub

## OWASP MCP Top 10 覆盖率 MCPRadar 的目标是完全覆盖 [OWASP MCP Top 10 (2025(https://owasp.org/www-project-mcp-top-10/): | # | 风险 | 覆盖方式 | 状态 | |---|---|---|---| | MCP01 | Token 管理不当与 Secret 泄露 | R106 | ✅ 强力 | | MCP02 | 通过范围蔓延导致的提权 | R105, C005, C007 | 🟢 强力 | | MCP03 | Tool Poisoning | R001, R104, R109, C006 | 🟢 强力 | | MCP04 | 供应链攻击与依赖篡改 | R108 | ✅ 强力 | | MCP05 | Command Injection 与执行 | R001, R107 | 🟢 强力 | | MCP06 | 通过 Contextual Payloads 进行的 Prompt Injection | R101, R102, R103, R104 | ✅ 强力 | | MCP07 | AuthN/AuthZ 不足 | R111 | ✅ 强力 | | MCP08 | 缺乏审计与遥测 | 审计跟踪, 统计引擎 | ✅ 强力 | | MCP09 | 影子 MCP 服务器 | R110 | ✅ 强力 | | MCP10 | Context Injection 与过度共享 | C001–C007 | 🟢 强力 | ✅ 强力 · 🟡 部分 · 🔴 极少 · 🔜 计划中 — 见 [ROADMAP.md](ROADMAP.md) ## Claude Code Agent 团队 MCPRadar 的开发由位于 `.claude/agents/` 下的 12 个专门化子 agent 驱动: | Agent | 专长领域 | |---|---| | `detection-rule-engineer` | 新的 Rule 子类 (R200+),严重程度分类,降低误报率 | | `source-analysis-engineer` | 使用 Python `ast` + Semgrep 检测 SSRF、路径遍历、DCI、不安全的反序列化 | | `transport-specialist` | HTTP/SSE/stdio 传输层,MCP 握手,连接错误 | | `auth-hardening-auditor` | OAuth 2.1 反模式,token 透传,0.0.0.0 绑定,硬编码凭证 | | `supply-chain-analyst` | CycloneDX SBOM,OSV/GitHub Advisory,typosquatting,hash pinning | | `package-source-scanner` | GitHub/npm/pip/Docker/registry 源码获取,无需运行即可扫描 | | `sandbox-runtime-engineer` | 一次性容器,出口锁定,临时 FS | | `diff-snapshot-dev` | SQLite schema,diff 分类(外观/行为/安全) | | `scoring-fp-engineer` | AIVSS 0–10 评分,CWE 映射,基于置信度的误报 (FP) 降低 | | `ci-sarif-engineer` | SARIF 输出,GitHub Actions,CI 矩阵,OIDC PyPI 发布 | | `test-qa` | Pytest 覆盖率,测试夹具,回归测试,单规则用例表 | | `docs-maintainer` | README,CHANGELOG,docs/ 文档同步 | ## 路线图 请参阅 **[ROADMAP.md](ROADMAP.md)** 获取完整的开发路线图。 ### 概要 | Sprint | Version | 重点 | |--------|---------|-------| | ✅ 1 | v0.2.0 | 4 条新规则 — Secret 泄露 (R106),Command injection (R107),供应链 (R108),Schema poisoning (R109) | | ✅ 2 | v0.3.0 | 插件系统 — PluginManager, Validator, Scaffolder, CLI | | ✅ 3 | v0.4.0 | 服务器指纹识别 + 传输安全 (R110, R111) | | ✅ 4 | v0.5.0 | 深度跨服务器分析 + 运行时探测 (C006, C007) | | 5 | v0.6.0 | 审计跟踪 + CVE 自动化 + 统计功能 | | ✅ 6 | v1.0.0-rc1 | 验证,性能优化,文档完善 — OWASP 10/10 | ### 已完成 (v0.1.0) - [x] 6 条检测规则,3 种 transport,SQLite snapshot - [x] Git-diff 风格的 schema diff(外观/行为/安全) - [x] Snapshot 浏览器(列表、展示、导出、清理) - [x] SARIF + GitHub Actions 集成 - [x] CI 矩阵 (3.11/3.12/3.13 × ubuntu/macos/windows) - [x] 公共排行榜 (GitHub Pages) ## 贡献者 ## 许可证 [MIT](LICENSE) © 2026 Fatih Serdar Çakmak
标签:AI安全, Chat Copilot, DLL 劫持, GraphQL安全矩阵, MCP协议, Python, SARIF, StruQ, 图数据库, 大语言模型, 安全扫描器, 无后门, 请求拦截, 逆向工具