sistema: OPERATIVO
← volver a todos los hacks
AGENTS CRITICAL NEW

CVE-2026-30615: una inyección de prompt reescribe la config MCP de Windsurf en RCE

El aviso de OX Security del 15 de abril de 2026 muestra cómo contenido controlado por el atacante puede hacer que el IDE Windsurf registre un servidor MCP STDIO malicioso y ejecute comandos — sin un solo clic. La clase abarca varios agentes de código, pero el CVE es para Windsurf.

2026-06-03 // 6 min affects: windsurf-1.9544.26, mcp-stdio-transport

¿Qué es esto?

El 15 de abril de 2026, OX Security publicó un aviso de divulgación completa que cubre una familia de vulnerabilidades de inyección de comandos ligadas a cómo las aplicaciones manejan las configuraciones de servidores MCP STDIO (Model Context Protocol). Una de las entradas de ese aviso es CVE-2026-30615, un problema de «inyección de prompt a RCE» en el IDE de código Windsurf (build 1.9544.26), publicado en el NVD el mismo día y con una puntuación CVSS 8.0 (High), calificando OX su impacto como crítico.

El mecanismo, según el NVD y el aviso de GitHub GHSA-wj2m-jvpr-64cq: cuando Windsurf procesa contenido HTML controlado por el atacante, las instrucciones incrustadas pueden provocar «una modificación no autorizada de la configuración MCP local y el registro automático de un servidor MCP STDIO malicioso, lo que resulta en la ejecución de comandos arbitrarios sin interacción adicional del usuario». Está clasificado bajo CWE-77 (inyección de comandos).

El detalle que le valió a Windsurf el único CVE de la familia «edición de config MCP por inyección de prompt» de OX es la ruta de cero clics: el procesamiento por parte del modelo de contenido no confiable reescribe directamente la config JSON del MCP. Los demás asistentes de código probados en la misma familia — Cursor, Claude Code, Gemini-CLI, GitHub Copilot — requerían al menos una aprobación explícita del usuario para editar el archivo de config, lo que (según los modelos de amenaza de esos proveedores) no constituye una vulnerabilidad.

Cómo funciona

Se trata de una inyección de prompt indirecta que recae sobre un efecto secundario privilegiado. Aquí no se reproduce ningún payload; la cadena es una clase, no una receta.

Etapa                       Qué ocurre
--------------------------  ------------------------------------------------
1. Contenido no confiable   El agente ingiere texto controlado por el
                            atacante: una página web que consulta, un README
                            de un repositorio clonado, o una descripción de
                            herramienta devuelta por un servidor MCP remoto.
2. Inyección                Instrucciones ocultas en ese contenido son
                            tratadas como directivas por el modelo, no como
                            datos.
3. Escritura de config      La directiva lleva al agente a modificar la
                            config MCP LOCAL (JSON) — añadiendo una nueva
                            entrada de servidor de tipo de transporte «stdio».
4. Registro del servidor    La nueva entrada STDIO lleva un «command» +
                            «args» que el host ejecuta como subproceso [REDACTED].
5. Ejecución                Al (re)iniciar, el host ejecuta el comando con
                            los privilegios del proceso del IDE. RCE.

La causa raíz que OX rastrea en todo el aviso está aguas arriba de cualquier producto aislado: las configuraciones MCP STDIO especifican un command y unos args que se pasan a un lanzador de subprocesos (p. ej. StdioServerParameters) sin saneamiento ni lista de permitidos. El transporte STDIO consiste, por diseño, en «ejecuta este proceso local». Cuando la ruta que escribe esa config puede alcanzarse mediante una entrada no confiable — aquí, vía la propia ventana de contexto del LLM — la autoridad de configuración y la ejecución de código colapsan en un mismo primitivo. Es el mismo problema estructural documentado para el transporte MCP STDIO y para la inyección por nombre de herramienta en otros agentes.

Por qué importa

Un IDE de código es un host de alto valor: contiene código fuente, secretos, claves SSH, credenciales de nube y una shell. Convertir contenido que el agente solo lee en comandos que el host ejecuta elimina por completo al humano del bucle — no hay enlace malicioso que pulsar ni diálogo que descartar. Un README envenenado en una dependencia que clonas, o una página manipulada que el agente busca durante una «investigación», basta.

También se generaliza. El aviso de OX enumera diez CVE repartidos en cuatro familias (LangFlow, GPT Researcher, LiteLLM, Agent Zero, Fay, Bisheng, Jaaz, DocsGPT y otros), todos enraizados en el mismo patrón de config STDIO no saneada. Windsurf es simplemente la demostración más nítida de que la ruta de escritura puede dirigirse por inyección de prompt sin clic. Varios proveedores se negaron a parchear, calificando la ejecución directa de comandos como «comportamiento esperado» — lo que significa que el patrón persistirá en el ecosistema, y la carga recae sobre los operadores.

Defensas

  1. Actualice Windsurf. Abandone el build 1.9544.26 por la versión actual. Trate el IDE como cualquier otro punto expuesto a RCE en su SLA de parches.
  2. Exija un consentimiento explícito e informado para los cambios de config MCP. Toda escritura en la config MCP — sobre todo añadir un servidor stdio — debería requerir una aprobación humana que muestre el comando y los args. Un «¿permitir editar el archivo?» a ciegas no basta; el usuario debe ver qué se va a ejecutar.
  3. Ponga en lista de permitidos los comandos STDIO, y audite los args. Restringir command a python/npm/npx es necesario pero insuficiente: OX eludió tales listas mediante opciones de argumentos (p. ej. pasando un comando vía las opciones de un lanzador permitido). Restrinja también los argumentos, o prefiera transportes no-STDIO.
  4. Trate todo el contenido recuperado como datos no confiables, nunca instrucciones. Aplique la óptica del trío letal: un agente que combina acceso a datos privados, exposición a contenido no confiable y un canal de exfiltración/ejecución es explotable por diseño. Rompa una de las patas — aísle el agente en un sandbox, quítele la capacidad de escribir su propia config, o aísle la navegación no confiable.
  5. Mínimo privilegio para el proceso del agente. Ejecute los agentes de código en un contenedor o VM sin credenciales de nube permanentes y con un sistema de archivos acotado, de modo que una reescritura de config exitosa solo produzca una shell confinada y de bajo valor en lugar de un compromiso total del sistema.
  6. Monitorice el archivo de config. Vigile las rutas de config mcp en busca de escrituras inesperadas y nuevas entradas stdio; alerte sobre subprocesos lanzados por el IDE que no coincidan con una cadena de herramientas conocida.

Estado

ElementoReferenciaFechaNotas
Aviso de OX Security (10 CVE)OX Security2026-04-15Windsurf = familia n.º 3: «edición de config MCP por inyección de prompt»
Publicación de CVE-2026-30615NVD (fuente: MITRE)2026-04-15CVSS 8.0 High, CWE-77; última modif. 2026-04-17
Aviso de GitHub GHSA-wj2m-jvpr-64cqGitHub Advisory DB2026-04-15Afectado: Windsurf 1.9544.26
Agentes comparables (sin CVE)OX Security2026-04-15Cursor, Claude Code, Gemini-CLI, Copilot — requieren aprobación del usuario para editar la config

El titular no es «un IDE tuvo un fallo». Es que config MCP STDIO + contexto de modelo no confiable = un primitivo de ejecución remota de código, y Windsurf demostró que la escritura puede dispararse sin interacción del usuario. La tarea defensiva es mantener la autoridad de escritura de la config y el contenido no confiable a ambos lados de una frontera que el modelo no pueda cruzar por sí solo.

Sources