30个 CVE 持续增加:无人谈论的 MCP 安全危机
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 | ~10 | SDK 级别漏洞出现,跨实现问题 |
| 2026 Q1(截至目前) | ~15 | 加速阶段 – CVE‑2026‑27896(Go SDK 绕过),服务器认证失败 |
| 总计 | 30 | 覆盖全部 3 层 |
所有 MCP 漏洞中有一半是在最近三个月发布的。
实际影响
- > 33 % 的 MCP 服务器在实际环境中接受任何连接,而不验证客户端的身份。
- 后果:
- 任何 AI 代理 只要发现该端点即可连接。
- 所有工具调用(包括破坏性写操作)都会被接受。
- 没有审计日志 记录谁调用了什么。
- 提示注入 在一个代理中可能转移到未认证的 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 绕过)
-
攻击者负载 – 大小写混合的字段名:
{"Method": "tools/call", "Params": {"name": "transfer_funds"}} -
为何能够通过 – 验证仅检查
"method"(全小写),因此检查失败。 -
Go SDK 行为 –
encoding/json对大小写不敏感,SDK 仍然能够解析该请求。 -
结果 – 工具调用在 MCP 服务器授予的权限范围内执行。
-
缓解措施 – 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 生态系统。