打开网易新闻 查看精彩图片

Mozilla 旗下 0din 团队的研究人员发现,Claude Code 可被操控,在开发者设备上悄然开启一个隐藏的反向 Shell(远程控制通道)。

整个攻击过程无需在克隆的项目中植入任何恶意代码,所有可见文件均可通过常规审查,不会引发任何警觉。危险指令并非预先埋伏在代码中,而是在运行时从一条 DNS 文本记录中动态获取——而这类记录根本不在任何扫描工具的检测范围之内。

攻击链:从一条错误提示到完全失控

此次攻击以一个普通的 Markdown 文件为起点,其内容仅是说明如何安装一款名为 Axiom 的常见监控工具。在未完成初始化的情况下运行该工具,会弹出一条平平无奇的错误提示,并指示用户执行一条特定的配置命令。

研究团队指出,这种模式与开发者日常排查问题的操作高度相似,这也正是它能够顺利规避警惕的核心原因。Claude Code 出于"帮助用户"的本能,自动遵循了文档中的这条指令,将其视为常规的错误恢复操作加以执行。

就是这一条命令,触发了一段隐藏的 Shell 脚本。脚本随即悄悄向攻击者完全掌控的 DNS 文本记录发起查询,该记录中包含一段经过 Base64 编码的反向 Shell 命令,命令在静默状态下执行后,直接连回了攻击者的远程服务器。

一旦获得访问权限,攻击者还可植入 SSH 密钥或设置隐藏的定时任务(cron job)以维持持久控制。更令人担忧的是,只需将一个包含恶意仓库的链接发布在招聘帖或聊天消息中,每一位打开该链接的开发者都将面临同等风险。

传统安全工具为何形同虚设

常规安全工具——无论是杀毒软件还是防火墙——均未能察觉这一漏洞,原因在于每个独立步骤单独来看都毫无异常。静态代码扫描工具只识别到了一次普通的 DNS 查询,无从判断其背后的恶意意图;网络监控系统记录到的也不过是正常的域名解析请求;而 Claude Code 本身则将该命令视为已获授权的常规配置操作予以执行。

0din 团队强调,编程智能体在执行任何脚本之前,必须严格核查该脚本的实际运行内容。他们同时告诫开发者:无论一个陌生仓库的配置文件看起来多么正常,都不应想当然地认为它是可信的。

此次事件也揭示出一个更深层的问题:基于大语言模型构建的智能体 AI 工具,可能需要远比现在更为强健的运行时安全防护机制。在这类智能体真正具备评估指令实际执行内容的能力之前,类似的间接攻击将始终难以防范。

这一教训并不局限于 Claude Code 本身——大多数智能体 AI 系统在面对间接提示注入攻击时,都存在相似的盲区。就目前而言,对陌生自动化操作保持警惕、将其视为真实风险加以对待,仍是普通开发者所能采取的最可靠防护手段。

Q&A

Q1:Claude Code 是怎么被攻击者利用的?

A:攻击者通过在项目中放置一个普通的 Markdown 安装说明文件,诱导 Claude Code 执行一条"错误恢复"命令。该命令触发隐藏脚本,脚本再从攻击者控制的 DNS 文本记录中获取经 Base64 编码的反向 Shell 命令,最终在开发者设备上悄然建立与攻击者服务器的连接,整个过程无需任何恶意代码预先植入项目文件中。

Q2:为什么杀毒软件和防火墙检测不到这种攻击?

A:因为攻击链中的每一个步骤单独来看都完全正常——DNS 查询是常见的网络操作,Markdown 文件通过代码审查,Claude Code 也只是执行了一条"文档记录在案"的配置指令。静态扫描工具、网络监控和防火墙均无法将这些分散的正常行为关联成一次攻击,因此整个过程对传统安全工具几乎是隐形的。

Q3:开发者应该如何防范这类针对 AI 编程工具的攻击?

A:0din 团队建议,开发者在使用编程智能体时,应在执行任何脚本前仔细核实其实际运行内容,不要因为配置文件看起来普通就默认信任陌生仓库。此外,对来源不明的仓库链接(尤其是通过招聘帖、聊天消息传播的)应保持高度警惕,将所有陌生的自动化操作视为潜在风险。