GitHub Copilot CLI可被诱导读取开发者机器上的敏感文件,并仅通过一个网页就将其内容发送给攻击者。
Adversa AI的安全研究人员表示,这种新的攻击技术被称为"加密上下文注入"(Cryptographic Context Injection,简称CCI),它将恶意指令隐藏在加密内容中。当Copilot CLI使用自身的代码执行环境解密这些内容时,这些指令会被当作可信上下文处理,从而影响智能体接下来的行为。
在一次演示中,Adversa研究人员成功让Copilot读取了包含机密信息的".env.prod"文件,并将其内容发送到攻击者控制的终端。该研究人员在博客文章中写道:"整个攻击链耗时28秒,无需确认,且整个对话记录中没有任何地方提及目标主机名称,也没有迹象表明文件内容已离开本机。"
据Adversa介绍,这种攻击并非普遍适用的一键式入侵手段,因为它需要Copilot CLI运行在自动驾驶模式下,并且所使用的模型愿意执行解密后的指令。GitHub已确认该发现属实,但拒绝将其视为一个漏洞,理由是用户明确要求Copilot获取攻击者控制的内容,同时赋予了其自主行动的完整权限。
"他们表示未来可能会让该功能变得更严格,但目前没有具体公告,并判定该报告不符合GitHub漏洞赏金计划的条件,"Adversa表示。研究人员对此评估表示异议,他们认为这一说法无法解释:为何Copilot在以明文形式呈现相同指令时会拒绝执行,但在这些指令经过加密并在其执行环境中解密后却会予以接受。
GitHub尚未立即回应CSO的置评请求。
研究人员解释,攻击可能始于用户运行Copilot CLI并要求其获取某个URL。该网页会包含加密指令,随后智能体会被要求使用两个候选密钥对其进行解密。
其中一个密钥是合法密钥,而另一个则是一个模板,只能通过读取本地机器上的文件才能补全。攻击链接下来会让智能体尝试准备这两个密钥,具体做法是读取目标文件并将其内容添加到模板中。
这一读取文件的行为本身就是实际的窃取过程。
重建出的密钥虽然解密失败,但它已经达到了预期目的,之后Copilot会使用合法密钥进行解密。解密后的指令随后会要求智能体发起另一次网络请求,将此前收集到的文件内容发送到攻击者的终端。
不过,Copilot的模型选择会影响最终结果。
研究人员表示,微软的mai-code-1.1-flash模型在50%的测试运行中完整执行了整个攻击链,而通过Copilot提供的两款GPT-5.6模型则始终拒绝执行相同的恶意载荷。Adversa指出,当模型选择设置为"自动"时,在某些会话中,系统会自动分配存在漏洞的模型,而用户并未进行选择,也看不到究竟是哪个模型在处理该工作流程。
尽管GitHub拒绝将其定性为缺陷或修复相关底层行为,Adversa仍建议防御者关注围绕加密载荷出现的任何可疑操作序列:不受信任的网页内容进入智能体、代码执行、读取本地文件,随后智能体又发起一次看似无关的外部连接。
本文最初发表于CSO网站。
Q&A
Q1:什么是加密上下文注入攻击?
A:加密上下文注入(CCI)是一种新型攻击技术,攻击者将恶意指令隐藏在加密内容中。当Copilot CLI用自身代码执行环境解密这些内容时,指令会被当作可信上下文,进而影响智能体后续执行的操作。
Q2:Copilot CLI是如何被诱导泄露文件的?
A:攻击者让用户的Copilot CLI访问含有加密指令的网页,诱导其用两个密钥尝试解密,其中一个密钥模板需要读取本地文件才能补全,这个读取过程本身就完成了窃取,随后智能体会用合法密钥解密并将文件内容发送给攻击者。
Q3:GitHub对此问题是如何回应的?
A:GitHub确认了该发现,但拒绝将其视为漏洞,理由是用户明确要求Copilot获取攻击者内容并赋予了自主行动权限,同时判定该报告不符合漏洞赏金计划条件,但表示未来可能会让相关功能更加严格。
