安全扫描工具

一款开源的安全扫描工具,用于检测MCP服务器的沙盒、代码执行、依赖和供应链风险,支持多种编程语言且无需外部依赖。

  • by Compuute
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 Compuute/compuute-scan

使用说明

复合 扫描

MCP服务器的开源安全扫描程序。使用官方MCP SDK检测所有语言的沙盒、代码执行、依赖关系和供应链风险:TypeScript、JavaScript、Python、Go、Rust、C#、Java和Kotlin。零依赖。

v0.6.2--现在使用。NET、Java和Kotlin支持。 与该官员一同获释 微软MCP C#SDK v1.0 (2026年3月)和官方Java/Spring MCP SDK。第一个使用官方MCP SDK覆盖所有语言的安全扫描程序。


它的作用

compuute-scan 在部署之前分析MCP(模型上下文协议)服务器源代码的安全漏洞。它完全离线运行,不需要API密钥,并涵盖 L0发现, L1喷砂,以及 依赖级别风险 --每个MCP服务器所需的基础安全层。

通过官方MCP SDK支持每种语言: TypeScript、JavaScript、Python、Go、Rust、C#、Java和Kotlin。符合MCP 2025-11-25规范,与官方Microsoft C#SDK、Java/Spring SDK和社区TypeScript/Python/Go/Rust SDK兼容。

快速开始

npx compuute-scan ./path/to/mcp-server

或者使用Docker隔离(建议用于客户端代码):

git clone https://github.com/Compuute/compuute-scan.git
cd compuute-scan
docker compose build
./scan.sh clone https://github.com/org/mcp-server.git
./scan.sh run mcp-server --output audit-report.md

安装

# npm (global)
npm install -g compuute-scan

# npx (no install)
npx compuute-scan ./mcp-server

# Docker (isolated scanning)
git clone https://github.com/Compuute/compuute-scan.git
cd compuute-scan
docker compose build

要求: Node.js 18+。不 npm install 需要——零外部依赖。

它扫描什么

VIGIL安全层

图层 焦点 可用性
10个 发现——传输检测、工具清单、依赖关系固定 开源
L1级 沙盒-- eval(), exec.Command, pickle.loads,路径遍历,CORS,SSL旁路 开源
二级 授权——RBAC、机密、JWT、PII/GDPR、加密 计算机专业审计
三级 工具完整性——SSRF、SQL注入、快速注入、供应链 计算机专业审计
L4 监控——审计日志记录、速率限制、错误泄漏、ReDoS 计算机专业审计

开源规则(L0+L1)

每个文件37条规则+2条否定规则+3项依赖性检查 涵盖代码执行、沙盒、发现和供应链:

类别 示例
代码执行 eval(), exec.Command, pickle.loads, yaml.load, Runtime.exec, Process.Start
反序列化 BinaryFormatter, ObjectInputStream, SoapFormatter --禁止。NET和Java接收器
路径遍历 未初始化的文件路径,丢失 realpath() 检查
CORS配置错误 通配符起源于Express、Starlette、rs/cors、ASP。NET核心 AllowAnyOrigin,春天 @CrossOrigin
SSL/TLS旁路 verify=False, rejectUnauthorized: false, InsecureSkipVerify, danger_accept_invalid_certs
SQL注入 Python f-string,Go fmt.Sprintf,生锈 format!()C SqlCommand,Java JDBC字符串连接
命令注入 在所有8种语言中使用不受信任的输入执行Shell
认证旁路 C [AllowAnonymous],春天 permitAll() 关于敏感端点
内存安全 生锈 unsafe {} 块,缺失 #[deny(unsafe_code)]
不安全随机 Math.random(), random.choices(), rand.Intn() 用于安全上下文
模板注入 去吧 text/template 用于HTML输出
安全标头 头盔/安全头中间件缺失
已知CVE(离线) 40多个顶级npm/PyPI/Go包,包含精心策划的易受攻击版本范围
依赖年龄 在当前版本之后打包两个或多个主要版本
许可证合规性 Copyleft许可证(GPL、AGPL、LGPL、SSPL) node_modules
发现 运输检测、工具库存、跨8个包管理器的依赖性锁定

语言特定规则

语言 MCP SDK状态 密钥检测
Types/JS 官方(人物) eval, child_processCORS、npm钩子、未固定的git deps
python 官方(人物) pickle、YAML不安全加载、f-string SQL、Starlette CORS、, verify=False
围棋 官方 exec.Command+sh, fmt.Sprintf SQL, InsecureSkipVerify, text/template XSS, rs/cors
锈 官方 unsafe {}, Command::new + format!,SQL通过 format!, danger_accept_invalid_certs
C网 官方(微软,2026年3月) Process.Start, SqlCommand 海螺, [AllowAnonymous], BinaryFormatter, AllowAnyOrigin
Java 官方(Spring/Java) Runtime.execJDBC连接, ObjectInputStream,春天 permitAll, @CrossOrigin(*)
科特林 通过Java SDK 与Java相同——JDBC、ObjectInputStream、Spring安全

