30个 CVE 持续增加:无人谈论的 MCP 安全危机

发布: (2026年3月1日 GMT+8 13:31)
10 分钟阅读
原文: Dev.to

Source: Dev.to

概览

MCP模型上下文协议 – 让 AI 代理与外部服务通信。
Anthropic 推出了它,且所有主要 AI 实验室都已采用。目前已有数千个 MCP 服务器将代理连接到数据库、API、金融平台和云基础设施。

⚠️ 已报告 30 起 CVE,且漏洞披露速度在加快。

关键指标

指标
总计 MCP 漏洞30
零身份验证服务器36 %
攻击面层数3
自最新漏洞以来1 天

最近的漏洞 – CVE‑2026‑27896

  • 受影响的组件: 官方 MCP Go SDK
  • 根本原因: JSON 解析器对字段名 不区分大小写
  • 影响:
    • 攻击者可以发送 "Method" 而不是 "method"(或 "PARAMS" 而不是 "params")的响应。
    • SDK 会静默接受这些字段,绕过任何检查精确字段名的验证。
    • 示例:防火墙仅允许 "method": "tools/call",但仍会放行 "Method": "tools/call"

受影响范围?
任何基于 Go 的 MCP 实现——使用官方 Go SDK 构建的服务器或客户端。

缓解措施: 更新到已修补的 SDK 版本,强制 区分大小写 的 JSON 解析。

为什么 MCP 安全性独特地危险

攻击面跨越 三个不同层次。任一层的缺陷都可能危及整个链路。

1️⃣ MCP 服务器

  • 示例:QuickBooks、Stripe、数据库连接器、文件系统桥接。
  • 36 % 的已扫描 MCP 服务器接受 无认证 的连接。

典型攻击向量

  • 未经认证的访问
  • 授权不足(任何客户端都可以调用任何工具)
  • 缺少输入验证
  • 通过工具参数进行 SSRF
  • 通过工具响应进行数据外泄

2️⃣ 协议实现库

  • 官方 TypeScript、Python 和 Go SDK 用于解析 MCP 消息。
  • CVE‑2026‑27896 就出现在此处,还有其他解析错误、序列化不匹配以及类型混淆问题。

典型攻击向量

  • 大小写不敏感的解析绕过(CVE‑2026‑27896)
  • 对畸形消息的处理
  • SDK 实现之间的类型混淆
  • 对不可信数据的反序列化
  • 协议版本不匹配

3️⃣ MCP 客户端运行时

  • 运行 MCP 客户端的机器(笔记本、服务器、AI 代理运行时)。
  • 工具调用在 宿主进程的权限 下执行。

典型攻击向量

  • 工具访问不受限制(无白名单)
  • 通过提示注入进行写操作
  • 通过工具响应泄露敏感数据
  • 通过链式 MCP 服务器进行横向移动
  • 从工具配置中窃取凭证

差距所在: 大多数 MCP 实现此层 没有任何控制——代理决定调用什么,且没有任何验证其合理性。

CVE 时间线

时间段漏洞编号重要亮点
2025 Q1‑Q2~5初始发现 – 认证、SSRF 基础
2025 Q3‑Q4~10SDK 级别漏洞出现,跨实现问题
2026 Q1(截至目前)~15加速阶段 – CVE‑2026‑27896(Go SDK 绕过),服务器认证失败
总计30覆盖全部 3 层

所有 MCP 漏洞中有一半是在最近三个月发布的。

实际影响

  • > 33 % 的 MCP 服务器在实际环境中接受任何连接,而不验证客户端的身份。
  • 后果:
    1. 任何 AI 代理 只要发现该端点即可连接。
    2. 所有工具调用(包括破坏性写操作)都会被接受。
    3. 没有审计日志 记录谁调用了什么。
    4. 提示注入 在一个代理中可能转移到未认证的 MCP 服务器。

对于 金融 MCP 服务器(QuickBooks、Stripe、Xero)来说,这将是灾难性的——受损的代理可以直接在未认证的服务器上调用金融操作。

防御方案 – ClawMoat McpFirewall

McpFirewall 位于 第 3 层(AI 代理与 MCP 服务器之间)。它在每一次工具调用到达服务器之前进行拦截,执行 MCP 本身 不提供 的安全策略。

功能概述

  • 通过匹配 29 种模式(例如 create_add_update_delete_transfer_pay_ 等)阻止 写操作
  • 即使在只读模式下,也会从 MCP 响应中删除敏感字段(如社会安全号码、银行账户号码、API 密钥)。

