安全公司 AIR Security 于 2026 年 9 月 17 日公开披露 Plugin4Shell,一个同时影响 Claude Code、OpenAI Codex、GitHub Copilot 与 Gemini CLI 四款主流 AI 编程智能体的零点击远程代码执行漏洞。它绕过了业界为防范插件供应链攻击而普遍采用的 SHA 锁定机制:智能体确实取出了市场所锁定的提交,却从不校验工作树里最终落地的到底是不是那个提交。由于 Claude Code 与 Codex 默认在后台自动更新插件,攻击者控制的代码可以在用户毫无操作的情况下替换掉此前已审核、已信任的插件。
事件概述
SHA 锁定被当成 AI 编程智能体生态的安全基石:市场审核插件时记录一个 40 位十六进制的提交哈希,此后所有安装该插件的智能体都应当严格检出这一个提交,确保本地代码与通过审核的代码完全一致。Plugin4Shell 击穿的正是这一假设。AIR Security 的 Or Nevo、Dor Granat 与 Niv Hoffman 于 2026 年 5 月发现问题,6 月按协同披露流程通知厂商,9 月 17 日公开细节;该漏洞没有 CVE 编号,也未见在野利用报告。
技术细节:git 的引用名优先级被反向利用
四款智能体的插件安装路径共用一个缺失环节:取回被锁定的提交后,都未验证检出结果是否等于锁定值。攻击者由此可以利用 git 的引用解析规则。
- 控制插件仓库的攻击者可创建名称恰好等于那 40 位锁定哈希的分支,并设为仓库默认分支;
- 智能体执行检出时,git 在名称歧义时优先解析具名引用,因而落到该分支而非同名提交上,仅打印一条警告;
- 智能体最终按锁定哈希报告安装成功,工作树里却已是攻击者控制的代码;
- Gemini CLI 的变体不同:安装器先取回目标提交,再执行 git checkout FETCH_HEAD,若默认分支本身就叫 FETCH_HEAD,检出同样落到分支上。
零点击来自后台自动更新:市场端把锁定的哈希抬高到新版本时,智能体会重新执行同一次检出,同名分支再次胜出,此前受信任的插件被静默替换,全程没有提示、没有点击。插件运行时继承开发者权限,一旦成功,攻击者就拿到源代码、云凭证、SSH 密钥与生产系统的访问能力。
影响评估
厂商响应出现明显分化。Anthropic 在 Claude Code 2.1.179 中修复,6 月 17 日确认;OpenAI 在 Codex 0.146.0 中修复,8 月 12 日验证通过。微软尚未为 GitHub Copilot 发布补丁,其立场是 GitHub 平台本身禁止形如提交哈希的分支名,从而限制了攻击面;AIR 反驳称 Copilot 同样支持 Bitbucket 与自建 git 服务上的市场,而这些平台允许此类命名。Google 则以 Gemini CLI 已废弃为由拒绝修复,建议用户迁移到不采用同一套 SHA 锁定模型的 Antigravity。
通用修复是智能体内的一条断言:
test "$(git rev-parse HEAD)" = "<pinned-sha>" || exit 1
修复建议
- 升级到已修复版本:Claude Code 升级至 2.1.179+,Codex 升级至 0.146.0+;
- Copilot 用户目前无补丁:在微软修复前,应将插件自动更新视为活跃风险来源,移除非必要第三方插件;
- Gemini CLI 用户应规划迁移:该工具确定不会修复,继续使用等同于长期暴露;
- 收紧插件自动更新:具备人工复核条件的团队应改为受控节奏更新并核对实际提交;
- 限制插件权限边界:避免智能体直接持有云凭证与生产环境权限。