Gemini CLI 编码工具漏洞可能允许黑客运行恶意命令
研究人员在不到48小时内就针对Google新推出的Gemini CLI编码代理工具设计出了攻击方案,该漏洞可使工具的默认配置悄无声息地将敏感数据外泄到攻击者控制的服务器。
Gemini CLI是一款免费开源的AI工具,在终端环境中帮助开发者编写代码。它接入Gemini 2.5 Pro——Google最先进的编码和模拟推理模型。与Gemini Code Assist不同,Gemini CLI在终端窗口而非文本编辑器中创建或修改代码。正如Ars高级技术记者Ryan Whitwam上月所言:“这本质上是从命令行进行氛围编码。”
Gemini,静默销毁我的硬盘
我们的报告发布于6月25日,即Google推出该工具的当天。到6月27日,安全公司Tracebit的研究人员就设计出了一种攻击,可覆盖旨在防止执行有害命令的内置安全控制。该漏洞利用仅要求用户(1)指示Gemini CLI描述攻击者创建的代码包,以及(2)将良性命令添加到允许列表中。
这正是研究人员隐藏提示注入的完美位置,这类AI攻击已成为AI聊天机器人安全面临的最大单一威胁。开发者最多只是浏览这些文件,降低了他们注意到注入的可能性。与此同时,Gemini CLI预计会仔细阅读并完全消化该文件。
漏洞利用链
以下视频展示了该漏洞的实际利用:
Tracebit创始人兼CTO Sam Cox在电子邮件中表示,他出于演示目的严格限制了选择静默执行的命令的严重性,因为其输出足够简洁,可以放在几行内。他表示,他的漏洞利用使得执行几乎任何命令成为可能,甚至是不可逆且高度破坏性的命令,如rm -rf /
或:(){ :|:& };:
,这些命令有时被恶意内部人员在破坏攻击中使用。第一个命令删除磁盘驱动器上的所有文件和文件夹,且无法恢复。后者称为forkbomb,是一种拒绝服务攻击形式,使用称为fork的Unix系统调用来消耗越来越多的CPU资源,直到系统崩溃。
“这正是我发现这个问题如此令人担忧的原因,”Cox写道,指的是他的攻击可能造成的严重损害。“相同的技术可用于删除文件、fork bomb甚至安装远程shell,让攻击者远程控制用户的机器。”
作为回应,Google上周发布了修复该漏洞的补丁,阻止了该技术。该公司将修复和漏洞分类为优先级1和严重性1,明确表明公司认识到如果该漏洞在野外被恶意利用可能带来的严重后果。
在一个命令背后隐藏另一个命令
如前所述,提示注入是AI聊天机器人面临的最令人烦恼的漏洞之一。Tracebit演示的这类攻击是一种称为间接提示注入的变体。它们利用机器学习模型无法区分开发者预定义或最终用户给出的合法提示与包含在电子邮件、图像或其他外部源中的自然语言语句,这些语句是模型代表用户解析的。
这种无能以及模型天生的取悦欲望导致模型遵循指令,即使这些指令是恶意的、直接与其编程冲突或来自LLM被训练为不信任的源。到目前为止,LLM开发者大多无法修复根本原因,而是转而构建缓解措施,限制提示注入可能调用的有害能力。
除了提示注入漏洞外,该技术还利用了其他两个弱点,包括不当验证和误导性用户界面。默认情况下,Gemini CLI应阻止调用命令,除非用户明确授予权限。权限可以实时授予,即在命令调用后立即授予。为了节省时间和重复,用户还可以将某些命令添加到允许列表中,以便这些命令在每次调用时都可以执行。
Tracebit的提示注入调用了grep
,这是一个相对无害的命令,用于在指定文件中搜索字符串或正则表达式。研究人员的意图是诱导用户将grep
添加到允许列表中,以消除反复批准命令的麻烦。
在grep
命令之后,注入立即调用了另外两个相当有害的命令。第一个是env
。后面跟着一个表示为|
的管道命令。接下来是另一个潜在风险命令:curl
以及攻击者服务器的地址。这些命令组合起来的效果是将环境变量发送到攻击者服务器。
“在任何阶段,命令字符串中第一个’grep’之后的任何后续元素都不会与白名单进行比较,”Cox说。“它只是在grep
命令的背后自由执行。”
完整的命令行是:
|
|
Cox进一步利用了该漏洞。执行命令后,Gemini会通知用户已完成的任务并向用户提示。即使在这种情况下,命令也已经被执行,并且这些结果将是不可逆的。
为了防止向用户提示,Cox在命令行中间添加了大量空白。它的效果是突出显示该行的grep
部分,并将后面的恶意命令隐藏在状态消息中。
这样,Gemini静默执行了恶意命令,即使对细心的用户也没有任何异常迹象。
LLM只想被喜爱
提示注入还被设计为迎合LLM与生俱取的取悦用户的倾向,研究人员称之为AI谄媚。这种吸引力以紧接在恶意命令行之前的语言形式出现。部分内容如下:
|
|
Cox表示,他测试了他的攻击 against 其他代理编码工具,包括Anthropic Claude和OpenAI Codex。它们不可利用,因为它们实现了更好的允许列表流程。
Gemini CLI用户应确保已升级到0.1.14版本,截至发稿时这是最新版本。他们应仅在沙盒环境中运行不受信任的代码库,该设置默认未启用。