解析的依赖关系文件

package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml, .csproj, pom.xml, build.gradle, build.gradle.kts.

警卫检测

扫描仪检查 ±15线窗口 围绕缓解模式的每个发现(validatePath(), sanitize(), realpath()等等)。报告中仍有缓解的发现,严重程度降低了一级——没有什么隐藏的,但噪音减少了。

负面检查

检测 缺席 整个代码库的安全控制:没有输入验证(zod/pydantic),没有安全头(helm)。仅靠模式匹配无法捕捉到的架构风险。

全面安全评估

开源扫描程序涵盖了基础的L0-L1风险和依赖性级别检查。生产MCP部署,特别是那些受NIS2、DORA或GDPR约束的部署,需要通过跨文件污染跟踪和合规性证据进行更深入的分析:

层 你得到什么 分析
L2授权 RBAC、秘密管理、JWT/OAuth、PII/GDPR合规性、弱加密 知识图驱动
L3工具完整性 SSRF、注射、即时中毒、反应中的PII、供应链 毒物跟踪
L4运行时监控 审计日志记录、速率限制、错误泄漏、ReDoS 跨文件行为

OWASP Top 10(10/10)。NIS2第21条(7/7)。GDPR(6/6)。多拉(4/7)。 开源层标识。审计层跟踪攻击路径,生成可归档的合规性证据,并根据可达性(而不仅仅是存在性)进行优先级排序。

预订计算专业审计 --完整的L0-L4评估,包括OWASP、NIS2、GDPR和DORA的合规性映射。

Docker隔离扫描

对于客户参与, scan.sh 提供了一个强化的工作流程,扫描的代码永远不会接触到主机文件系统:

┌──────────────┐         ┌──────────────────────┐
│  clone       │         │  scan                │
│  (git only)  │────────▶│  --network none      │
│  bridge net  │  volume │  read-only fs        │
└──────────────┘         │  cap_drop ALL        │
                         │  no-new-privileges   │
                         │  512MB / 1 CPU       │
                         └──────────────────────┘
属性 克隆容器 扫描容器
网络 网桥(仅限git) 无 --零网络堆栈
文件系统 只读+tmpfs 只读
功能 仅限NET_RAW 都掉下来了
用户 非root(scanner) 非根(scanner)
资源 0.5个CPU,256MB 1个CPU,512MB
./scan.sh clone https://github.com/org/mcp-server.git   # Clone to isolated volume
./scan.sh run mcp-server --output audit.md               # Scan — zero network
./scan.sh local ~/code --output local-audit.md           # Scan local dir (mounted :ro)
./scan.sh list                                            # List cloned repos
./scan.sh clean mcp-server                                # Remove client code

CLI选项

compuute-scan <path> [options]

  --output, -o <file>        Write report to file
  --json                     Output as JSON
  --sarif                    Output as SARIF (GitHub Code Scanning)
  --layer <L0-L1>            Filter by VIGIL layer
  --min-severity <level>     Filter: critical, high, medium, low
  --fail-on-severity <level> Exit code 1 if findings >= severity (for CI)
  --verbose                  Show files being scanned
  --help, -h                 Show help

CI集成

# GitHub Actions example
- run: npx compuute-scan ./src --fail-on-severity high --sarif --output results.sarif
- uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: results.sarif

添加规则

从v0.5.0开始,扫描仪按以下模块组织 src/ 并连接成 compuute-scan.js 通过 scripts/build.js。不要编辑顶级 compuute-scan.js 直接生成输出。

规则活在 src/rules-l1.js 作为对象:

{
  id: 'L1-037',
  title: 'Description',
  layer: 'L1',
  severity: 'high',
  owasp: 'A03:2021 Injection',
  nis2: 'Art. 21(2)(e)',
  description: 'What the rule detects',
  recommendation: 'How to fix it',
  test: (line) => /pattern/.test(line),
  guards: [/mitigationPattern/],
}

构建和运行测试:

npm run build      # regenerates compuute-scan.js from src/
npm test           # runs the 231-assertion suite
npm run verify     # runs the supply-chain integrity check

看 更改日志.md 发布历史和 ROADMAP.md 对于计划中的功能。

测试

npm test

该测试套件运行231个断言,涵盖URL验证、评分、凭证编辑、速率限制、内联忽略处理、配置加载、函数边界检测、每个规则的规则模式匹配、依赖CVE/age检查和端到端自扫描。

许可证

麻省理工学院——见 许可证.

联系

公司 AB --代理AI安全 daniel@compuute.se | compuute.cn