尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

你装的AI编程助手,可能已被接管

发布时间:2026/9/24 14:49:26

资讯中心
01
ARTICLE

你装的AI编程助手,可能已被接管

你装的AI编程助手,可能已被接管
一个 40 位的分支名让四款最火的 AI 编程助手在没人点击任何东西的情况下执行了攻击者的代码一、先说最反直觉的一点这次你不需要点任何东西2026 年 5 月安全公司 AIR Security 的研究员在实验室里做了一件听起来很无聊的事他们建了一个 git 分支分支名是一串 40 位的十六进制字符。然后市面上最主流的四款 AI 编程助手——Anthropic 的 Claude Code、OpenAI 的 Codex、GitHub 的 Copilot、Google 的 Gemini CLI——全部在他们面前执行了任意代码。没有弹窗没有确认框没有任何一次点击。这个漏洞在 9 月 17 日被公开代号Plugin4Shell。AIR Security 给它的定性是AI agent 生态系统的第一个供应链漏洞。注意这个措辞。过去两年围绕 AI 安全的讨论基本都在两个层面打转要么研究模型本身提示注入、越狱、对齐失败要么研究 agent 本身它会不会自己乱来。Plugin4Shell 走的是第三条路——它攻击的是 agent 底下那层分发管道插件市场。而这条管道是通向数百万台机器的。二、先讲清楚插件为什么危险要理解这个漏洞的分量得先理解 AI 编程助手现在是怎么工作的。今天的 coding agent 早就不只是一个聊天框了。它可以装插件、装 skill、装扩展这些扩展通常来自社区市场。装上之后它们继承开发者本人的权限——本地源码、云凭证、SSH 密钥、内部仓库、生产系统、各种密钥。换句话说你给 agent 装一个插件本质上是在自己的机器上、用自己的身份跑了一段别人写的代码。这本来不是新鲜事npm、PyPI、VS Code 插件市场都是这个逻辑。行业对此的标准答案是SHA pinning提交哈希锁定市场在审核完一个插件之后把它锁死到某一个具体的 git commit 哈希上。以后 agent 安装时只装这个哈希对应的代码而不是最新版或被改过的版本。审一次永远只跑那一份。这套机制的设计初衷非常明确防止rug-pull先伪装、后投毒。你先审一个干净版本等大家装完了再偷偷把仓库换成恶意代码——SHA pinning 就是专门堵这条路的。Plugin4Shell 干的事就是让这套机制表面上完全正常地失效。三、一个分支名为什么能骗过 git漏洞的根因说出来简单到有点荒唐这些 agent 会让 git 去 checkout 那个被锁定的 commit但从来不检查最后落到工作区里的到底是不是它。用命令表示agent 干的是这件事git clone 插件仓库 ./git checkout aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa第二行的aaaa...就是市场锁定的那个 40 位哈希。看起来没问题。但 git 有一个很多人不知道的行为当一个名字既是一个合法的引用ref又是一个对象 ID 时git 优先选择引用只在旁边打印一句refname is ambiguous的警告然后继续。于是攻击者只要做两件事在自己控制的插件仓库里建一个名字正好等于那 40 位哈希的分支把这个分支设为仓库的默认分支让它指向恶意代码之后那句git checkout aaaa...就会解析到这个分支上而不是那个 commit。被锁定的 commit 本身甚至可以完全不动、干干净净地留在仓库里——它只是不再被使用而已。而且git clone会把默认分支作为本地分支拉下来所以攻击者连让受害者主动 fetch都不需要。两个前提条件都不难满足分支名可以是 40 位十六进制。git 自己的git check-ref-format是接受这种名字的。GitHub 明确拒绝形如哈希的分支名但Bitbucket 和任何自建 git 服务器都允许——而 Anthropic 自己的文档里就把 Bitbucket 和自建 git 列为合法的插件市场后端。这个分支必须是仓库的默认分支。如果不是默认分支它只会被当作远端跟踪引用拉下来checkout 会老老实实回退到 commit 上。所以准确地说这不是某个市场的配置失误而是 git 的默认行为和 agent 缺失的那一次校验正好撞在了一起。四、四款产品犯的是同一个错AIR Security 强调了一点这不是某一家的实现失误。同一个设计错误出现在每一个受影响的 agent 里。不是某个产品写错了代码而是一个错误在整个行业里被重复了四遍。这种大家都不约而同漏掉同一件事的情况在软件史上通常意味着两件事一是这个错误足够隐蔽二是它造成的暴露面足够大。四款 agent 覆盖的是当前 AI 编程工具市场的绝大部分份额潜在受影响的 agent 实例以百万计。五、Gemini CLI 的另一种死法Claude Code、Codex、Copilot 走的是上面那条分支名冒充哈希的路径。Gemini CLI 的问题更隐蔽一点。它的安装流程是三段git clone --depth 1 插件仓库 ./git fetch origin 41d0bc0a4aeb2fbf797dacea39e876d98c95024bgit checkout FETCH_HEAD第二行确实把正确的 commit 拉下来了也记进了.git/FETCH_HEAD。看起来比前三个还严谨。但第三行git checkout FETCH_HEAD并不一定要读那个文件。如果仓库的默认分支本身就叫FETCH_HEADcheckout 会解析到这个分支上——刚刚 fetch 下来的那个正确 commit 被静默丢弃工作区里留下的是攻击者默认分支里的内容。同一个错误换了一件衣服。六、真正让它是零点击的是自动更新如果漏洞只发生在安装那一刻危害还能控制——你不装新的就没事。但 Plugin4Shell 之所以被定性为零点击是因为插件会自动更新。Claude Code 和 Codex 默认在后台自动更新已安装的插件。这意味着攻击链的最后一环根本不需要受害者参与投种攻击者往可信市场提交一个货真价实的良性插件通过审核锁定在aaa...aaa。铺开用户安装每一次安装都锁在aaa...aaa这个经过审核的版本上。版本更新攻击者推送一个例行更新——依然是良性的市场把锁重新指向bbb...bbb。掉包攻击者建一个名叫bbb...bbb的分支设为默认分支指向恶意代码。被锁的那个 commit 本身纹丝不动。自动更新到 RCE锁变了触发所有 agent 的后台自动更新。checkout 把bbb...bbb解析成分支恶意代码执行。没有提示没有点击没有要不要更新的询问。攻击者不需要说服任何人装新东西。他们只需要那个良性插件已经在你的机器上。七、最刺人的一句话你什么都没做错这是整件事里最值得停下来想一下的地方。你可能会想这跟我有什么关系我又不乱装插件。但按 AIR Security 的说法受害者不需要乱装插件。他们只需要满足一个条件装过一个来自可信市场的插件而且这个插件经过了审核、并且按照安全模型的要求被正确地 pin 到了某个 commit。也就是说你把所有该做的都做对了你依然在风险里。对那些比社区市场更谨慎的组织来说这一点尤其难堪。很多企业的做法是不让员工随便用社区插件而是自己审一遍、pin 到某个 review 过的 commit再放行。Plugin4Shell 让这一整套流程直接作废——审核通过pin 写下了但装上去的是另一份代码。所有建立在 pinning 之上的下游校验流程一起继承了这次失败。这也解释了为什么 AIR Security 在报告里写了一句挺重的话市场无法完全关掉这个洞。因为 pin 是在 agent 内部解析的只有 agent 侧的修复才能恢复这个保证。换句话说这是客户端的问题市场再努力也补不上。市场能做的只有一件事——把名字长得像哈希的分支这条路堵死而那等于只允许 GitHub 一家托管因为 GitHub 会直接拒绝 40 位十六进制分支名顺带把 agent 官方支持的其他托管方式一起禁掉而且对 Gemini CLI 那个变体毫无作用。八、修了吗两家修了一家没修一家弃疗这是本次披露里最不好看的一段。Claude CodeAnthropic 修复版本2.1.179OpenAI CodexOpenAI 修复版本0.146.0GitHub CopilotAIR 把同样的缺陷报给了微软截至披露时微软没有发布修复Gemini CLIGoogle 表示 Gemini CLI已弃用不会打补丁建议用户迁移到 Antigravity关于 CopilotGitHub 的回应是他们的平台会拦截形如 SHA 的分支名和标签名。但 AIR Security 并不接受这个说法。他们的反驳是市场可以托管在 Bitbucket 这类服务上也可以是自建的 git 服务器——这些地方并没有这种拦截所以仍然可以被利用。而前面说过这些托管方式是被官方文档认可的正规配置。至于 Gemini CLI处境更尴尬它不会再有修复了。每一个已经装了它的环境就永久留在风险里。Google 给出的出路是迁到 Antigravity——Antigravity 没有插件 SHA pinning 这套东西所以这个攻击够不到它。顺便说一下这个漏洞其实不是 9 月才发现的。完整时间线是这样的2026 年 5 月AIR 研究实验室发现并对四款 agent 都做出了可用的 PoC2026 年 6 月按协调披露流程告知四家厂商2026 年 6 月 17 日Anthropic 确认 Claude Code 2.1.179 已修复2026 年 8 月 4 日Google 确认不修建议迁移2026 年 8 月 12 日验证 Codex 0.146.0 已修复2026 年 9 月 17 日公开披露从发现到公开四个月。两家修了一家没修一家决定让它就这么烂下去。九、这不是孤例这条管道已经被攻破过两次Plugin4Shell 是 AIR Security 同一系列研究的第三篇。前两篇讲的是同一件事的不同阶段而且都是实战验证过的《The Story of Skills》他们造了一个恶意 skill 放进市场看着它传播开最终控制了超过 26,000 个 agent。结论是把一个恶意插件塞进一个被信任的市场根本不是最难的部分。《SkillJacking》连塞进去都不需要。925 个已经在被使用的 skill被通过接管其背后的仓库而劫持影响了134,000 个 agent。再加上第三篇的 Plugin4Shell这条链就完整了恶意插件可以轻易进入市场 → 已有插件可以被接管 → 而本该兜底的 pinning 机制可以被绕过。三件事凑齐就不是巧合了而是这个生态的结构性问题。十、同一个九月还有这些事Plugin4Shell 是九月网络安全新闻里最扎眼的一条但不是唯一一条。把它放回这个月的背景下看会更有意思。Brevo 供应链攻击10 万个网站被注入9 月 14 日邮件营销平台 Brevo原 Sendinblue被攻破。攻击者先窃取了一个长期有效的 Cloudflare API key用它在 Cloudflare 上部署了一个恶意 Worker然后通过它往这些地方注入脚本brevo.com、sibforms.com以及客户嵌在自己网站上的 3 个 JavaScript 文件。注入的脚本会向特定访客弹出伪造的 Cloudflare “verify you are human” 页面诱导访客复制粘贴并运行恶意命令。在装了 Brevo widget 的 WordPress 站点上攻击者还尝试给已经登录的管理员安装恶意插件直接种后门。安全公司 Sansec 估算受影响的网站超过 10 万个恶意 Worker 活跃了大约4 到 5.5 小时。在这之前9 月 10 日同一批攻击者利用一个 SAML SSO 缺陷访问了138 个账户。加密钱包厂商Trezor是最初被攻陷的账户之一。思科 ISE 零日CVSS 满分 10.0CVE-2026-76460思科身份服务引擎ISE的 API 认证绕过漏洞CVSS 评分 10.0。未认证的远程攻击者可以完全控制设备。CISA 在 9 月 16 日把它加入了已知被利用漏洞目录KEV并且没有临时缓解措施。这是两天之内第二个被主动利用的思科零日——前一个是 Secure Email Gateway 的 CVE-2026-76461。WeaselBiscuit13 个恶意 npm 包一个叫 WeaselBiscuit 的窃密木马通过13 个恶意 npm 包传播包括biz44/*系列以及engin1、id79-client、process-lhpm、process-mite、process-tailwind。它的载荷从 Npoint 死投点拉取并在内存中执行专门窃取Chrome 扩展的本地存储Local Extension Settings 的 LevelDB 目录Windows、macOS、Linux 三端通吃。在 Windows 上还能在 C2 指令控制下记录剪贴板和键盘。C2 地址是103.170.217.184:8787。它的功能和朝鲜 DPRK “Contagious Interview” 组织的工具BeaverTail、OtterCookie高度重叠不过目前没有确切的归因证据。用 AI 造出的漏洞利用打穿了 OpenAI 内部这条最讽刺。安全公司 Hacktron 的研究员用 Claude为libheif库被 ImageMagick 使用的一个未修复漏洞开发出了可靠的利用代码。这个漏洞上游其实一年前就修了但因为它从来没被标记为安全问题所以没有分配 CVE也就错过了正常的补丁流程。利用路径是通过 Discourse 的 HEIC/HEIF 图片上传实现远程代码执行。再结合 OpenAI 侧一个登录 token 权限过大的缺陷——该 token 能对关联的 ChatGPT 和 Codex 账户获得完整的 API 访问权——研究人员最终接管了一名员工账户。而这名员工恰好把 Codex 接入了 OpenAI GitHub 组织的权限。研究者在内部仓库开了一个 PR然后就停手了。OpenAI 支付了漏洞赏金并把图像处理的问题归给了第三方 Discourse把 token 权限问题算作自己的。西班牙首例代理式 AI数据泄露西班牙数据保护机构 AEPD 报告了该国第一例由代理式 AI 驱动的个人数据泄露。AEPD 主席 Francisco Pérez Bes 描述的经过是一个使用已知语言模型的 agent 扫描通用文件成功登录然后自主搜索应用漏洞进入之后修改了个人数据、访问了发票。不过 AEPD 的定性很克制这是把 AI 当作工具串联攻击的不同阶段背后有人类操作者指挥而不是一个完全失控的自主系统。即便如此它还是被称作一个分水岭时刻。十一、那现在该怎么办把上面这些事放在一起能看出一个共同的形状攻击面正在从你写的代码转移到你依赖的东西。从 npm 包到 CI/CD 流水线到 Cloudflare Worker到邮件营销平台的 JS widget现在再到 AI 编程助手的插件市场。你写的代码可能一行问题都没有但你的构建链上任意一环被换掉结果都一样。具体到 Plugin4Shell能做的事情不多但很明确升级 Claude Code 到 2.1.179 及以上Codex 到 0.146.0 及以上。这是唯一完整的缓解手段。如果你在用 GitHub Copilot目前没有补丁。这意味着你要么暂时控制插件来源要么接受这个风险敞口。如果你在用 Gemini CLI它不会修了。该考虑迁移了。盘点你的插件。你到底装了哪些它们从哪来背后是谁的仓库这些仓库最近有没有换过所有者、改过默认分支——注意最后一问正是 SkillJacking 和 RepoJacking 的作案特征。重新想一想自动更新这件事。这次漏洞能被定性为零点击靠的就是它。自动更新买到的是省事付出的是你不再控制什么时候发生变化。对持有生产凭证的 agent 来说这笔账未必划算。还有一句更本质的话值得记住。过去我们习惯的安全模型是审核一次锁定版本之后就可以信任。Plugin4Shell 打掉的正是之后就可以信任这半句——审核通过了版本也锁了但跑起来的是别的东西。对正在把 AI agent 接进自己工作流的每一个团队来说这大概是九月最需要消化的一课当你把一个能读你源码、拿你密钥、连你生产环境的 agent 请进门你实际上是把信任交给了一整条你根本看不见的供应链。关于本文本文事实依据来自AIR Security 的原始披露《Plugin4Shell — Zero Click RCE Vulnerability found in top 4 most popular coding agents》air.security、Cyber Security News 的报道cybersecuritynews.com、Cyber Recaps 2026 年 9 月 18 日安全日报cyberrecaps.com以及其中引用的 SecurityWeek、Help Net Security、CyberScoop、The Hacker News、Infosecurity Magazine 等媒体报道。漏洞时间线与版本号以 AIR Security 原始披露为准。截至本文发布微软尚未就 GitHub Copilot 发布修复Google 已确认 Gemini CLI 不会收到补丁。文中涉及的安全事件细节仍在持续演进后续如有新的官方披露以官方为准。如果你也在用 AI 处理日常工作和资料整理WorkBuddy 是我自己在用的一个选择——它把文档处理、数据分析和多步任务编排放在同一个对话里完成省掉了很多在工具之间来回切换的时间。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。