一句话版本
一个 AI Agent 的能力越来越多地来自"装上去"的东西:MCP 服务器、插件、技能包、提示词模板、自定义指令文件。它们和浏览器扩展、npm 包一样,属于软件供应链,而且更危险:它们不仅能运行代码,还能通过自然语言直接影响模型的决策。 浏览器扩展和软件包生态踩过的坑(冒名、被收购后作恶、恶意更新、依赖混淆),AI Agent 生态正在一个个重新踩一遍。对策也相同:来源审查、版本锁定、最小权限、沙箱运行、变更审查。
全文分三层:
- 通俗理解:给实习生的工具箱里混进了别人的东西
- 实际用处:从 npm、浏览器扩展的历史看 Agent 生态
- 原理与工程要点:几种供应链组件、各自的风险、审查清单
第一层:通俗理解
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 对平台方的要求
- 签名与来源证明:组件发布时签名,客户端验证;
- 权限声明:组件在清单里声明需要哪些权限,客户端在安装时展示并强制执行;
- 描述变更提示:描述一变就重新请求用户批准(见《MCP与工具投毒》);
- 陌生仓库的指令文件:首次在一个仓库里加载其指令文件时提示用户,或在"不信任"模式下不自动加载;
- 集中撤销:发现恶意组件时能够远程标记和禁用。
3.4 一个简单的原则
装一个 Agent 组件,按"装一个能读写你电脑上所有文件的软件"的标准来审查。 很多时候,它确实就是这样的软件。
总结
| 层次 | 要点 |
|---|---|
| 特点 | 组件既能运行代码,又能用自然语言影响模型 |
| 历史教训 | 维护权转手、被收购作恶、冒名、自动更新到恶意版本 |
| 易忽视 | 远程服务器拿到你的数据;仓库里的指令文件也是供应链 |
| 对策 | 来源审查、完整读描述、锁版本、最小权限、沙箱运行、变更审查 |