OWASP MCP Top 10 解读:面向 Model Context Protocol 的安全风险清单
随着 AI Agent 与外部工具、企业系统和软件供应链深度耦合,MCP(Model Context Protocol) 正在从“方便集成的协议层”变成“必须重点审计的攻击面”。OWASP 最新的 MCP Top 10 项目,正是试图把这层风险系统化地讲清楚。
本文基于 OWASP MCP Top 10 项目页内容整理,面向中文读者提炼其中的核心风险、路线图和落地建议,并排版为适合 Hexo Butterfly 主题阅读的 Markdown 版本。
原始资料:
- OWASP 项目页:https://owasp.org/www-project-mcp-top-10/
- GitHub 仓库:https://github.com/OWASP/www-project-mcp-top-10
当前项目页显示该项目仍处于 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 只当成“模型调用工具的协议”,那很容易低估它的风险。它真正影响的是:模型拿到什么上下文、以什么身份调用什么能力、以及这些行为如何被继承和放大。
一个简化的理解模型
graph LR
A[User / System] --> B[Agent / LLM]
B --> C[MCP Layer]
C --> D[Tools]
C --> E[Memory / Context]
C --> F[Identity / Auth]
C --> G[External Services]
E --> B
D --> B
F --> G
在这个结构里,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
后续按周期持续更新版本。
当前值得注意的两点
- 这是一个 活文档,会随着 MCP 生态和攻击手法变化继续演进。
- 当前页面内容仍有个别表述不完全一致的地方,说明它确实还处在迭代期。
一个明显例子是 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,但根据项目页描述,可以整理出一版适合工程团队快速落地的清单。
- 明确每个 MCP 服务的职责边界,不让“方便测试”的临时能力长期保留。
- 对所有 MCP 连接器、插件、依赖做来源校验与版本跟踪。
- 默认拒绝过宽权限,避免能力范围随时间自然膨胀。
- 为命令执行、代码执行和高危 API 调用加显式策略门禁。
- 把检索内容、用户上传内容、第三方返回内容统一视为不可信输入。
- 区分“系统指令”和“上下文数据”,避免模型把数据误当作命令。
- 控制跨任务、跨用户、跨 Agent 的上下文共享范围。
- 对长期记忆、日志、缓存中的敏感内容做最小化保存。
- 采用短期、可撤销、最小作用域的 Token 与凭据。
- 对 MCP Server、工具、Agent 和调用方都做身份校验与授权检查。
- 建立 MCP 实例台账,识别并清理 Shadow MCP Servers。
- 保留不可篡改的工具调用、上下文变更和关键动作审计日志。
这份 Top 10 透露出的一个趋势
传统应用安全里,我们已经很熟悉这几类问题:
- 凭据泄露
- 权限控制失效
- 供应链污染
- 命令注入
- 审计缺失
MCP Top 10 的价值不在于“发明了全新的风险”,而在于它把这些传统问题重新映射到了 模型上下文协议层:
- Secret 不只是 Secret,还是 Agent 的执行令牌
- Prompt 不只是 Prompt,还是潜在的第二控制平面
- Tool 不只是 Tool,还是影响模型判断的信任来源
- Context 不只是缓存,还是跨任务共享的敏感数据载体
换句话说,MCP 把很多原本分散在“身份系统、插件系统、日志系统、缓存系统”里的安全问题,重新集中到了一个统一交互层里。
这也是为什么 MCP 一旦进入企业内部环境,就不该再被视为一个“AI 接口协议”而已,而应该被当成 新的应用边界与治理边界。
参考来源
- OWASP MCP Top 10 项目页:https://owasp.org/www-project-mcp-top-10/
- OWASP MCP Top 10 GitHub 仓库:https://github.com/OWASP/www-project-mcp-top-10
