新闻

Plugin4Shell绕过插件锁定:升级代理仍要排查旧插件

|作者: QUASA 编辑团队|2 分钟阅读
Plugin4Shell绕过插件锁定:升级代理仍要排查旧插件

AIR Security的原始研究 于2026年9月17日披露Plugin4Shell:受控插件仓库可能绕过Claude Code、OpenAI Codex、GitHub Copilot和Gemini CLI的提交锁定,使代理取得不同于市场审核版本的代码。披露页面将Claude Code 2.1.179和Codex 0.146.0列为修复版本,并称Copilot尚无补丁、Gemini CLI不会获得专门修复。

这不等于四款代理的所有插件用户均已暴露,也不能证明攻击已经发生。The Hacker News的9月18日核查 未发现真实攻击利用迹象,并进一步区分了Git托管平台、默认市场和自动更新条件;该报道还指出,升级能否自动移除此前可能被替换的插件,目前没有公开答案。

SHA记录没变,实际HEAD却可能变了

插件市场把经过审核的版本固定到特定提交SHA,本意是让同一份代码可以被重复取得。Plugin4Shell利用的不是哈希碰撞,而是检出后的验证缺失:代理把SHA交给Git,却没有确认最终工作目录的HEAD确实指向该提交。

在Claude Code、Codex和Copilot对应的路径中,攻击者需要控制插件仓库,并把形似目标提交哈希的名称设为默认分支。Git可能优先把该字符串解释为分支引用;锁定记录仍显示原SHA,检出的内容却来自攻击者控制的分支。

OpenAI Codex的公开补丁 于2026年7月22日合入主分支,其处理方式是在检出后解析HEAD,只要实际提交与请求的SHA不完全相同就拒绝插件源,并用同名默认分支加入回归测试。这也说明安全边界不能停留在“已向Git传入固定SHA”。

Gemini CLI对应的是另一条解析路径:安装流程取得固定提交后检出FETCH_HEAD。如果仓库默认分支本身名为FETCH_HEAD,Git可能选择该分支,而不是指向已获取提交的记录。两种变体的共同修复原则仍是校验最终HEAD。

GitHub默认来源与外部Git的条件不同

前三款代理的同名分支路径并不适用于所有GitHub仓库。GitHub禁止创建形似完整提交哈希的分支或标签;Bitbucket和部分自建Git服务允许此类名称。因此,Claude Code、Codex和Copilot用户需要重点识别来自Bitbucket、自建Git及其他外部来源的插件,不能把GitHub默认市场与这些来源视为同一风险。

完整攻击链还要求仓库由攻击者控制或已被劫持,恶意名称成为默认分支,代理从该仓库安装或更新插件,并运行最终取得的代码。托管平台允许特殊分支名只是必要条件之一,不能单独证明某个插件已被替换。

“零点击”还依赖后台自动更新。Claude Code和Codex存在默认自动更新场景,但随产品提供的默认目录主要指向GitHub;外部市场的更新可能关闭或需要用户选择。只有同时满足危险托管来源、受控仓库和自动更新等条件,已安装插件才可能在没有新提示的情况下被换入另一份代码。

Gemini CLI不能直接套用这一结论。它的FETCH_HEAD路径不要求分支名伪装成提交哈希,因此仓库位于GitHub不足以单独排除风险。

四款代理的版本与处置矩阵

  • Claude Code:2.1.179被列为修复版本。应先升级到该版本或更高版本,再核对来自Bitbucket、自建Git及外部市场的存量插件。
  • OpenAI Codex:0.146.0被列为修复版本。其公开修复会比较最终HEAD与请求SHA,升级后仍需单独确认旧插件内容。
  • GitHub Copilot:截至2026年9月18日没有公开补丁。仅使用GitHub默认来源不符合已披露的哈希形默认分支条件;组织若允许Bitbucket、自建Git或其他第三方仓库,应暂停相关插件的安装与更新,等待正式修复或安全说明。
  • Gemini CLI:目前没有可确认的修复版本。AIR Security认为该产品不会获得专门补丁并建议迁移到Antigravity,但Google此前保留了企业访问更新,公开信息没有说明这些更新是否覆盖Plugin4Shell;在厂商给出直接说明前,应暂停第三方插件链或完成迁移。

升级代理后仍要核验旧插件

安全版本修复的是今后的检出流程,不能反向证明本地插件此前从未被替换。现有公开资料也没有表明Claude Code或Codex升级时会自动删除、重新下载或逐一验证已经安装的插件。因此,“代理版本已修复”与“存量插件可信”是两个不同结论。

核验时应先建立插件清单,记录市场来源、仓库地址、Git托管平台和本地实际HEAD,再与市场锁定的提交SHA比较。来自Bitbucket或自建Git的插件还应检查默认分支和最近更新时间;无法证明本地副本对应审核提交时,应从可信来源重新安装。

未修复产品需要更严格的边界。Copilot应优先隔离允许哈希形默认分支的第三方来源;Gemini CLI还要覆盖GitHub托管的第三方插件,因为FETCH_HEAD变体不受GitHub哈希形分支限制。只有发现插件内容、执行记录或访问行为异常,才有依据进一步评估是否需要吊销令牌或轮换凭据。

真实利用与厂商响应仍待确认

截至2026年9月18日,公开资料支持的结论是:Plugin4Shell存在可工作的代码替换路径,Claude Code和Codex已有修复版本,Copilot尚无补丁,Gemini CLI没有明确的修复版本;与此同时,尚无该漏洞已被用于真实攻击的公开证据。可复现的远程代码执行风险不能被写成已经发生的大规模入侵。

后续仍需等待GitHub或Microsoft公布Copilot的正式处置,并等待Google明确Gemini CLI企业更新是否覆盖该问题。对已经升级Claude Code或Codex的组织而言,在厂商提供自动复核或清理机制之前,代理升级与旧插件核验仍应分别完成。

分享:

订阅我们的新闻通讯

将最新 Web3、AI 和加密货币新闻直接发送到您的邮箱。

0