MCP安全窃听器
](https://www.npmjs.com/package/mcp-security-linter) ](https://www.npmjs.com/package/mcp-security-linter) 
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。
特性
目前已实施
- 危险指令执行检测
- 技术:递归Taint分析 - 发现:通过Node.js进程API进行命令注入, eval, new Function, vm.runInContext, execa,以及 $ 模板标记来自 zx. - 能力:跟踪不受信任的输入(process.env,MCP参数,函数参数)通过变量赋值、别名、字符串连接和模板文字。 - 安全:忽略安全的硬编码命令(例如。, exec('ls -la')).
- 令牌通过检测
- 技术:迭代污染分析(定点) - 发现:传递给日志记录功能或外部网络请求的敏感数据(API密钥、机密)。 - 能力:通过复杂的数据流跟踪秘密,包括对象/数组包装和三元运算符。 - 范围:尊重变量范围和阴影。
- 未经身份验证的端点检测
- 技术:中间件堆栈模拟 - 发现:API端点在没有身份验证中间件的情况下暴露。 - 能力:理解 app.use() 顺序、路由器安装层次结构和特定于路由的中间件。
计划分析仪
计划对未来的版本进行以下检查:
- OAuth卫生检查器
- *目标*:确保正确处理OAuth令牌和作用域。
- 参数验证
- *目标*:使用前验证所有用户输入是否经过验证。
______________________________________________________________________
安装
来自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 configCLI退出并显示状态代码 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计算(顾问)
许可证
麻省理工学院-参见 许可证 详细信息文件
