abhijitdalal26/MCP-Audit
GitHub: abhijitdalal26/MCP-Audit
一款 MCP 服务器配置安全审计工具,通过全面扫描配置文件来检测密钥泄露、供应链风险及 Prompt 注入等 OWASP MCP Top 10 漏洞。
Stars: 0 | Forks: 0
# MCPAudit
[](LICENSE)
[](apps/api/tests/)
[](apps/api/)
[](https://owasp.org/)
Model Context Protocol (MCP) 服务器配置的安全审计工具。粘贴你的 `claude_desktop_config.json` 或 `.cursor/mcp.json` —— 即可获取一份统一的安全报告,其中每项发现均映射到 **OWASP MCP Top 10**。
## 功能简介
你添加到 Claude Desktop 或 Cursor 的每个 MCP 服务器都会获得对你文件系统、shell、浏览器或 API 的访问权限。MCPAudit 会扫描你的配置,并在你信任它之前告知你每个服务器会引入哪些风险。
**涵盖 11 个模块的 48 项检查:**
| 模块 | 检查 ID | 类别 |
|--------|-----------|----------|
| `secrets.py` | SEC-001–007 | 硬编码凭证、API key、token、HTTP basic auth、云元数据端点 (SSRF/IMDS) |
| `supply_chain.py` | SC-001–003, SC-005–007 | 恶意/域名抢注包、GitHub ref 依赖、同形异义名称、registry 覆盖 (Birsan 攻击) |
| `osv_lookup.py` | SC-004 | 通过 OSV.dev 进行实时 CVE 查询 |
| `tool_poisoning.py` | PI-001–005, DX-001 | Prompt 注入、混淆、不可见的 Unicode、bidi 覆盖、数据泄露 |
| `privilege.py` | PE-001–008 | 过宽的文件系统、shell、Docker、sudo 权限、权限绕过、路径遍历 |
| `shadow.py` | SH-001–006 | 未注册服务器、HTTP、同形异义、自动发现、未经验证的 SSE |
| `chain_analysis.py` | CHAIN-001–003 | 跨服务器能力链:写入+执行 (RCE)、机密+HTTP (泄露)、放大爆炸半径 |
| `code_execution.py` | EX-001–003 | 内联代码执行、命令替换、PowerShell 编码命令、curl 管道传输 bash |
| `audit.py` | AT-002–004 | 传输配置、网络绑定 (NeighborJack) |
| `lifecycle.py` | LF-001 | Postinstall 脚本滥用 |
| `config_level.py` | CL-001–003, EC-001 | 混淆代理、重复服务器、禁用安全功能、暴露调试日志 |
| `scanner.py` | AT-001, AT-005 | 版本固定审计、服务器数量过多 |
每项发现均包含:严重程度、OWASP MCP Top 10 类别、CWE ID、MITRE ATT&CK 战术以及修复指南。
## 输出格式
| 格式 | 适用场景 |
|--------|----------|
| **JSON** | CI/CD 集成、程序化处理 |
| **SARIF 2.1.0** | GitHub Security 标签页(作为代码扫描告警上传) |
| **CycloneDX 1.6 AI-BOM** | 供应链合规性、SBOM 工作流 |
## API 端点
```
POST /scan → JSON report
POST /scan/sarif → SARIF 2.1.0
POST /scan/bom → CycloneDX 1.6 AI-BOM
```
**请求体:**
```
{ "config": "{ \"mcpServers\": { ... } }" }
```
**响应示例:**
```
{
"scan_id": "abc123",
"summary": {
"total": 4,
"critical": 1,
"high": 2,
"medium": 1,
"risk_score": 47,
"risk_grade": "C",
"owasp_coverage": ["MCP01", "MCP04", "MCP09"]
},
"findings": [
{
"check_id": "SEC-001",
"title": "AWS Access Key ID hardcoded in `AWS_ACCESS_KEY_ID`",
"severity": "critical",
"owasp": "MCP01",
"cwe_id": "CWE-798",
"remediation": "..."
}
]
}
```
## 架构
```
apps/web/ Next.js 15 frontend (minimal scan UI)
apps/api/ FastAPI backend
main.py API entrypoint
engine/
parser.py JSONC-aware config parser (Claude Desktop + Cursor formats)
scanner.py Scan orchestrator + config-level checks
models.py Pydantic models (Finding, ScanResult, ScanSummary)
sarif.py SARIF 2.1.0 formatter (with CWE + ATT&CK)
cyclonedx.py CycloneDX 1.6 AI-BOM formatter
checks/ 41 check implementations
tests/ 283 tests (unit + property-based + real-world corpus)
packages/cli/ Go CLI binary (planned — Stage 2)
```
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 前端 | Next.js 15 + App Router + Tailwind |
| 后端 | FastAPI (Python 3.12) + Pydantic v2 |
| CVE 数据 | OSV.dev API(由 Google 维护,无需 API key) |
| SARIF | 2.1.0 规范 — 兼容 GitHub Security 标签页 |
| AI-BOM | CycloneDX 1.6 |
## 在本地运行
```
# API
cd apps/api
python -m venv .venv
.venv/Scripts/pip install -r requirements-dev.txt
uvicorn main:app --reload --port 8000
# Tests
.venv/Scripts/pytest tests/ -v # 283 tests
# Frontend
cd apps/web
npm install && npm run dev # → http://localhost:3000
```
## OWASP MCP Top 10 覆盖范围
涵盖全部 10 个类别:
| 类别 | 描述 | 检查项 |
|----------|-------------|--------|
| MCP01 | Token 管理不当与机密泄露 | SEC-001–007, EC-001 |
| MCP02 | 通过范围蔓延进行提权 | PE-001–007, CL-001 |
| MCP03 | 工具投毒 (Tool Poisoning) | PI-001–004, DX-001, SH-004, CL-002 |
| MCP04 | 供应链攻击 | SC-001–007, LF-001 |
| MCP05 | 命令注入与执行 | EX-001–002, PE-005 |
| MCP06 | 通过上下文 Payload 进行 Prompt 注入 | PI-002 |
| MCP07 | 认证不足 | SH-002, SH-006, CL-003 |
| MCP08 | 缺乏审计与遥测 | AT-001–005 |
| MCP09 | 影子 (Shadow) MCP 服务器 | SH-001, SH-003, SH-005 |
| MCP10 | 上下文注入与过度共享 | PE-004 |
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:AI安全, Chat Copilot, MCP, StruQ, 文档安全, 日志审计, 逆向工具