夜雨聆风学习资料网

ARTICLE · 1093202

26000个AI助手被一个插件悄悄放倒,这事比你想的严重

26000个AI助手被一个插件悄悄放倒,这事比你想的严重

你什么都没干。没点链接,没下文件,没批准任何更新。但你电脑里的AI编程助手,已经在后台悄悄换了一身"衣服"。

今年5月,安全团队Air Security发现了一个漏洞,影响范围覆盖Claude Code、OpenAI Codex、GitHub Copilot和Google Gemini CLI——市面上最主流的四个AI编程助手,一个没跑掉。他们给它起了个名字:Plugin4Shell。

先说结果:一个恶意插件,在被打掉之前,已经扩散到了超过26000个AI助手上。另一场叫SkillJacking的攻击,直接劫持了925个正在被使用的插件,影响134000个助手。

这不是演习。这是带护栏的研究环境里跑出来的真实数字。

问题出在一个你以为很安全的地方

所有AI编程助手的插件市场,都用同一个办法保证安全:把插件锁定到某个具体的代码版本,用一串40位的字符标记。理论上,你批准了这串字符,以后每次跑的就是同一份代码。

这招不新鲜。Docker用它,Go语言也用它。听起来很靠谱对吧?

问题在于,助手们根本没有验证拉下来的代码到底对不对。

它们调用了一个叫git checkout的命令,让系统去拉取那串字符对应的代码。但Git有个隐藏规则:如果仓库里存在一个分支,名字恰好跟那串字符长得像,Git会优先拉那个分支,而不是你锁定的那个版本。

攻击者要做的,就是在自己的插件仓库里建一个名字等于那串字符的分支。Git一看,哎这个名字匹配,就拉了这个分支。分支里装的是什么?攻击者的代码。

然后你的AI助手就开开心心地执行了。

你以为你锁的是版本,其实你锁的是一个名字。

最骚的操作:你根本不用做任何事

Claude Code和Codex默认开启插件自动更新。后台静默运行,不弹窗,不询问。

插件市场一更新那串锁定字符,恶意代码就自动推送到所有已经装了插件的助手上。零点击,后台,无声无息。

你三个月前装的一个插件,每天用得好好的,突然某一天它的仓库被人改了。你的助手自动拉取新版本,自动执行。你甚至不知道它更新过。

更狠的是SkillJacking。攻击者没有新建插件,而是直接改了925个已经在用的、被信任的插件。134000个助手在毫不知情的情况下,跑上了别人的代码。

这就像你每天去的那家早餐店,某天早上老板换了人,但招牌没变,你还是照常进去吃了。

四家公司的反应,比漏洞本身还精彩

漏洞曝光后,四家公司的应对方式,基本能看出谁把AI编程助手当正经产品做,谁只是当个功能凑数。

Anthropic:几周内修复。Claude Code v2.1.179版本加了验证步骤,拉完代码后检查一遍,确认跟锁定的版本一致。这是正确的修法。

OpenAI:差不多同一时间修复。Codex v0.146.0,同样的思路。

Google:直接把Gemini CLI砍了。不修,弃疗。这相当于家里水管漏了,解决方案是把房子烧了。已经装了Gemini CLI的用户?自求多福吧。

GitHub:到漏洞披露的时候,Copilot还没出修复。GitHub自己的代码托管平台会拦截那串40位字符的分支名,所以GitHub上托管的插件风险低一些。但Copilot支持从其他Git平台拉插件,那些地方可没这个保护。

一个漏洞,四种态度。有人当基础设施修,有人当产品功能砍,有人当没看见。

这不是新故事,是旧剧本换了演员

如果你关注过npm、PyPI这些软件包管理器的供应链攻击,你会发现Plugin4Shell的套路一模一样。

抢注相似名字、依赖混淆、仓库接管——这些在软件包生态里横行十几年的攻击手法,一个不落地搬到了AI编程助手的插件市场上。

但有个关键区别:npm包跑在你的应用环境里,能偷环境变量。AI编程助手的插件跑在助手的权限下,通常包括文件系统访问、命令行执行、网络访问。

一个被污染的npm包能偷你的密码。一个被污染的AI插件能重写你的代码库、偷走你的SSH密钥、在你的CI流程里装后门。

而且,整个插件市场生态,没有可复现构建,没有内容寻址存储,没有修改日志,没有强制代码签名,没有插件间的沙箱隔离。从"有人推了代码"到"26000个助手执行",中间没有任何审查环节。

你现在该做什么

如果你在用这些AI编程助手,并且装了插件:

  • 更新。Claude Code升到2.1.179以上,Codex升到0.146.0以上。老版本就是裸奔。
  • 查来源。把你装的插件列出来,看每个从哪儿拉代码。如果来自Bitbucket、GitLab或自建服务器,GitHub的保护不适用。
  • 关掉自动更新。Plugin4Shell的零点击就是靠自动更新实现的。关掉它,给自己留一个审查窗口。
  • 关键插件自己fork。把仓库复制到你自己的Git托管下,锁定你自己的版本,审查后再拉上游更新。
  • 留意异常。插件突然要新权限、访问以前不碰的文件、产生奇怪的网络流量——别当成功能更新,当成被入侵的信号。

十八个月

Air Security的团队给这个行业留了一个判断:大约十八个月内,第一起由Plugin4Shell衍生的供应链攻击会打中生产环境,然后上新闻。

工具是现成的。可复现构建、内容寻址、代码签名、沙箱隔离——这些在传统软件供应链里已经是标配。问题是,AI编程助手的插件市场愿不愿意主动补课,还是等出了事再补。

用Git分支名当你的安全保证,这事本身就挺魔幻的。

你现在打开你的AI编程助手,看看装了多少插件。然后想想,你上一次检查它们的代码是什么时候?

评论区聊聊,你装了几个插件,有几个是你自己审过的。

相关学习资料