DuneSlide: la inyección de prompts escapa del sandbox de Cursor hasta un RCE del sistema
Cato AI Labs (1 de julio de 2026) demuestra que un solo prompt manipulado — a través de un servidor MCP o un resultado web — puede sobrescribir el binario de sandbox de Cursor y lograr un RCE del sistema sin clic. Corregido en Cursor 3.0.
¿Qué es esto?
El 1 de julio de 2026, Cato AI Labs (Itay Ravia) publicó DuneSlide: Two Critical RCE Vulnerabilities via Zero-Click Prompt Injection in Cursor IDE. Describe dos fallos independientes en el editor de código Cursor —una herramienta que, según Cursor, usa más de la mitad del Fortune 500— que permiten que un prompt de apariencia inofensiva escape del sandbox de comandos del editor y ejecute código arbitrario en la máquina del desarrollador. Ambos fallos tienen una puntuación de 9,8/10 y están corregidos en Cursor 3.0 (publicado el 2 de abril de 2026); todas las versiones anteriores están afectadas. La investigación se presenta con un enfoque defensivo, sin explotación observada en la práctica.
El desencadenante es la inyección indirecta de prompts: el atacante nunca escribe en tu editor. Coloca instrucciones dentro de algo que tu agente lee en tu nombre —un servicio conectado mediante el Model Context Protocol (MCP) o una página devuelta por una búsqueda web— y una pregunta corriente arrastra consigo las instrucciones ocultas. Sin clic ni cuadro de aprobación: de ahí lo de «sin clic» (zero-click). Lo destacable de DuneSlide es el objetivo: la inyección de prompts sobrepasa la capa del modelo y reactiva clásicos fallos de escritura de archivos en rutas de código que nadie consideraba alcanzables por un atacante.
Cómo funciona
La rama 2.x de Cursor ejecuta por defecto los comandos del agente dentro de un sandbox, sin pedir aprobación para cada uno —una decisión deliberada frente a la fatiga de aprobaciones—. Ambos fallos siguen el mismo patrón: conseguir que el agente escriba un archivo que no debería poder escribir y usar esa escritura para desactivar el sandbox. El objetivo de mayor valor en macOS es el propio binario de sandbox (el ejecutable cursorsandbox dentro del paquete de la aplicación); una vez sobrescrito, todo comando posterior se ejecuta sin confinamiento.
El primer fallo abusa de un parámetro de herramienta. Al ejecutar un comando dentro del sandbox, Cursor construye una política que permite escrituras en el directorio de trabajo del comando —y working_directory es un parámetro opcional de la herramienta run_terminal_cmd—. Cuando el modelo le asigna un valor no predeterminado, esa ruta se añade a la lista de escritura permitida sin validación, de modo que instrucciones inyectadas pueden apuntarla a un archivo del sistema en lugar del proyecto. Archivos de arranque como ~/.zshrc o ~/Library/LaunchAgents son objetivos igual de válidos.
El segundo fallo es un error de canonicalización de enlaces simbólicos, independiente del primero. Antes de escribir, Cursor resuelve los enlaces simbólicos para confirmar que el destino real está dentro de la raíz del proyecto. El problema es el mecanismo de respaldo: cuando la canonicalización falla —porque el destino no existe, o el atacante retira el permiso de lectura de un directorio de la ruta— Cursor confía en la ruta simbólica interna del proyecto en vez de rechazar la escritura. Un enlace simbólico de solo escritura que apunte fuera del proyecto supera así el control, y la escritura alcanza igualmente el binario de sandbox. La misma fuga, otra puerta. Aquí no se reproduce ningún exploit funcional; el mecanismo se describe al nivel que la divulgación ya hizo público.
Ejemplo de prompt
Un esquema defensivo y no accionable de la fuga de DuneSlide. Las cargas están censuradas: muestra por qué falla la frontera de confianza, no cómo reproducirla.
# 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.
Por qué importa
Es el trío letal materializado dentro de una herramienta de desarrollo: el agente tiene autoridad real (escritura de archivos locales, ejecución de comandos, sesiones de nube conectadas), ingiere contenido no confiable y ambas cosas se conectan sin intervención humana. Una vez sobrescrito el binario de sandbox, el siguiente comando se ejecuta en tu nombre —control total del equipo, además de cualquier espacio de trabajo SaaS o en la nube al que el editor esté autenticado—. Y el punto de entrada es trivial: basta un resultado manipulado procedente de una integración MCP estándar e inofensiva —justo el caso que Cursor consideró inicialmente fuera de su modelo de amenaza.
DuneSlide no es un caso aislado. Se inscribe en una serie documentada de fallos de Cursor que parten de un prompt manipulado y terminan en ejecución de código, cada uno esquivando una salvaguarda distinta —el mismo patrón de inyección de prompts a RCE visto en los frameworks de agentes, y cercano a las fugas de aprobación por enlace simbólico en agentes de código—. Cato afirma estar divulgando fallos similares en otros agentes de código y sostiene que el problema es estructural, no una sucesión de errores inconexos.
Defensas
- Actualiza ya. Ambos problemas están corregidos en Cursor 3.0. Actualizar es la acción de mayor valor; todas las versiones anteriores a la 3.0 son vulnerables.
- No dejes que un parámetro de herramienta redibuje la frontera de seguridad. La causa raíz del primer fallo es que un argumento controlado por el modelo (
working_directory) amplió en silencio la lista de escritura. El alcance del sandbox debe derivar de una política de confianza, nunca de parámetros que el LLM pueda fijar: trata todos los argumentos de herramienta como entradas no confiables. - Canonicaliza las rutas de forma segura y falla en modo cerrado. Resuelve los enlaces simbólicos antes de cualquier escritura y deniega cuando la resolución falle, en lugar de recurrir a la ruta interna sin resolver. Aplica la frontera de la raíz del proyecto sobre el objetivo final y prohíbe la escritura hacia ejecutables, paquetes de aplicación y archivos de arranque del shell, sea cual sea la ruta empleada.
- Restringe la fuente de la inyección. La ejecución automática de los comandos del agente sobre contenido extraído de servidores MCP o búsquedas web es el desencadenante. Coloca las acciones irreversibles o fuera del proyecto tras una aprobación, y aplica la regla de dos de los agentes para que el contenido ingerido desde una fuente no confiable no pueda dirigir directamente escrituras de archivo privilegiadas.
- Asume que el editor es un punto de entrada alcanzable. Ejecuta los agentes de código con el mínimo privilegio, limita el alcance de sus credenciales y vigila las escrituras hacia binarios de sandbox y archivos de arranque: la firma de un intento de fuga.
Estado
| Elemento | Referencia | Fecha | Notas |
|---|---|---|---|
| Divulgación de DuneSlide | Cato AI Labs (Itay Ravia) | 2026-07-01 | Dos fallos RCE independientes; CVSS 9,8; investigación, sin explotación activa |
| Escritura vía working directory | CVE-2026-50548 | 2026-06-05 (ID asignado) | Parámetro de run_terminal_cmd añadido a la lista de escritura del sandbox |
| Canonicalización de enlace simbólico | CVE-2026-50549 | 2026-06-05 (ID asignado) | Respaldo permisivo que confía en la ruta simbólica interna |
| Reporte a Cursor | Cronología de Cato | 2026-02-19 | Rechazado al inicio (fuera del modelo de amenaza), luego reevaluado |
| Corrección publicada | Cursor 3.0 | 2026-04-02 | Todas las versiones anteriores a la 3.0 afectadas |
La lección duradera es la de los propios autores: dar a un LLM la ejecución autónoma de comandos convierte cada punto donde un parámetro de agente o un nombre de archivo resuelto cruza una frontera de confianza en superficie de ataque. El sandbox es necesario pero insuficiente: la frontera debe aplicarse sobre una política de confianza y sobre el objetivo final resuelto, no sobre valores que se pueda convencer al modelo de suministrar.
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