安全漏洞检测工具

MCP-SecLint是一款用于检测Model Context Protocol(MCP)服务器实现中安全漏洞的静态分析工具,支持JavaScript和TypeScript。

  • by actions-marketplace-validations
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 actions-marketplace-validations/fonCki_mcp-security-linter

使用说明

MCP安全窃听器

MCP SecLint是一个静态分析工具,用于检测模型上下文协议(MCP)服务器实现中的安全漏洞。

概述

MCP SecLint使用静态分析技术(包括污染跟踪和中间件模式匹配)检测JavaScript和TypeScript MCP服务器实现中的安全漏洞。检测规则针对MCP安全研究中确定的漏洞模式和官方 MCP安全最佳实践.

纸张再现性

IWSPA 2026论文评估了MCP SecLint版本 v1.4.2。要复制用于论文生态系统扫描的精确工件,请运行:

npx mcp-security-linter@1.4.2 .

完整的生态系统分析表见 docs/生态系统分析结果.md.电流 master 可能包括纸后维护修复,因此请使用标记 v1.4.2 在复制纸张结果时释放。

解析器架构

该论文(第4.3节,图2,参考文献[20])描述了基于 橡子 解析器,第7.3节中有一个明显的限制,即复杂的TypeScript文件可能无法通过AST解析。自 v1.6.0 此后,这被实现为保留原始JS管道的混合体:

  • .js, .cjs, .mjs 文件解析如下 橡子,与论文中记录的架构相匹配。
  • .ts, .tsx, .mts, .cts,以及 .jsx 文件解析如下 @typescript-eslint/typescript-estree,它关闭了§7.3的限制,同时保持JS路径不变。

两个解析器都发射出一个共享步行者穿过的ESTree形状的AST。

特性

目前已实施

  1. 危险指令执行检测

    • 技术:递归Taint分析
    • 发现:通过Node.js进程API进行命令注入, eval, new Function, vm.runInContext, execa,以及 $ 模板标记来自 zx.
    • 能力:跟踪不受信任的输入(process.env,MCP参数,函数参数)通过变量赋值、别名、字符串连接和模板文字。
    • 安全:忽略安全的硬编码命令(例如。, exec('ls -la')).
  2. 令牌通过检测

    • 技术:迭代污染分析(定点)
    • 发现:传递给日志记录功能或外部网络请求的敏感数据(API密钥、机密)。
    • 能力:通过复杂的数据流跟踪秘密,包括对象/数组包装和三元运算符。
    • 范围:尊重变量范围和阴影。
  3. 未经身份验证的端点检测

    • 技术:中间件堆栈模拟
    • 发现:API端点在没有身份验证中间件的情况下暴露。
    • 能力:理解 app.use() 顺序、路由器安装层次结构和特定于路由的中间件。

计划分析仪

计划对未来的版本进行以下检查:

  1. OAuth卫生检查器
    • 目标:确保正确处理OAuth令牌和作用域。
  2. 参数验证
    • 目标:使用前验证所有用户输入是否经过验证。

安装

来自NPM(推荐)

全局安装以在任何地方使用CLI:

npm install -g mcp-security-linter

或者将其作为开发依赖项添加到您的项目中:

npm install --save-dev mcp-security-linter

然后运行:

mcp-lint .                              # Scan current directory
mcp-lint src/ --format json             # Scan src/ with JSON output
mcp-lint --config custom-config.json    # Use custom config

作为GitHub行动

步骤1:创建工作流目录

在您的存储库中,创建目录结构(如果不存在):

mkdir -p .github/workflows

步骤2:创建工作流文件

创建一个新文件 .github/workflows/mcp-security.yml (你可以给它起任何以结尾的名字 .yml):

name: MCP-SecLint Security Check

on: [push, pull_request]

jobs:
  security-lint:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      security-events: write   # required to upload SARIF to GitHub Code Scanning
    steps:
      - uses: actions/checkout@v4
      - uses: fonCki/mcp-security-linter@v1.6.0
        id: lint
        with:
          path: '.'
          fail-on-warnings: true
      - name: Upload SARIF
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: ${{ steps.lint.outputs.sarif-file }}
          category: mcp-security

备注:SARIF上传到GitHub代码扫描需要公共存储库或在私有存储库上启用GitHub高级安全。没有它,操作仍然会运行并将结果作为工作流注释报告,但SARIF上传步骤将失败。

第三步:承诺并推动

git add .github/workflows/mcp-security.yml
git commit -m "Add MCP-SecLint security workflow"
git push

现在,该操作将在每次推送和拉取请求时自动运行!

对于贡献者

如果你想为发展做出贡献:

git clone https://github.com/fonCki/mcp-security-linter.git
cd mcp-security-linter
npm install

需要Node.js 20.19.0或更高版本。

看 贡献.md 发展指南。

用法

命令行界面

# From the project directory
node src/cli.js                           # Analyze current directory
node src/cli.js src/                      # Analyze specific path
node src/cli.js --format sarif --output results.sarif  # SARIF output
node src/cli.js --config .mcp-lint.json   # Use custom config

CLI退出并显示状态代码 1 当发现存在时,无论输出格式如何。

配置

v1.1.0版本+ 引入了高级配置选项。看 配置.md 完整的指南。

创建 .mcp-lint.json (可选):

{
  "command-exec": {
    "enabled": true,
    "severity": "error"
  },
  "token-passthrough": {
    "enabled": true,
    "severity": "warning"
  }
}

高级配置(v1.1.0+):

  • 自定义JavaScript/TypeScript文件扩展名
  • 自定义测试模式
  • 自定义排除模式
  • 分析仪特定的覆盖

看 配置.md 例如示例和详细文档。

发展

# Install dependencies
npm install

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

团队

该项目是DTU 02234课程“网络安全研究课题”的一部分。

有关详细的团队信息、贡献和联系方式,请参阅 TEAM.md.

团队成员:

  • 梅丽莎·萨法里(s224818)——DTU计算
  • 康(e1122217)-新加坡国立大学
  • 阿方索·佩德罗·里多(243942)——DTU计算机
  • 尼古拉·德拉戈尼——DTU计算(顾问)

许可证

麻省理工学院-参见 许可证 详细信息文件