title: "Plugin4Shell 零点击 RCE:Claude Code、Codex、Copilot、Gemini CLI 同时中招" slug: plugin4shell-zero-click-rce-coding-agents date: 2026-09-21 category: 智能体与 Harness tags: Plugin4Shell,RCE,Claude Code,Codex,Gemini CLI,GitHub Copilot,代码供应链安全,编码 Agent summary: AIR 研究员 9 月 18 日披露 Plugin4Shell:利用 Git checkout 解析「分支名 == commit hash」的特性绕开 SHA-pinning,让 Claude Code 2.1.x、OpenAI Codex 0.146.0、Gemini CLI、GitHub Copilot 都能加载恶意插件代码。Anthropic 与 OpenAI 已出补丁,Google 直接弃用 Gemini CLI,Microsoft 未发补丁。
Plugin4Shell 零点击 RCE:Claude Code、Codex、Copilot、Gemini CLI 同时中招
四款主流编码 Agent 同时被同一种姿势打穿——9 月 18 日 AIR 研究员披露的 Plugin4Shell 漏洞,让 Claude Code、OpenAI Codex、GitHub Copilot、Gemini CLI 都陷入了「看似校验、实则可被劫持」的零点击 RCE 风险。Anthropic 在 Claude Code 2.1.179、OpenAI 在 Codex 0.146.0 紧急出补丁;Google 干脆直接弃用 Gemini CLI 而不修补;Microsoft 则到披露日仍未发布 Copilot 补丁。这是一次典型的「AI 编码工具供应链攻击」事件,工程团队需要把它当成一次基础设施级别的警钟。
一、漏洞原理:Git checkout 的「分支名 == commit hash」机制被反咬一口
Plugin4Shell 的核心利用点很巧妙:
- 大多数编码 Agent 在安装第三方插件时都会做 SHA-pinning——把插件代码仓库的某个 commit hash 钉死,下一次安装/更新时校验 hash 是否一致,理论上能阻止恶意代码替换。
- 但
git checkout在解析远端引用时存在歧义:当远端出现「一个分支名恰好等于某个 commit 的完整 hash」的对象时,Git 会优先匹配分支,而不是之前钉死的 commit hash。 - 攻击者只要在自家仓库里建一个名字等于目标 commit hash 的分支(比如
deadbeef...),就能让原本写着「钉死 deadbeef...」的插件配置,实际上 checkout 到攻击者控制的新分支——而 Agent 端仍然报告「clean install」。
这是一种典型的「校验机制本身被利用」的攻击。Agent 报告的状态、日志、签名校验全部显示「通过」,但实际加载的代码已经是攻击者版本。整个过程是零点击的:开发者只要触发一次插件自动更新或重新加载,恶意代码就会静默进入 Agent 运行时。
二、四家厂商的不同反应:补丁 vs 弃用 vs 沉默
Plugin4Shell 影响的范围覆盖了 2026 年编码 Agent 的全部主流玩家:
| 厂商 / 产品 | 受影响版本 | 处置方式 | 备注 |
|---|---|---|---|
| Anthropic / Claude Code | < 2.1.179 | 已在 2.1.179 修复 | 仍在持续迭代,2.1.246 等后续版本附带通配符权限等更多边界加固 |
| OpenAI / Codex CLI | < 0.146.0 | 已在 0.146.0 修复 | OpenAI 同时加强了内部插件签名链路 |
| GitHub / Copilot | 部分插件框架版本 | 微软截至披露日未发补丁 | 影响范围尚未明确 |
| Google / Gemini CLI | 历史版本 | Google 选择直接弃用 Gemini CLI,不发布补丁 | 转而推 Gemini CLI 2 重写版 |
四种处置方式拼在一起,是一份非常清晰的安全治理对照表:
- Anthropic 与 OpenAI 把这件事当成「必须立刻修复的 P0」——因为 Claude Code 和 Codex 都是企业付费产品,客户的代码供应链一旦出问题,品牌损失无法估算。
- Google 的 Gemini CLI 用户量相对小,选择整体弃用旧版、重写新版,工程上更干净,但要承担用户迁移成本。
- Microsoft / GitHub Copilot 的沉默 是这次事件里最值得追问的一环——Copilot 已经在大量企业内部铺开,迟迟不出补丁等于把企业客户的插件供应链安全悬空。
三、对工程团队意味着什么
Plugin4Shell 不只是一个 CVE,它的攻击面揭示了 AI 编码工具进入企业生产环境后必须正面回答的几个问题:
- 「插件 / Skills / MCP Server」是新的代码供应链。当 Agent 把越来越重的决策权交给第三方插件,企业就必须像管 npm 依赖那样管 Agent 插件:签名校验、来源白名单、定期轮换、自动告警。
- 「自动更新」是把双刃剑。编码 Agent 为了跟上模型节奏默认开启自动更新,但自动更新正是这次零点击攻击的入口。生产环境里至少要做到:插件更新走显式确认,关键插件版本锁死。
- 「clean install」报告不再可信。Plugin4Shell 利用的就是 Agent 的状态报告机制——日志显示通过、签名校验通过、hash 校验通过,但实际加载的代码已经换掉。运维侧必须给 Agent 加额外的外部校验:在沙箱里复现插件加载动作、做依赖 diff、监控异常系统调用。
- 「补丁响应时间」要写进选型清单。Anthropic 与 OpenAI 在披露后 1–2 个版本内出补丁,Google 干脆整体重写,Microsoft 至今没动作——这本身就是对企业级编码 Agent 选型的硬指标。
四、企业落地 AI Coding 的 checklist 需要再加几行
Plugin4Shell 之后,编码 Agent 在企业生产环境的最低安全配置应该包括:
- 插件白名单 + 签名锁定:禁用匿名仓库、强制要求 commit hash + 分支名双重锁定,避免单一钉 hash 被利用。
- Agent 沙箱网络隔离:Agent 运行时不应拥有生产环境网络权限,插件加载动作必须在受限环境里发生。
- 最小权限原则:Agent 默认权限按"读代码 + 跑测试"配置,任何 rm、DROP、DELETE、git push、deploy、密钥读取 走显式审批。
- 插件更新走变更窗口:禁止「自动静默更新」,每次插件更新生成 diff 报告并通知负责人。
- 第三方依赖审计:把
~/.config/agents/plugins/、~/.claude/skills/、~/.codex/extensions/等目录纳入企业 SCA(软件成分分析)扫描。
结语
Plugin4Shell 给所有把编码 Agent 接入生产链路的工程团队上了一课:当 Agent 接管更多终端、文件系统、网络、密钥权限时,它的每一个依赖——插件、Skills、MCP Server——都是新的攻击面。Anthropic 与 OpenAI 用紧急补丁表达了「安全是底线」,Google 用弃用表达了「重写比补洞更划算」,Microsoft 的沉默则提醒所有企业客户:在选型 AI Coding 工具时,补丁响应速度本身就是一项硬指标。
下一次「零点击 RCE 击中编码 Agent」时,希望大部分团队已经把这张 checklist 跑通。

评论(0)
暂无评论,来抢沙发~
请 登录 后发表评论