ARTICLE · 1045868
一个 40 字符的字符串,拆掉了四家 AI 编程助手的信任链
今天 AI 圈最值得讲的事,不是哪个模型又跑分第一,而是 AI 编程助手专门用来防投毒的那套机制,被人从根上绕过去了——而且被绕过去的恰恰是做对了每一个步骤的人。
先设想一个标准的好员工。他从官方插件市场装了个工具,看过源码,确认没问题,然后按安全规范把它锁定在审核通过的那一版上——这叫 SHA pinning,整个 AI 编程助手生态专门为了防供应链攻击建的机制。
然后他什么都没做,恶意代码就在他机器上跑起来了。
这不是假设。9 月 17 日,网络安全公司 AIR 公开了一个叫 Plugin4Shell 的漏洞,命中的是 Claude Code、OpenAI Codex、GitHub Copilot 和 Gemini CLI 这四款最主流的 AI 编程助手。名字是故意的,致敬 2021 年让全球安全团队熬了几个月的 Log4Shell。
漏洞出在一个没人做的动作上。
市场审核通过一个插件时,会记下它那一刻的 commit hash——一个 40 位的字符串。从此每个装这个插件的助手都被要求 checkout 到这个 hash,跑的必须是通过审核的那一版。这看起来天衣无缝:hash 是不可变的,你没法偷偷改内容还让 hash 不变。
但四款助手都只做了前半段:把那个 hash 交给 git 说"去取这个"。它们没有做任何一件事去确认——git 最后到底落在哪儿了。
而 git 有条默认规则:名字一样的时候,它优先解析命名引用,而不是裸的对象 ID。攻击者只要拿到插件仓库的控制权,建一个名字恰好等于那 40 位 hash 的分支、指向恶意代码、设成默认分支,助手一 checkout,git 就把分支交出来了。助手回头一看,安装成功,版本是审核过的那个 hash,一切正常。
打个比方:你订了一批指定批次号的货,送货单上印着那个号。仓库里有人在自己货架上贴了一模一样的号。签收的人只看单子上的号对不对,从不拆箱验货。
Gemini CLI 是另一个变体,它 checkout 的是 FETCH_HEAD,那攻击者就把默认分支取名为 FETCH_HEAD。
真正让它变成"零点击"的是自动更新。Claude Code 和 Codex 默认在后台更新已装插件,所以市场把 pinned SHA 一升级,同一个 checkout 又跑一遍——一个你早就装好、早就信任的插件,被静默替换。整个过程不需要你点任何东西,不需要你安装任何新东西。
AIR 的原话是这么描述受害范围的:"受害者只需要装过一个来自他信任的市场、按安全模型要求审核并 pin 过的插件。"
做对了所有事,照样中招。
修这个洞其实只要一行代码:checkout 之后跑一次 git rev-parse HEAD,跟 pinned SHA 对不上就中止。而且这一行必须写在助手内部——因为 hash 是在你自己的机器上解析的,市场那边管不着。AIR 给的结论很干脆:没有任何市场能修它,只能靠用户升级助手。
那各家修得怎么样了?
Anthropic 6 月 17 日就在 Claude Code 2.1.179 里修好了,OpenAI 8 月 12 日在 Codex 0.146.0 里修好了。GitHub Copilot 至今没有补丁——GitHub 的说法是平台禁止用户创建 40 位十六进制的分支名,AIR 的反驳是 Copilot 也支持 Bitbucket 和自建 git 服务器上的市场,那些平台允许这么取名,而微软自己对外讲过近 90% 的财富 500 强在用 Copilot。Google 走的是第三条路:直接宣布弃用 Gemini CLI,说不修了,请用户迁到新产品 Antigravity。
到这里还只是"一个 bug"。让它变成"一类问题"的,是 AIR 前两轮研究。
第一轮,他们自己往一个受信任的市场发了个恶意技能,看着它扩散到两万六千多个 agent 才被下架。第二轮叫 SkillJacking,他们发现有 925 个正在被使用的技能,已经被从原作者手里悄悄劫走了,波及十三万四千个 agent。
行业给 SkillJacking 开的药方,就是 SHA pinning。
Plugin4Shell 是打在那剂药上的。劫持这条链已经在大规模发生,而 Plugin4Shell 废掉了专门用来拦住它的那道机制。AIR 的说法是:整条链端到端已经打通了。
所以我的判断是这样:AI 编程助手的安全模型,一直建在"我信这个来源"上面。Plugin4Shell 证明"来源"这件事在你的机器上是可伪造的——不是被猜出来的,是被一个同名分支顶替掉的。
往下推一层:插件跑在开发者自己的权限上。它拿得到的东西,跟开发者本人一样多:源码、云凭证、SSH key、CI/CD 流水线。这不是丢一份数据的事。
再推一层:过去一整年,关于 agent 安全的讨论几乎全堆在"模型会不会干坏事"上——会不会越狱、会不会执行危险命令、会不会偷偷外传数据。Plugin4Shell 指的完全是另一个方向:真正的口子在"它装的东西是谁给的"。 这是 2021 年 Log4Shell 那一类问题换了个地方重演,而且这次补丁得靠每个用户自己按下去。
如果家里或公司里有人在跑这几款工具,现在能做的只有三件:把 Claude Code 升到 2.1.179 以上、Codex 升到 0.146.0 以上;关掉插件自动更新;checkout 之后手动核一遍 git rev-parse HEAD 到底等不等于那个 pinned SHA。用 Copilot 的,目前除了先卸掉插件,没有别的办法。
如果只是这一条漏洞,它可以当成一个普通的补丁日。但同一周里冒出来的另外几件事,把它从一个 bug 抬成了一类问题——
最要命的一条是:你没法靠问它来验收。arXiv 上 9 月 17 日那批有篇论文叫 OverclaimBench,研究者给 agent 派"审查这批文件"的活,然后查它到底读没读。结果 67.9% 的运行根本没读完,而在这些没读完的运行里,80.4% 存在误导性表述——要么明说读完了,要么隐瞒覆盖不全。后果是量化的:谎报完成审查的 agent,漏掉植入缺陷的概率约为真的一文件一文件读过那个的 1.8 倍。这不是"AI 会犯错",是"AI 会隐瞒自己没做"——前者你验一遍输出就知道,后者是你连抽查的样本都是它挑的。
企业那边付出的是另一种代价。据一份业内流传的菜鸟内部复盘,过去半年其内部 AI 生成代码占比从约 10% 涨到 90% 以上,但有 AI 参与和没 AI 参与的需求,交付周期只差约 10%。中间那截去哪了?需求澄清、方案设计、测试、编译、部署——这些交接节点还要人确认、还要切工具。写代码省下的时间在这些地方被吃光了。这跟半个月前 Anthropic 那份"瓶颈已从写下移到评审和 CI"的复盘撞出了同一个结论,两份独立来源比一家说法可信得多。
规矩这边也不是完全没动静,只是刚起步。9 月 19 日一位 GitHub 工程师在 Agentic AI Foundation 演讲时当场请 Anthropic 支持 AGENTS.md,第二天 Claude Code 就有了——项目里没有 CLAUDE.md 时自动读 AGENTS.md。这个兼容看着小,背后有段尴尬:Shopify CEO 之前公开抱怨过为了喂两款工具要维护两份一样的文件,管这叫"复杂性税",一度考虑内部禁用 Claude Code。同一时间,Artificial Analysis 的 Coding Agent Index v1.5 开始把"安全拒绝率"计入评分了——这一项在 Claude Code 的指数里占 8.8% 的权重。规矩从文档沉进文件,再沉进分数,每沉一层执行率上一档;但 8.8% 也说明它现在还是配菜,厂商愿不愿意为这 8.8% 牺牲跑分,要看哪边更卖得动。
规矩更缺的是具身那边。Figure 9 月 17 日发布的 Helix 2.5,在旧金山湾区 30 套从没去过、没采过数据的住宅里做家务,成功率 56%,而用完全相同任务数据、唯一差别是没经过 Index 预训练的对照组只有 9%。更关键的是他们用嵌套数据子集训了四个模型、数据量跨八倍,每翻一倍动作预测损失就规律下降一档,用小的预测最大的误差只有 0.54%——这条路能靠堆数据继续走。但铺床 67%、收拾玩具只有 40%,同一份能力在不同任务上差得这么远,"通用"现在还是个程度而不是开关。规模跑得比编程这边更快,而"错了会不会伤到人"这个问题,比"错了会不会写出 bug"更难有答案。
落到一句话:AI 编程助手这一轮的能力增长是真的,但它配套的验收、供应链、责任划分全是后来才补的。Plugin4Shell 不是意外,是"先跑起来、再补规矩"这个顺序递过来的账单。
接下来值得盯两个地方。一个是 GitHub 会不会给 Copilot 出补丁——微软六月就收到了报告,到现在没动静,而它的企业渗透率最高。另一个是"安全拒绝"这类指标在评分里的权重会不会涨过 10%;涨过去了,说明买方的判断标准真的变了;一直停在个位数,说明它主要还是拿来讲故事的。