示例(Node.js)

const { McpFirewall } = require('clawmoat/finance/mcp-firewall');

const firewall = new McpFirewall({
  mode: 'read-only',
  onBlock: (event) => {
    console.log(
      `Blocked ${event.tool} on ${event.server}: ${event.reason}`
    );
  }
});

// Agent tries to create an invoice via MCP
const result = firewall.intercept({
  tool: 'create_invoice',
  args: { amount: 50000, customer: 'Acme Corp' },
  server: 'quickbooks-mcp'
});

// result.blocked === true
// result.reason === "Write operation 'create_invoice' blocked in read-only mode"

写入模式匹配列表(共 29 条)

create_, add_, update_, edit_, modify_, delete_, remove_,
send_, post_, submit_, approve_, void_, cancel_, refund_,
transfer_, pay_, charge_, issue_, record_, close_, batch_,
import_, set_, assign_, link_, unlink_, archive_, restore_, merge_

防火墙配置概览

const firewall = new McpFirewall({
  mode: 'read-only',
  redactFields: ['ssn', 'tax_id', 'bank_account', 'routing_number'],
  redactResponses: true
});

示例 – MCP 响应在脱敏前后

之前之后
{ customer: "Jane", ssn: "123-45-6789", balance: 5000 }{ customer: "Jane", ssn: "***-**-****", balance: 5000 }

工具白名单

不要让代理自行决定哪些工具是安全的。定义一个明确的白名单:

const firewall = new McpFirewall({
  mode: 'read-only',
  allowedTools: ['get_invoices', 'get_profit_loss', 'get_balance_sheet'],
  blockedTools: ['delete_company', 'export_all_data']
});

限流

防止通过快速调用工具进行数据外泄:

const firewall = new McpFirewall({
  mode: 'read-only',
  rateLimit: 10,               // max 10 calls per tool per minute
  allowedTools: ['get_transactions']
});

已识别的金融 MCP 服务器

McpFirewall 包含对 15 个流行金融 MCP 服务器的模式识别:

  • QuickBooks
  • Xero
  • FreshBooks
  • Stripe
  • Plaid
  • Square
  • PayPal
  • Braintree
  • Coinbase
  • Mercury
  • Wise
  • Wave
  • Gusto
  • Rippling
  • Bill.com

攻击场景(Go SDK 绕过)

  1. 攻击者负载 – 大小写混合的字段名:

    {"Method": "tools/call", "Params": {"name": "transfer_funds"}}
  2. 为何能够通过 – 验证仅检查 "method"(全小写),因此检查失败。

  3. Go SDK 行为encoding/json 对大小写不敏感,SDK 仍然能够解析该请求。

  4. 结果 – 工具调用在 MCP 服务器授予的权限范围内执行。

  5. 缓解措施 – McpFirewall 在 SDK 解析之后工作;它检查已解析出的工具名称和参数,无论消息如何被解析,都能阻止未授权的调用。

Immediate Actions

  • 审计 MCP 服务器 – 确保它们需要身份验证。
  • 更新 SDK – 尤其是 Go SDK(参见 CVE‑2026‑27896)。
  • 添加防火墙层 – 切勿让代理未受检查地调用 MCP 工具。
  • 清点 MCP 连接 – 了解您的代理可以访问哪些服务器。
  • 运行安全扫描 – 使用 ClawMoat 的免费扫描器进行快速评估。

为什么安全很重要

MCP 对 AI 代理而言,就像 HTTP 对网页浏览器一样:一种用于连接服务的通用协议。
然而,安全模型是事后才考虑的:

  • Authentication – 可选。
  • Authorization – “交由实现自行决定”。
  • Encryption – 非必需。
  • Tool‑level access control – 没有标准。

30 CVEs 在约 15 个月内 不仅仅是一个数字;它是一种模式。该协议的设计侧重功能,而非安全。

McpFirewall 功能

  • 29 write patterns 检测
  • Field‑level redaction
  • Tool allowlisting
  • Rate limiting
  • Zero dependencies
  • 277 automated tests

它保护 host layer,并补充服务器层和 SDK 层的控制。

入门

npm install clawmoat
  • 在 GitHub 上加星
  • 🔍 免费安全扫描仪

McpFirewall 是开源的(MIT 许可证),位于 clawmoat/finance/mcp-firewall

时间紧迫。立即加强您的 MCP 生态系统。

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...