字号 ·· | 护眼
thenextweb

一个简单的git技巧攻破了四个AI编程代理的安全锁

人工智能行业早已意识到攻击者可能通过恶意手段污染插件市场。为此,相关厂商采取了将每个插件绑定到其代码的“已审核版本”上的措施;然而,这种安全机制刚刚被攻破。

漏洞详情: Air Security 的研究人员于周四公布了一个名为 Plugin4Shell 的安全漏洞。该漏洞影响了四种最广泛使用的人工智能编程工具:Anthropic 的 Claude Code、OpenAI 的 Codex、GitHub 的 Copilot 以及 Google 的 Gemini CLI。研究人员将这种攻击方式称为“零点击远程代码执行”(即攻击者无需受害者采取任何操作即可实施攻击)。

修复情况: Anthropic 已在 Claude Code 2.1.179 版本中修复了该漏洞;OpenAI 也在 Codex 0.146.0 版本中进行了修复。不过,Microsoft 尚未为 Copilot 发布任何修复补丁,而 Google 则决定停止维护 Gemini CLI。

漏洞原理:这些编程工具会从插件市场中下载插件。为确保插件安全性,市场平台会将每个插件绑定到一个特定的代码快照(即由 40 个字符组成的字符串,用于标识代码的精确版本)。一旦某个插件被审核并通过安全检查,该快照就会被“固定”下来,之后该插件将始终运行经过审核的代码。

攻击机制:攻击者只需控制插件的代码仓库,即可创建一个与被固定快照名称相同的分支,并将这个分支设置为默认分支。这样,编程工具在安装插件时就会下载攻击者植入的恶意代码。

具体漏洞点:

Claude Code 和 Codex:虽然会请求并使用被固定的代码快照,但并未实际检查下载到的代码内容。

Git 允许分支使用任意名称,其中某些名称与代码快照的字符串格式完全相同;因此,Git 会默认选择这些“看似合法”的分支。

Gemini CLI 的漏洞在于:虽然会正确获取代码快照,但在执行安装时并未进行实际检查,导致恶意代码被安装到系统中。

修复方法:修复该漏洞只需添加一行代码:在安装插件后,系统需要检查实际下载到的代码内容;如果代码与被固定的快照不匹配,则应立即中止安装过程。

为什么没有人需要去点击那些“代理”插件并手动在后台更新它们呢?Claude Code 和 Codex 已经默认实现了这一功能——因此攻击者根本不需要用户安装任何新的插件;它们只是替换了开发者已经信任并正在使用的插件而已。

攻击者的具体步骤如下:首先发布一些看似有用的内容,通过审核后吸引用户;接着发布一个常规更新,让相关平台将用户的代码指向新的代码版本;随后创建一个以该新代码版本命名的分支,并在该分支中植入恶意代码;最后,所有使用该插件的代理程序会自动更新自身,从而完成整个攻击过程。

这些插件拥有与用户相同的访问权限,因此恶意代码会直接侵入用户的文件、存储的凭证以及用户能够访问的任何系统。OWASP 本月就指出了这个问题,并将相关漏洞列为 2026 年十大安全漏洞之一。

GitHub 表示其用户并未受到威胁,因为该平台不允许使用以代码哈希值命名的分支名称;因此这种攻击手段在 GitHub 上是无法得逞的。GitHub 的一位发言人表示,这一安全措施可以有效防止任何人对该漏洞的利用。

然而,Air 公司并不认同这一观点。他们指出:这些代码分发平台可能存在于其他地方(比如 Bitbucket 或公司的自有 Git 服务器上),而这些平台确实允许使用以哈希值命名的分支名称;Anthropic 自己的官方文档也明确将这些平台列为合法的代码分发平台。此外,Copilot 本身也支持这些平台,而这正是潜在风险所在。微软方面尚未对此作出回应。

这并不是 GitHub 第一次对研究人员的发现提出异议。值得注意的是,根据微软自己的数据,大约 90% 的《财富》500 强企业都在使用 Copilot;而 Copilot 是目前唯一一个尚未发布任何安全补丁的代码辅助工具。

关键事实:

  1. 插件4Shell的实际影响范围其实比标题中提到的“四个代理工具”所暗示的要小得多;关于这一点的最详细报告来自《The Hacker News》。Swati Khandelwal在9月18日检查了这些代理工具所使用的市场平台,发现Anthropic社区目录中的所有插件,以及Claude Code和Copilot的默认目录中的插件,都指向同一个GitHub仓库。

  2. 该漏洞的攻击机制分为两部分:其中,“自动更新功能”是实现“零点击攻击”的关键。该功能默认仅适用于这些代理工具自带的官方市场平台(这些平台都托管在GitHub上);对于第三方市场平台,该功能处于关闭状态或为可选选项。因此,仅通过默认目录安装这些代理工具的开发者根本不会遇到该漏洞。

  3. Gemini CLI的漏洞处理方式有所不同:它使用名为“FETCH_HEAD”的分支名来标识漏洞,而GitHub的规则并未明确禁止使用该分支名;此外,这个漏洞也永远不会被任何开发人员修复。

  4. Air公司在5月开发出了该漏洞的测试用例,并于6月向所有四个供应商披露了这一情况;Anthropic在6月17日确认了该漏洞的存在并提供了修复方案,但Google表示不会对该漏洞进行任何修复;Codex则在8月12日确认了其漏洞已被修复。

  5. 截至9月18日,四个供应商均未发布任何关于该漏洞的安全公告或CVE(Common Vulnerability and Exposure)编号;Anthropic的2.1.179版本更新说明中也没有提及该漏洞的修复情况,因此Air公司的帖子是唯一公开记录该漏洞存在的来源。目前没有证据表明该漏洞已被用于实际攻击中。

问题分析:对于一款被《财富》500强企业使用的软件来说,四个多月的时间里都没有任何官方安全公告或修复措施,这确实令人担忧。此外,这一漏洞也与欧洲的法规要求相悖:《欧洲网络韧性法案》规定,对于已被主动利用的漏洞,供应商必须在24小时内进行报告,并确保软件供应链的透明度。

这种情况已经发生了第三次。Air公司几个月来一直在利用这一漏洞:他们将恶意代码植入到一个市场平台中,导致大约26,000个代理程序受到影响;随后,他们又劫持了925个正在被使用的代理程序,进而影响了134,000个代理程序(因为这些程序的代码存储库被他们控制了)。

为了解决这些问题,业界在8月份达成了一致,决定采用统一的插件标准(即“SHA Pinning”技术)。如今,攻击者不再直接攻击模型本身,而是针对模型背后的分布式系统进行攻击。这种设计缺陷出现在四家不同公司的四款产品中,这说明问题并非由某个团队单独造成的,而是整个行业都存在类似的漏洞。

目前尚不清楚:更新受影响的代理程序后,是否能够彻底移除已经被替换的恶意插件,还是仅仅能够阻止下一次恶意插件的安装。那些曾经遇到过Claude Code被劫持的情况,或者观察到OpenAI的代理程序被植入RubyGems框架的开发者,应该能够识别出这种攻击模式。

需要注意的是,Gemini CLI(Gemini命令行工具)仍然存在永久性的安全漏洞。谷歌建议用户改用Antigravity工具;不过攻击者无法通过Antigravity工具进行攻击,因为Antigravity没有采用“SHA Pinning”技术来保护自身。另一个值得关注的问题是:目前还有多少Gemini CLI实例仍在被使用中。