系统:运行中
← 返回所有攻击
INDIRECT INJECTION MEDIUM NEW

一个干净的仓库如何诱导编码智能体打开反弹 shell

Mozilla 的 0DIN 团队演示了:一个不含任何恶意代码的公开仓库,可以让 Claude Code 打开反弹 shell——真正的载荷从不存在于仓库中,而是在运行时从 DNS 记录获取。

2026-07-05 // 6 min affects: claude-code, coding-agents, agentic-ides

这是什么?

2026 年 6 月 29 日,SecurityWeek 报道了 Mozilla 0DIN 团队(研究者 Andre Hall 与 Miller Engelbrecht)的一项概念验证,它回答了一个令人不安的问题:一个只掌控某个公开 GitHub 仓库的人,能否在不提交任何一行恶意代码的情况下,对每一个用编码智能体打开该仓库的人取得代码执行?他们的演示给出了肯定答案。一名开发者只是让 Claude Code 做一件寻常的事——“把这个刚克隆下来的项目跑起来”——他的机器上便打开了一个交互式 shell,并回连到攻击者的服务器。

其结果是一类专属于编码智能体的间接提示注入。这些工具被授予了读取文件、执行 shell 命令和发起网络调用的权限。一旦这种权限被委派,仓库中不可信的内容——安装说明、README 文件,乃至一条错误信息的文本——就成了智能体会去遵循的指令通道,而其间并没有人真正逐步审阅每一步。

工作原理

公开的概念验证把攻击拆成三个部分,单独看每一部分都平淡无奇。仓库在 README 或 issue 中给出看似正常的首次安装说明。一个本地软件包被写成”失败即关闭”:如果你在执行 init 步骤之前就使用它,它会抛出一条清晰而有帮助的错误,提示你去运行该步骤——这是完全普通的开发模式。而 init 步骤会调用一个安装脚本,该脚本从外部来源获取一个配置值,然后执行它。

关键之处在于这个值的来源。它并不出现在仓库中,而是由攻击者控制的 DNS TXT 记录提供。从概念上讲,安装脚本所做的等同于”解析这条 DNS 记录,然后执行它返回的内容”——即把获取到的值直接送入 shell 这一广为人知的危险反模式。仓库从不说明该值的内容,而且它经过编码,因此无论在磁盘上还是在网络上,都不会出现明文的反弹 shell 特征。真正的载荷——一行经典的反弹 shell——在此有意隐去:理解该发现并不需要它。

随后这条链条会自行运转。智能体读取文件并安装依赖,尝试使用应用,撞上预期中的错误,读取错误信息,并把文档中记载的修复当作寻常的错误恢复来执行。该修复触发脚本,脚本解析 DNS 记录,解码后的命令便以开发者本人的身份运行。正如研究者所总结的,智能体”从未决定要打开一个 shell——它决定的是去修复一个错误”。反弹 shell 与智能体真正评估过的一切之间隔着三层间接:一条它信任的错误信息、一个去获取某个值的脚本,以及一条它从未看到的 DNS 记录。在开发者的终端上,唯一可见的输出只有两行无害的”环境就绪”文字。

为什么重要

已演示的影响是一个以开发者权限运行的完整交互式 shell。这会暴露环境中的所有机密——云密钥、API 密钥、源代码管理令牌——并给攻击者留出一个建立持久化的窗口(放置 SSH 密钥、添加计划任务),赶在 shell 关闭之前完成。由于载荷驻留在 DNS 记录而非代码中,它可以随时替换,无需任何提交,工具也没有任何可供对比的差异;而一个在招聘启事、教程或聊天消息中分享的仓库链接,就能触及每一个用编码智能体打开它的人。

困难之处在于,没有任何一方防守者能看到全貌。对仓库的静态分析看到的是一次 DNS 查询。网络监控看到的是一次普通的域名解析。智能体看到的是一个已预先授权的安装步骤。恶意只存在于这三者的组合之中——仓库、DNS 基础设施与开发者对智能体的信任——而这三个系统从不被放在一起审视。这是一项研究者演示,而非已报告的入侵:没有确认的实际受害者,应当把它读作对一处结构性缺口的警示,而非一起正在发生的事件。

防御

最直接的修复是让人看清一个安装步骤究竟会做什么。智能体不仅应当展示它即将运行的命令,还应展示该命令所调用的任何脚本的内容,以及该脚本在运行时获取的一切,从而使”执行文档中记载的修复”这一动作,不会悄然扩展为执行一个来自带外的值。请把命令的生成与命令的执行视为两个彼此独立的信任决策。

对团队和对个人开发者而言,可行的要点都汇聚到最小权限与隔离上。请在沙箱或一次性容器中,针对不熟悉的仓库运行编码智能体,容器内不含任何真实凭据,这样被劫持的安装步骤便触及不到任何有价值的东西。不要把生产机密导出到智能体所在的 shell 环境中。将出站网络流量限制到白名单,使新打开的 shell 无法”回拨”外部;并对那些去解析 DNS TXT 记录、或把获取到的内容送入解释器的安装流程保持警惕。最重要的是,无论 AI 工具如何推荐,都要把并非你自己编写的仓库中的安装说明与脚本当作不可信代码——这正是”致命三要素(lethal trifecta)“与”智能体二选一规则(Agents Rule of Two)“早已给出的纪律:绝不让一个无人监督的智能体同时具备访问私有数据、接触不可信内容和对外通信这三项能力。

状态

这是一支受认可的研究团队披露的概念验证,而非带有已分配标识符的产品漏洞。下表汇总关键事实。

项目详情
来源0DIN(Mozilla),《Clone This Repo and I Own Your Machine》
研究者Andre Hall、Miller Engelbrecht
披露2026 年 6 月(6 月 29 日经 SecurityWeek 广泛报道)
技术间接提示注入 → 智能体错误恢复 → 托管于 DNS 的载荷 → 反弹 shell
演示对象Claude Code;适用于具备自主 shell 访问能力的编码智能体
影响以开发者身份实现 RCE、机密外泄、持久化
状态研究者 PoC;无确认的实际利用

所引用的两个来源均来自最近 30 天。其教训是架构层面的:只要编码智能体在执行一个”修复”时不揭示该修复最终会运行什么,不可信的仓库就仍然是一条执行通道——防御在于沙箱、出站流量控制,以及把第三方安装步骤当作不可信代码来对待,而不在于到仓库里去搜寻那些从未存在过的恶意字符串。

Sources