Antigravity find_by_name:当原生工具调用跳过 Secure Mode
2026 年 4 月 20 日,Pillar Security 披露 Google Antigravity 的 find_by_name 工具中一个未净化的参数将文件搜索变成任意代码执行——并绕过了该 IDE 最严格的沙箱。
What is this?
2026 年 4 月 20 日,Pillar Security 研究员 Dan Lisichkin 发表了《Prompt Injection leads to RCE and Sandbox Escape in Antigravity》,公开披露了 Google Antigravity 中的一个漏洞——Google 的代理型 IDE,由 Gemini 驱动的代理在开发者机器上操控代码编辑器和 shell。The Hacker News 和 CSO Online 于 2026 年 4 月 21 日跟进披露,Dark Reading 和 CyberScoop 进行了后续报道,Cloud Security Alliance Labs 也发布了一份研究备忘。
该缺陷小而精确:Antigravity 的 find_by_name 工具的 Pattern 参数未经净化便传递给底层的 fd 二进制。以 - 开头的 Pattern 值会被 fd 解释为标志而非搜索词,而 -X(exec-batch)标志会将文件搜索变成任意命令执行。结合代理在工作区中创建文件的正常能力,这一原语在 Antigravity 自己的 Secure Mode(IDE 最严格的沙箱)下产生远程代码执行。
Pillar 于 2026 年 1 月 7 日向 Google 报告该漏洞。Google 于 2026 年 1 月 24 日接受报告,于 2026 年 2 月 28 日标记为已修复,并于 2026 年 3 月 26 日发放 VRP 奖金,然后在 2026 年 4 月 20 日公开披露。90 天负责任披露期早已过去;该漏洞已修补。
How it works
find_by_name 被记录为对 fd(find 的快速替代品)的一个轻量便利包装。它接受一个带有 Pattern、Extensions、SearchDirectory、MaxDepth 等字段的 JSON 对象。在工具内部,Pattern 被插入到 fd 命令行中,既没有参数终结符(--),也没有过滤 shell 风格的前导短横线。攻击链的两个要素由此可见:
- 当
Pattern以-开头时,fd将其视为标志。 fd -X <bin>针对每个匹配的文件执行<bin>,并将匹配的文件名作为参数传入。
# 概念结构——仅用于说明,来自 Pillar 的公告。
# 这是已发布并已修补的漏洞类别;此处没有任何新内容。
# 1) 间接提示注入通过一个不受信任的文件进入 Antigravity
# (被克隆仓库的 README、源代码中的注释)。
# 注入的文本请求代理:
#
# - 在工作区创建一个文件(被允许的操作)
# - 然后用以 "-Xsh" 开头的 Pattern 调用 find_by_name
#
# 2) 原生工具调用在 Secure Mode 进行任何评估之前就已触发,
# 因为代理将 find_by_name 归类为原生工具,而不是 shell 命令。
#
# 3) fd 收到的是一个"标志"而非模式,切换到 exec-batch 模式,
# 并通过 sh 执行已暂存的文件。
#
# 来自公告的具体载荷结构:
# Pattern: "-Xsh"
# Extensions: ["orange"] # 匹配已暂存的文件
# SearchDirectory: <工作区>
#
# 结果:每个暂存的 a.orange 文件都会被交给 sh 执行,运行代理
# 之前被指示写入工作区的任何内容。
让这一漏洞超越普通参数注入漏洞的细节,是它绕过了 Secure Mode。Antigravity 的 Secure Mode 被记录为阻止工作区外写入、限制网络出站、并强制 shell 命令在沙箱内运行。这些控制在此处都未触发,因为 find_by_name 被分发为原生工具,而非 shell 命令。Secure Mode 强制执行的安全边界位于代理在此代码路径中永远到达不了的某个检查之后。公告确认该漏洞利用在 Secure Mode 开启、Auto Execution 关闭的情况下成功——这是 IDE 已发布的最严格配置。
空格字符在 Pattern 路径上被转义,因此注入的标志不能后跟内联参数。Pillar 通过先将载荷暂存为一个单独的文件(被允许的操作)来绕过这一点,然后调用 find_by_name,使其匹配将该文件传给 sh。两个普通操作通过一个普通工具串联起来,就产生了 RCE。
Why it matters
Antigravity 一案是 2026 年代理型 IDE 中工具参数注入的典型例子。即使您不使用 Antigravity,以下三点观察也值得理解。
第一,提示注入已不再是攻击链中有趣的部分。注入的文本只有一行。真正的工作由工具的设计完成:一个参数从”LLM 控制的数据”穿越到”传递给 shell 工具的 argv”,中间没有参数终结符。同样由 Pillar 记录的 Cursor 的 CVE-2026-22708 遵循相同的形式。4 月份记录的 Anthropic MCP STDIO 传输的 CVE 类别也是如此。2026 年的攻击面就是”LLM 将数据传递给工具”与”工具将这些数据解释为命令结构”之间的差距。
第二,“原生工具”分类是一个承重概念,但很少有用户理解它。Antigravity 的威胁模型假设将 shell 命令置于 Secure Mode 之后就能覆盖危险操作。在实践中,一个包装 fd 的工具能做 sh 能做的同样的事情,只是通过不同的代码路径。shell 与原生的区分在代理内部是有意义的,但对操作系统不可见,作为安全边界毫无用处。
第三,间接注入路径意味着用户不需要被精心设计的手段欺骗。克隆一个仓库、打开一个文件、请求代理总结它——其中任何一个都足以让嵌入的指令进入代理的上下文。已发布的漏洞利用不需要任何身份验证、任何被入侵的账户、任何恶意扩展。
Defenses
漏洞本身已在 Antigravity 中修补。漏洞类别没有。
第一道防线,无论是在 IDE 厂商层还是在任何内部代理栈中,就是在工具边界终止参数。每当 LLM 提供的字符串被插入到命令行中时,前置 --,根据参数适用的字符白名单进行验证(文件名模式不会以 - 开头),并拒绝包含 shell 风格标志或路径穿越的输入。此处的修复只有一行输入验证。漏洞之所以存在,正是因为缺少了这一行。
第二道防线是按效果而非按包装来分类工具调用。如果一个工具最终能执行二进制文件、运行脚本或写入工作区之外,它就应当与原始 shell 命令处于同一沙箱边界之后,不管代理代码是否将其标记为”原生”。Antigravity 的 Secure Mode 应当——并在补丁之后会——以评估 run_in_terminal 的方式来评估 find_by_name。运行自己代理的应用团队应当对每个工具审计相同的属性。
第三道防线是在代理运行时进行进程隔离。在容器或虚拟机中运行代理,除了工作仓库之外不挂载主机文件系统,除非某个任务明确需要否则不允许出站网络,并使用与开发者账户分离的身份。Antigravity 漏洞利用的逃逸路径包括写入 ~/.zshrc 和启动原生应用程序;一个隔离的运行时将那个爆炸半径收缩到一个一次性沙箱之中。
第四道防线是将不受信任的仓库视为不受信任的代码,而非数据。把一个公开仓库拉进代理型 IDE,是 2026 年版的”打开陌生人发来的附件”。如果必须打开,先冷启动打开,关闭或仅设为只读代理,并在任何代理功能接触文件树之前对其运行安全审查工具。
另一项强化步骤:订阅这条级联。Antigravity 公告交叉引用了 Cursor 的 CVE-2026-22708、Anthropic MCP STDIO 类别和 Microsoft Semantic Kernel RCE 链(CVE-2026-25592、CVE-2026-26030)。任何允许模型用未充分验证的参数调用工具的框架,都是下一个条目的候选。订阅 OX Security、Pillar 和 CSA 的披露源,比等待自己出事故便宜得多。
Status
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| Pillar Security 公告 | ”Prompt Injection leads to RCE and Sandbox Escape in Antigravity” | 2026-04-20 | 主要披露;在 Secure Mode 开启情况下完整 PoC |
| 媒体报道 | The Hacker News、CSO Online、Dark Reading、CyberScoop | 2026-04-21 | 独立佐证 |
| CSA Labs 研究备忘 | Agentic IDE prompt injection sandbox escape | 2026-04 | 定性为系统性的代理型 IDE 类别 |
| 向 Google 初次报告 | Pillar → Google AI VRP | 2026-01-07 | 当日确认收到 |
| 修复发布 | Google Antigravity | 2026-02-28 | 报告后 52 天 |
| VRP 奖金 | 2026-03-26 | AI 专项类别 | |
| 相关公告 | Cursor CVE-2026-22708、Anthropic MCP STDIO、Semantic Kernel CVE-2026-25592 / CVE-2026-26030 | 2026-02 至 2026-04 | 相同根本模式:未充分验证的工具参数到达 shell |
Antigravity 的故事简短而值得记住。一个缺失的 -- 就是文件搜索与远程代码执行之间的区别。今天市场上每一个代理型 IDE 都拥有几十个 find_by_name 类的工具,而其中大多数是在”工具参数注入”这个短语被任何人使用之前设计的。请相应地审计。
Sources
- → https://www.pillar.security/blog/prompt-injection-leads-to-rce-and-sandbox-escape-in-antigravity
- → https://thehackernews.com/2026/04/google-patches-antigravity-ide-flaw.html
- → https://www.csoonline.com/article/4161382/prompt-injection-turned-googles-antigravity-file-search-into-rce.html
- → https://cyberscoop.com/google-antigravity-pillar-security-agent-sandbox-escape-remote-code-execution/
- → https://www.darkreading.com/vulnerabilities-threats/google-fixes-critical-rce-flaw-ai-based-antigravity-tool
- → https://labs.cloudsecurityalliance.org/research/csa-research-note-agentic-ide-prompt-injection-sandbox-escap/