Caloogy 文章
English

Agent 供应链:插件、技能、MCP 服务器的来源审查

日期
2025 年 5 月 2 日
系列
Agent 沙箱
阅读
4 分钟
主题
AiAgentSupply chainMcp

一句话版本

一个 AI Agent 的能力越来越多地来自"装上去"的东西:MCP 服务器、插件、技能包、提示词模板、自定义指令文件。它们和浏览器扩展、npm 包一样,属于软件供应链,而且更危险:它们不仅能运行代码,还能通过自然语言直接影响模型的决策。 浏览器扩展和软件包生态踩过的坑(冒名、被收购后作恶、恶意更新、依赖混淆),AI Agent 生态正在一个个重新踩一遍。对策也相同:来源审查、版本锁定、最小权限、沙箱运行、变更审查。

全文分三层:

  1. 通俗理解:给实习生的工具箱里混进了别人的东西
  2. 实际用处:从 npm、浏览器扩展的历史看 Agent 生态
  3. 原理与工程要点:几种供应链组件、各自的风险、审查清单

第一层:通俗理解

1.1 工具箱里混进了别人的东西

你给实习生(Agent)配了一个工具箱,里面的工具来自很多地方:官方的、开源社区的、朋友推荐的、网上随手下载的。

问题是:

1.2 和传统软件供应链的不同

传统软件包 Agent 组件(MCP、插件、技能)
能做什么 运行代码 运行代码 + 用自然语言影响模型的决策
审查方式 读代码、静态分析 读代码 + 读描述和提示词(人容易忽略)
生态成熟度 有签名、锁文件、漏洞数据库 仍在建设中

第二层:实际用处

从历史里学:

历史事件 对 Agent 生态的启示
event-stream(2018):一个流行 npm 包的维护者把维护权交给陌生人,新维护者加入了专门窃取某个比特币钱包的代码(见《依赖投毒》) 维护权变更是高危信号
浏览器扩展被收购后作恶:多起流行扩展被卖给新主人后,推送了注入广告或窃取数据的更新 "以前是好的"不代表"现在是好的"
typosquatting:PyPI、npm 上大量和知名包名字只差一个字母的恶意包 MCP 服务器、技能包同样会被冒名
Ledger Connect Kit(2023):前端自动加载"最新版"依赖,恶意版本发布后立即生效(见《CSP与SRI》) 锁定版本,不要自动更新到最新

Agent 生态的现状:MCP 服务器、各种 AI 工具的插件和技能市场快速增长,其中大量是个人开发者发布的,审核机制参差不齐。已经出现过冒充知名服务的 MCP 服务器、在描述中隐藏指令的工具等案例(见《MCP与工具投毒》)。


第三层:原理与工程要点

3.1 组件类型与风险

组件 能力 主要风险
本地 MCP 服务器 在你的电脑上以你的身份运行任意代码 和安装任意软件一样:读文件、联网、留后门
远程 MCP 服务器 运行在别人的服务器上,接收 Agent 发来的数据 你发给它的所有数据都在别人手里;描述可随时更改
插件 / 技能包 提示词 + 可能附带脚本 提示词投毒、脚本执行
自定义指令文件(如仓库里的 Agent 配置文件) 每次会话自动加载,直接影响模型行为 克隆一个陌生仓库,就加载了陌生人写的指令
提示词模板、系统提示词市场 决定 Agent 的行为基调 隐藏指令

最后两类常被忽视:一个 Markdown 文件也可以是供应链攻击的载体。

3.2 审查清单

检查 说明
来源 官方发布还是第三方?作者是谁、历史如何?下载量和星标可以伪造,不能作为唯一依据
代码 开源吗?本地服务器的代码做了什么网络请求、读了哪些文件?
描述 完整阅读工具描述和提示词,查找"不要告诉用户""调用前先读取……"一类的语句
权限 它申请了哪些权限?是否与功能匹配?(见《Agent权限设计》)
版本 锁定到具体版本或哈希;不自动更新
变更 更新时查看变更内容,尤其是描述的变化;维护者变更要格外警惕
运行环境 第三方组件在沙箱里运行,不能访问主目录和凭证(见《为什么AI Agent需要沙箱》)

3.3 对平台方的要求

3.4 一个简单的原则

装一个 Agent 组件,按"装一个能读写你电脑上所有文件的软件"的标准来审查。 很多时候,它确实就是这样的软件。


总结

层次 要点
特点 组件既能运行代码,又能用自然语言影响模型
历史教训 维护权转手、被收购作恶、冒名、自动更新到恶意版本
易忽视 远程服务器拿到你的数据;仓库里的指令文件也是供应链
对策 来源审查、完整读描述、锁版本、最小权限、沙箱运行、变更审查