Claude Code、OpenAI Codex、GitHub Copilot、Google Gemini CLI 均存在零点击 RCE 漏洞,攻击者利用 SHA 提交校验缺失注入恶意插件,累及 26000+ Agent,Gemini CLI 已废弃。
2026 年 5 月,Air Security 的研究人员发现,所有主流 AI 编程智能体处理插件更新的方式如出一辙:它们会检出(checkout)一个 SHA-pinned 的提交,但从不验证检出的代码是否真的与该提交匹配。
这个漏洞最终变成了一个影响 Claude Code、OpenAI Codex、GitHub Copilot 和 Google Gemini CLI 的零点击远程代码执行漏洞。他们将其命名为 Plugin4Shell。在被下架之前,一个概念验证(PoC)恶意插件扩散到了超过 26,000 个智能体。另一场名为 SkillJacking 的活动劫持了 925 个已在使用中的技能,影响了 134,000 个智能体。
Google 通过废弃 Gemini CLI 而非打补丁来应对。GitHub Copilot 在披露时仍未发布修复方案。使这一切成为可能的底层架构,正是每个智能体市场都在使用的架构。
欢迎来到 AI 编程工具的供应链攻击时代。
这个攻击简单得令人不安,这正是它可怕之处。
每个插件市场都将插件固定到特定的 git 提交 SHA。理论上:你批准了版本 a1b2c3d4...,每次运行的代码完全相同。SHA 是你完整性的保证。这与 Dockerfiles 使用镜像摘要和 Go 模块在 go.sum 中使用校验和的模型相同。
但问题是智能体实际上并不验证 checkout。它们调用 git checkout <sha>,但 git 的引用解析有优先级顺序。如果存在与 SHA 匹配的分支名称(或部分匹配),git 可能会解析到分支而不是提交。控制插件仓库的攻击者创建一个分支,其名称为固定 SHA 的 40 字符十六进制字符串。Git 先找到分支,检出分支 HEAD(其中包含攻击者的代码),智能体继续执行,仿佛固定提交已加载。
关键细节:默认情况下,Claude Code 和 Codex 会在后台自动更新已安装的插件。当市场更新固定 SHA 时,交换会在无需用户操作的情况下到达已安装插件。零点击。后台执行。静默。
该漏洞在不同智能体上的表现不同,这说明安全思维的碎片化程度:
Claude Code、Codex、Copilot 共享分支名碰撞变体。Git 在提交 SHA 之前检查分支的默认行为造成了这种不匹配。修复方法很简单:在 checkout 完成后验证 checkout 目标。Anthropic 在 Claude Code v2.1.179 中发布了修复。OpenAI 在 v0.146.0 中为 Codex 打补丁。GitHub Copilot 尚未发布修复。
Gemini CLI 在 checkout 操作期间涉及 FETCH_HEAD 分命名的单独机制。结果相同,但攻击路径不同。Google 的应对措施是完全废弃 Gemini CLI 而不是打补丁。这相当于为了修管道漏水源而烧掉整栋房子,而且让现有用户暴露在外。
GitHub 的托管服务阻止 40 字符的十六进制分支名称,这提供了一些保护。但 Bitbucket、GitLab 和自托管 Git 服务器没有此限制。如果你的插件从 GitHub 以外的任何地方获取代码,保护就不适用。
Air Security 团队用受控的概念验证演示了该漏洞的影响范围。一个恶意插件在市场检测并下架之前扩散到超过 26,000 个智能体。这不是一个理论攻击面。这是一次有护栏的研究演练的真实传播数字。
SkillJacking 活动更令人担忧。研究人员发现了 925 个已被入侵的在生产环境中活跃使用的技能,影响了 134,000 个智能体。这些不是攻击者植入的新技能。这些是现有且可信任的技能,其仓库被修改以利用 checkout 验证缺口。
仔细想想。你三个月前安装并每天使用的插件,可以通过其自身的更新机制被追溯性地武器化,你的智能体会自动拉取恶意版本而不会告知你。
如果这个攻击模式听起来很熟悉,说明你一直在关注过去十年软件供应链安全。Plugin4Shell 直接对应困扰 npm、PyPI 和 RubyGems 的攻击模式:
typosquatting 变成 skill squatting。在 npm 中,攻击者注册名称与流行包相似的包。在智能体市场中,他们注册与常见工作流匹配的技能名称。SkillJacking 的数字表明这已经在规模化发生。
dependency confusion 变成 plugin confusion。当智能体从多个来源(市场、本地、git URL)解析插件时,解析优先级决定了加载哪个版本。这正是 2021 年让微软、苹果和数十家公司中招的 dependency confusion 模式。
maintainer compromise 变成 repository takeover。如果攻击者获得插件 git 仓库的推送权限,他们可以修改任何 SHA-pinned checkout 获取的代码。插件市场显示已批准的 SHA。智能体获取的是别的东西。
区别在于 npm 包在 Node.js 中运行,权限取决于你的应用程序。编程智能体插件以智能体的权限运行,而这些权限通常包括文件系统访问、shell 执行和网络访问。被入侵的 npm 包可以窃取你的环境变量。被入侵的智能体插件可以重写你的代码库、窃取你的 SSH 密钥,并在你的 CI 管道中安装后门。
供应商对 Plugin4Shell 的响应是诊断每家公司对智能体安全重视程度的有用指标:
Anthropic 在披露后数周内为 Claude Code 打补丁。修复方案在 checkout 完成后验证工作树是否与固定 SHA 匹配。这是正确的架构修复。
OpenAI 在类似时间范围内为 Codex 打补丁。相同的方法:checkout 后验证。
Google 废弃了 Gemini CLI。没有补丁。废弃工具的用户在迁移到 Google 下一款产品之前(假设 Google 会推出后续产品)仍然暴露。
GitHub 在披露时尚未为 Copilot 发布修复。鉴于 GitHub 自身的托管服务阻止了分支命名技巧,GitHub 托管插件的风险较低。但 Copilot 支持从其他 Git 主机获取插件的插件,而那里的缓解措施不适用。
模式:那些将编程智能体作为严肃开发者工具构建的公司(Anthropic、OpenAI)将漏洞视为严肃的基础设施问题。将智能体作为产品功能构建的公司(Google)抛弃了它。拥有最大代码托管平台的公司(GitHub)尚未回应。
如果你使用任何带有插件的这些编程智能体,以下是立即要做的检查清单:
更新你的智能体。Claude Code 2.1.179+ 和 Codex 0.146.0+ 包含修复。如果你使用的是旧版本,你暴露在风险中。
审计你的插件来源。列出你安装的每个插件,检查每个插件的代码来源,并验证仓库自你批准以来没有被修改过。如果插件从 Bitbucket 或自托管服务器获取,GitHub 分支名保护不适用。
在审计之前禁用自动更新。Plugin4Shell 的零点击特性通过自动更新起作用。禁用它可以让你在新版本执行之前有审查窗口。这用便利性换取控制权,而现在控制权更值钱。
固定到你控制的特定分支。对于关键插件,将仓库 fork 到你自己组织的 Git 托管,固定到你的 fork,并在拉取上游之前审查更改。这与生产 Go 模块使用的 vendor-copy 模式相同,应用于智能体插件。
关注 SkillJacking 指标。如果你使用的插件突然请求新权限、访问之前未访问的文件或产生意外网络流量,将其视为入侵指标,而非功能更新。
Plugin4Shell 是一个漏洞。但结构性问题在于智能体插件市场复制了包管理器的每个设计决策,却没有从 15 年的供应链攻击中吸取教训:
无可重现构建。无内容寻址存储。无插件修改的透明日志。无强制代码签名。插件与主机智能体之间无沙箱隔离。「某人推送代码」到「26,000 个智能体执行它」之间无审查流程。
树莓派 5、Yubikey 和气隙隔离签名仪式对于编程插件来说看似过度。它们不是。这替代了将 Git 分支名称作为完整性保证,而我们刚刚看到了这样做会怎样。
智能体市场生态系统大约还有十八个月,第一个 Plugin4Shell 衍生的供应链攻击就会在生产环境中发生,并因错误原因登上新闻。阻止这一切的工具已经存在。问题是行业是会主动采用还是被动采用。
如果你正在运行带有插件的编程智能体,并希望在下一个 Plugin4Shell 变体到来之前锁定供应链:
面向开发者的 Claude Code 深入讲解了 Claude Code 的权限模型、插件管理和 CLAUDE.md 配置模式。这是用于在智能体级别强制执行安全策略的指南,包括如何控制插件更新行为和验证你的智能体实际执行的内容。
面向开发者的 Claude Code 深入讲解了 Claude Code 的权限模型、插件管理和 CLAUDE.md 配置模式。这是用于在智能体级别强制执行安全策略的指南,包括如何控制插件更新行为和验证你的智能体实际执行的内容。
Aider + OpenClaw:离线优先 AI 脚本编制 涵盖了使用 120+ 提示模板和 DeepSeek R1/Ollama 堆栈构建气隙隔离、本地优先编程设置的内容。如果 Plugin4Shell 让你重新思考你的编程智能体是否应该从互联网自动更新,这就是替代架构:不信任远程市场的智能体。
Aider + OpenClaw:离线优先 AI 脚本编制 涵盖了使用 120+ 提示模板和 DeepSeek R1/Ollama 堆栈构建气隙隔离、本地优先编程设置的内容。如果 Plugin4Shell 让你重新思考你的编程智能体是否应该从互联网自动更新,这就是替代架构:不信任远程市场的智能体。
回形针方法:用持久化 Claude 智能体替代你的开发团队 包含 4 支柱持久化智能体框架,具有明确的信任边界、更新验证模式,以及直接减轻 Plugin4Shell 攻击面的 fork-and-pin 工作流。
回形针方法:用持久化 Claude 智能体替代你的开发团队 包含 4 支柱持久化智能体框架,具有明确的信任边界、更新验证模式,以及直接减轻 Plugin4Shell 攻击面的 fork-and-pin 工作流。