夜雨聆风学习资料网

ARTICLE · 1118313

只要一个插件,你的 AI 就能被接管

只要一个插件,你的 AI 就能被接管

昨天看到一份安全报告,后背有点凉。

9月17日,AIR Security 的三个研究员发了个东西,名字叫 Plugin4Shell。报告标题说得很直白:四个最主流的 AI 编程智能体——Claude Code、OpenAI Codex、GitHub Copilot、Gemini CLI——全部中枪,一个零点击远程代码执行漏洞,全军覆没。

零点击是什么意思?就是你什么都不用干。不用点链接,不用弹窗点"同意",甚至不用打开终端。你只需要干过一件事:装过一个插件。剩下的,交给某个平平无奇的周二下午——你的智能体在后台自动更新插件,恶意代码就悄悄替换了原本审查过的代码。你毫不知情。

漏洞的根子不在 AI 模型,在一个更底层、也更让人无语的地方:Git 自己。

先说说插件市场是怎么保证安全的。有个机制叫 SHA-pinning,可以理解成一把哈希锁。插件某个版本的代码审查通过后,市场把这个版本的 commit 哈希值(40 个字符)固定下来。你安装时,智能体执行 git checkout,代码就锁死在审过的那个版本上。npm、PyPI 用这套思路用了很多年,一直没啥问题。

坑出在 Git 的一个"潜规则"上:你 checkout 一个哈希值时,Git 会先看看——有没有哪个分支,名字恰好就是这个哈希?如果有,它会优先把你导到那个分支去,而不是你要的那个 commit。

所以攻击者只要控制了插件仓库,干一件事:建一个分支,名字就是那 40 个字符的哈希,内容指向恶意代码。智能体执行 checkout,Git 乐呵呵地解析到了攻击者的分支,然后智能体看到"checkout 成功",高高兴兴地汇报:已安装经过审查的代码。

说白了,这套机制验证的是"你请求了什么",而不是"你实际拿到了什么"。中间那道缝,就是 Plugin4Shell 钻进来的地方。

最有意思的是后面这个细节。

四个智能体,四个团队,代码库互不共享,各自独立开发——结果在同一个地方摔了同一个跟头:都默认 git checkout就一定返回那个 SHA 的代码。

这事真的不难。不是什么高深密码学,不需要什么高级利用技巧,就是 Git 文档里白纸黑字写着的引用解析规则,大多数人没意识到它能被这么用。连做 AI 编程工具的团队都栽在这上面。

更糟的是,传统包管理器还没这个风险。npm 安装的是打好的包,不直接碰 Git 仓库;而 AI 智能体的插件市场是从 GitHub 这类平台直接拉代码的,等于把 Git 引用解析的歧义完完整整暴露给了攻击者。

再说回"零点击"。这个词容易吓人,其实不是谁都能隔空黑你。前提是攻击者得先控制插件仓库。能做到这一点的,要么是接管了仓库的黑客,要么是作者本人突然想作恶——别忘了,市场的审查通常只管第一版,后续更新基本没人再看。而 AIR Security 之前那项叫 SkillJacking 的研究已经证明,这种接管是真能大规模发生的:他们找到 925 个被接管的 skill,波及 13.4 万个智能体。

所以真正危险的是这个组合:仓库被接管 + 后台自动更新。Claude Code 和 Codex 默认就开着插件自动后台更新。审查松、更新勤、哈希锁还形同虚设——链条一环一环,全对上号了。

四个厂商的反应,也挺值得品味的。

Anthropic 最麻利,6 月就修好了 Claude Code(2.1.179 版本),比公开披露早三个月。OpenAI 8 月 12 日修好了 Codex(0.146.0)。Microsoft 呢,6 月就收到了报告,到 9 月 21 日——没补丁,没 CVE 编号,没动静。Google 的操作最绝:Gemini CLI 直接宣布退役,不修,建议用户搬家去新产品 Antigravity CLI。

你品品这个差异。前两家把它当 bug 修,后两家把它当产品决策:微软在拖,谷歌干脆摆烂——反正产品要停了,修它干嘛?

但用户怎么办?还在用 Gemini CLI 的人,机器上永远背着一个修不掉的洞。用 Copilot 的人,只能干等微软,或者自己动手把插件自动更新关掉。

AIR Security 的研究员给的药方其实很简单:checkout 之后加一步验证,看看实际落盘的 HEAD 是不是当初 pin 住的那个 SHA,对不上就中止安装。就两行代码的事。

两行代码。四个团队,几个月,一个退役的产品——根源都是这两行没写。

再往深说一句。AI 编程智能体跑在你的开发机上,文件系统随便读、环境变量随便看、进程随便建、网络随便连。一个被污染的插件,能拿到你的源码、你的 API key、你的云凭证。这类工具现在处理的,恰恰是企业里最敏感的代码和数据。可给它们守门的安全基础设施,还在搭脚手架的阶段。

当然,也别被"零点击"三个字唬住——前提是攻击者得先拿到仓库,这个门槛拦住了大量随机攻击。但这个漏洞真正照出来的问题是:我们给 AI 智能体装插件时的那份信任,其实没什么东西在兜底。

所以,下次给你的 AI 智能体装插件之前,花十秒钟看三样东西:这个仓库谁在维护?更了几次?最后一次有人审查是什么时候?

以前觉得这些问题啰嗦。Plugin4Shell 之后,这可能是你唯一能自己做的防御了。

相关学习资料