随着 AI Agent 与外部工具、企业系统和软件供应链深度耦合,MCP(Model Context Protocol) 正在从“方便集成的协议层”变成“必须重点审计的攻击面”。OWASP 最新的 MCP Top 10 项目,正是试图把这层风险系统化地讲清楚。

本文基于 OWASP MCP Top 10 项目页内容整理,面向中文读者提炼其中的核心风险、路线图和落地建议,并排版为适合 Hexo Butterfly 主题阅读的 Markdown 版本。

原始资料:

当前项目页显示该项目仍处于 Beta / v0.1 阶段,文档会继续演进。原文许可为 CC BY-NC-SA 4.0

MCP 为什么值得单独做一个 Top 10

OWASP 对 MCP Top 10 的出发点很明确:当 AI 系统越来越多地接入企业应用、供应链和安全基础设施之后,模型与外界交互的“上下文层”和“执行边界层”必须被单独审视。

项目页强调的核心问题包括:

  • 模型绑定错误(model misbinding)
  • 上下文伪造(context spoofing)
  • 提示状态操纵(prompt-state manipulation)
  • 不安全记忆引用(insecure memory references)
  • 隐蔽通道滥用(covert channel abuse)

这些问题在下面几类场景里会被进一步放大:

  • Agentic AI
  • 模型链式调用
  • 多模态编排
  • 动态角色分配

如果把 MCP 只当成“模型调用工具的协议”,那很容易低估它的风险。它真正影响的是:模型拿到什么上下文、以什么身份调用什么能力、以及这些行为如何被继承和放大。

一个简化的理解模型

在这个结构里,MCP 不只是“连通器”,它同时决定:

  • 上下文如何被装配
  • 权限如何被传播
  • 工具输出是否可信
  • 审计证据是否完整

当前项目状态

从 OWASP 项目页来看,MCP Top 10 还不是一个完全定稿的成熟标准,而是一个正在推进中的安全项目。

路线图

Phase 1 Drafting

起草需求草案,覆盖行业侧的关键问题与安全关注点。

Phase 2 Community Review

将草案公开到仓库,接收社区反馈与修改建议。

Phase 3 Beta Release

发布 Beta 版本并进行试点测试。项目页明确写着:当前就在这个阶段

Phase 4 Final Release

吸收试点和社区反馈,形成最终版。

Phase 5 Continuous Improvement

后续按周期持续更新版本。

当前值得注意的两点

  1. 这是一个 活文档,会随着 MCP 生态和攻击手法变化继续演进。
  2. 当前页面内容仍有个别表述不完全一致的地方,说明它确实还处在迭代期。

一个明显例子是 MCP06:项目总览中写的是 Intent Flow Subversion,而详细页又出现了 Prompt Injection via Contextual Payloads。从语义上看,这两者高度相关,但当前 Beta 文档中的命名尚未完全收敛。


OWASP MCP Top 10 总览

下面这张表基于 OWASP 项目页中的 Top 10 与 Overview 部分整理,转成更适合中文阅读的形式。

编号 风险名称 核心问题 典型后果
MCP01 Token 管理不当与 Secret 暴露 Token、凭据、密钥被硬编码、长周期保存或落入日志与记忆 攻击者获取系统访问权,横向进入连接环境
MCP02 范围蔓延导致的权限提升 临时权限不断扩大,最终超出最初设计边界 仓库修改、系统控制、数据外传
MCP03 Tool Poisoning 工具、插件或工具输出被投毒 模型行为被误导、劫持或偏置
MCP04 供应链攻击与依赖篡改 依赖、连接器、插件被污染 引入后门、改变 Agent 执行逻辑
MCP05 命令注入与执行 Agent 用未校验输入拼接命令、脚本或 API 调用 任意命令执行、系统破坏、数据泄露
MCP06 意图流劫持 / 上下文载荷提示注入 恶意上下文变成“第二指令通道” Agent 偏离用户目标,转而执行攻击者意图
MCP07 认证与授权不足 身份校验和访问控制不严 非授权访问、越权调用与链路劫持
MCP08 缺乏审计与遥测 工具调用、上下文变更和行为日志不完整 事故难调查,异常行为难追踪
MCP09 Shadow MCP Servers 未纳入治理的 MCP 实例在组织内私自运行 默认口令、宽松配置、无审计暴露风险
MCP10 上下文注入与过度共享 共享或持久化上下文作用域不清 任务间、用户间、Agent 间敏感信息泄露

逐项看点

MCP01:Token 管理不当与 Secret 暴露

这类风险本质上和传统 DevSecOps 问题很像,但在 MCP 里更危险,因为泄露的不只是密钥本身,还可能是 模型可持续调用外部能力的通行证

MCP02:范围蔓延导致的权限提升

很多 MCP 服务最初只是为了解决一个局部问题,但权限设计如果只做“先放开、后收敛”,最后很容易演变成 Agent 拥有过宽能力。

MCP03:Tool Poisoning

