DuneSlide:提示注入逃逸 Cursor IDE 沙箱,直达系统级 RCE
Cato AI Labs(2026 年 7 月 1 日)表明,一条被投毒的提示——经由 MCP 服务器或网页结果——即可覆写 Cursor 的沙箱二进制文件,实现零点击的系统级 RCE。已在 Cursor 3.0 修复。
这是什么?
2026 年 7 月 1 日,Cato AI Labs(Itay Ravia)发布了 DuneSlide: Two Critical RCE Vulnerabilities via Zero-Click Prompt Injection in Cursor IDE。文章描述了 AI 代码编辑器 Cursor 中两个相互独立的缺陷——Cursor 称超过半数的《财富》500 强企业在使用该工具——攻击者借此可让一条看似无害的提示逃出编辑器的命令沙箱,并在开发者机器上执行任意代码。两个缺陷评分均为 9.8/10,已在 Cursor 3.0(2026 年 4 月 2 日发布)中修复;此前所有版本均受影响。该研究以防御为出发点,未观察到实际野外利用。
触发方式是间接提示注入:攻击者从不在你的编辑器中输入。他把指令藏在你的智能体代你读取的内容里——通过 Model Context Protocol(MCP)连接的服务,或网页搜索返回的页面——一次普通的提问便把隐藏指令一并带入。无需点击、无需批准弹窗,故称“零点击”。DuneSlide 的特别之处在于其目标:提示注入越过了模型层,重新激活了那些此前无人视为攻击者可达的代码路径中的经典文件写入缺陷。
工作原理
Cursor 的 2.x 分支默认在沙箱中执行智能体发出的终端命令,且不对每条命令逐一征求批准——这是为对抗“批准疲劳”而做的有意取舍。两个缺陷遵循同一套路:诱使智能体写入一个本不应被允许写入的文件,再借这次写入关闭沙箱。 在 macOS 上,最有价值的目标就是沙箱二进制文件本身(应用程序包内的 cursorsandbox 可执行文件);一旦被覆写,其后的每条命令都将不受约束地运行。
第一个缺陷滥用了一个工具参数。执行沙箱命令时,Cursor 会构建一条允许写入命令工作目录的策略——而 working_directory 是 run_terminal_cmd 工具的一个可选参数。当模型为其赋予非默认值时,该路径会不经校验被加入可写白名单,于是被注入的指令可将其指向系统文件而非项目目录。诸如 ~/.zshrc 或 ~/Library/LaunchAgents 等启动文件同样是可行目标。
第二个缺陷是符号链接规范化失败,与第一个相互独立。写入之前,Cursor 会解析符号链接以确认真实目标位于项目根目录内。问题出在回退逻辑:当规范化失败时——因为目标不存在,或攻击者去除了路径中某个目录的读权限——Cursor 会转而信任项目内的原始符号链接路径,而不是拒绝写入。于是一个指向项目外的“只写”符号链接便通过了检查,写入仍然落到了沙箱二进制文件上。同样的逃逸,只是换了一道门。此处不复现任何可用的攻击载荷;相关机制仅按已公开披露的层次进行描述。
示例提示
DuneSlide 沙箱逃逸的防御性、不可直接利用的示意。载荷已隐去——它展示信任边界为何失效,而非如何复现。
# DuneSlide: prompt injection escapes Cursor's sandbox (illustrative, defensive)
# Zero-click indirect injection arrives via an MCP result or fetched web page:
hidden = "[hidden instruction in untrusted content]"
# It steers run_terminal_cmd's OPTIONAL working_directory outside the project,
# silently widening the sandbox write allowlist a model-set arg controls:
run_terminal_cmd(working_directory="[system path]", command="[REDACTED]")
# -> next command runs unconfined -> OS-level RCE as the developer.
# Defense: upgrade to Cursor 3.0; derive sandbox scope from trusted policy,
# not tool args; canonicalize symlinks and FAIL CLOSED; block writes to binaries.
为什么重要
这是致命三要素在开发工具内部的具象化:智能体拥有真实权限(本地文件写入、命令执行、已登录的云会话),它摄入不可信内容,两者又在无人干预的情况下相连。一旦沙箱二进制被覆写,下一条命令便以你的身份执行——完全掌控工作机,外加编辑器已认证的任何 SaaS 或云工作区。而入口极为平常:来自一个标准、无害的 MCP 集成的被投毒结果就已足够——这正是 Cursor 起初认为不在其威胁模型之内的情形。
DuneSlide 并非孤例。它属于一连串有据可查的 Cursor 缺陷:都从被投毒的提示开始,以代码执行告终,每一个都绕过了不同的防护——与在各类智能体框架中所见的提示注入到 RCE 模式如出一辙,也与代码智能体中的符号链接批准逃逸密切相关。Cato 表示正在披露其他代码智能体中的类似缺陷,并主张该问题是结构性的,而非一串互不相干的漏洞。
防御措施
- 立即升级。 两个问题都已在 Cursor 3.0 中修复。升级是价值最高的行动;3.0 之前的所有版本都存在风险。
- 不要让工具参数重新划定安全边界。 第一个缺陷的根因是:一个由模型控制的参数(
working_directory)悄然扩大了写入白名单。沙箱范围应源于可信策略,绝不能取自 LLM 可设置的参数——应将所有工具参数视为不可信输入。 - 安全地规范化路径,并以“失败即拒绝”为默认。 在任何写入之前解析符号链接,规范化失败时应拒绝,而非回退到未解析的项目内路径。对最终目标施加项目根边界,并禁止写入可执行文件、应用程序包与 shell 启动文件,无论路径如何得来。
- 约束注入来源。 对来自 MCP 服务器或网页搜索的内容自动执行智能体命令,正是触发点。将不可逆或超出项目范围的操作置于批准之后,并落实智能体二则规则,使从不可信来源摄入的内容无法直接驱动特权文件写入。
- 把编辑器当作一个可达的入口点。 以最小权限运行代码智能体,收窄其凭据范围,并监控对沙箱二进制与启动文件的写入——那是逃逸尝试的特征。
状态
| 项目 | 参考 | 日期 | 备注 |
|---|---|---|---|
| DuneSlide 披露 | Cato AI Labs(Itay Ravia) | 2026-07-01 | 两个相互独立的 RCE 缺陷;CVSS 9.8;研究性质,无实际利用 |
| working directory 写入 | CVE-2026-50548 | 2026-06-05(编号分配) | run_terminal_cmd 参数被加入沙箱写入白名单 |
| 符号链接规范化 | CVE-2026-50549 | 2026-06-05(编号分配) | 宽松回退,信任项目内符号链接路径 |
| 上报 Cursor | Cato 时间线 | 2026-02-19 | 起初以“不在威胁模型内”被拒,后重新分级处理 |
| 修复发布 | Cursor 3.0 | 2026-04-02 | 3.0 之前的所有版本受影响 |
作者给出的持久教训是:赋予 LLM 自主执行命令的能力,会把每一处“智能体参数或已解析文件名跨越信任边界”的地方都变成攻击面。沙箱是必要的,但并不充分——边界必须建立在可信策略与最终解析出的目标之上,而不是建立在能被模型被诱导提供的取值之上。
Sources
- → https://www.catonetworks.com/blog/duneslide-two-critical-rce-vulnerabilities/
- → https://thehackernews.com/2026/07/critical-cursor-flaws-could-let-prompt.html
- → https://www.securityweek.com/critical-cursor-ai-ide-flaws-could-lead-to-os-level-remote-code-execution/
- → https://nvd.nist.gov/vuln/detail/CVE-2026-50548
- → https://nvd.nist.gov/vuln/detail/CVE-2026-50549