OWASP 特别强调,这里不仅是工具本体被恶意替换,还包括:

  • 恶意更新
  • Schema 污染
  • 重名 / 影子工具劫持

MCP04:供应链攻击与依赖篡改

MCP 生态天然依赖连接器、插件、开源包和外部组件,所以供应链问题会直接影响 Agent 的执行边界。

MCP05:命令注入与执行

当 Agent 把用户输入、检索文本或第三方数据直接拼进命令、脚本、代码片段或 API 调用里时,传统命令注入问题就在 AI 系统里重新出现了。

MCP06:意图流劫持 / 上下文载荷提示注入

这一项是当前页面里最值得留意的地方。项目页上方的总览写的是 Intent Flow Subversion,而独立条目页使用的是 Prompt Injection via Contextual Payloads。两者都指向同一个核心现象:

当检索得到的上下文被模型视为“可执行指令”而不是“不可信数据”时,攻击者就能借上下文把 Agent 的行为从用户目标劫持到攻击目标。

MCP07:认证与授权不足

MCP 环境通常涉及多个 Agent、用户、服务和工具实例,身份校验一旦做得含糊,风险不会停留在单点,而会沿整条交互链扩散。

MCP08:缺乏审计与遥测

没有充分日志,就很难回答这些问题:

  • 是谁触发了工具调用
  • 上下文在什么时候被修改
  • 模型基于什么数据做出了某个动作

MCP09:Shadow MCP Servers

这是一个很贴近企业实际的问题。很多时候并不是“黑客先打进来”,而是内部研发、实验团队或个人为了图方便,自己起了一个没人治理的 MCP 服务。

MCP10:上下文注入与过度共享

MCP 把“上下文”变成一等公民之后,另一个风险就出现了:为了提高协作效率,团队可能会共享上下文窗口、持久记忆或中间结果,但边界一旦模糊,敏感数据就会跨任务泄露。


从工程视角看,这 10 项其实在收敛为 4 类问题

为了让博客读者更快建立整体感,可以把这 10 项风险再压缩成 4 个工程主题。

工程主题 对应风险 核心问题
身份与权限 MCP01、MCP02、MCP07 凭据暴露、权限膨胀、访问控制失效
上下文与指令 MCP06、MCP10 不可信上下文被当作可信指令,或被错误共享
工具与供应链 MCP03、MCP04、MCP05 工具、依赖与执行链被投毒、篡改或注入
可观测性与治理 MCP08、MCP09 没有日志、没有台账、没有统一治理边界

这个归纳很有用,因为它提醒我们:MCP Top 10 虽然列了 10 条,但落地治理时不一定要做 10 套方案,而是要围绕 权限、上下文、供应链、治理 四个面来建立控制点。


一个实用版安全检查清单

OWASP 页面本身没有像 AST10 那样给出非常细的 checklist,但根据项目页描述,可以整理出一版适合工程团队快速落地的清单。

  1. 明确每个 MCP 服务的职责边界,不让“方便测试”的临时能力长期保留。
  2. 对所有 MCP 连接器、插件、依赖做来源校验与版本跟踪。
  3. 默认拒绝过宽权限,避免能力范围随时间自然膨胀。
  4. 为命令执行、代码执行和高危 API 调用加显式策略门禁。
  1. 把检索内容、用户上传内容、第三方返回内容统一视为不可信输入。
  2. 区分“系统指令”和“上下文数据”,避免模型把数据误当作命令。
  3. 控制跨任务、跨用户、跨 Agent 的上下文共享范围。
  4. 对长期记忆、日志、缓存中的敏感内容做最小化保存。
  1. 采用短期、可撤销、最小作用域的 Token 与凭据。
  2. 对 MCP Server、工具、Agent 和调用方都做身份校验与授权检查。
  3. 建立 MCP 实例台账,识别并清理 Shadow MCP Servers。
  4. 保留不可篡改的工具调用、上下文变更和关键动作审计日志。

这份 Top 10 透露出的一个趋势

传统应用安全里,我们已经很熟悉这几类问题:

  • 凭据泄露
  • 权限控制失效
  • 供应链污染
  • 命令注入
  • 审计缺失

MCP Top 10 的价值不在于“发明了全新的风险”,而在于它把这些传统问题重新映射到了 模型上下文协议层

  • Secret 不只是 Secret,还是 Agent 的执行令牌
  • Prompt 不只是 Prompt,还是潜在的第二控制平面
  • Tool 不只是 Tool,还是影响模型判断的信任来源
  • Context 不只是缓存,还是跨任务共享的敏感数据载体

换句话说,MCP 把很多原本分散在“身份系统、插件系统、日志系统、缓存系统”里的安全问题,重新集中到了一个统一交互层里。

这也是为什么 MCP 一旦进入企业内部环境,就不该再被视为一个“AI 接口协议”而已,而应该被当成 新的应用边界与治理边界


参考来源

  1. OWASP MCP Top 10 项目页:https://owasp.org/www-project-mcp-top-10/
  2. OWASP MCP Top 10 GitHub 仓库:https://github.com/OWASP/www-project-mcp-top-10