Ilustración técnica abstracta sobre un fondo azul marino oscuro: un alto plano límite translúcido se alza cerca del borde izquierdo, dibujado como un fino contorno pálido con un relleno esmerilado. Una única línea blanca entra desde la izquierda, atraviesa el plano y continúa hacia la derecha, donde termina en un pequeño bloque oscuro que queda fuera de una fila poco profunda de cuatro módulos cian brillantes. Una fina traza blanca discontinua se bifurca de la línea justo antes del plano y se detiene en un pequeño rectángulo pálido montado sobre la cara del plano, etiquetado solo por su forma. No aparecen texto, personas ni logotipos de organizaciones. El logotipo de OrcaRouter está compuesto en la esquina inferior derecha.
AI Safety Incidents

GhostApproval: Seis asistentes de programación con IA pidieron permiso e indicaron el archivo equivocado

Autor

Gideon Frost

Fecha de publicación

Últimos modelos · 20Ver todos los modelos →
Benchmarks: Artificial Analysis · actualizado a diario
Volver a todas las publicaciones

El 8 de julio de 2026, la empresa de seguridad Wiz publicó GhostApproval, un hallazgo de investigación en el que un enlace simbólico plantado en un repositorio hizo que seis asistentes de programación con IA escribieran fuera de su espacio de trabajo — en ~/.ssh/authorized_keys, que concede acceso SSH persistente sin contraseña, o en ~/.zshrc, que se ejecuta al iniciar la siguiente shell — mientras que el cuadro de diálogo de confirmación nombraba solo el archivo inofensivo que el enlace fingía ser. Wiz probó Amazon Q Developer, Claude Code de Anthropic, Augment, Cursor, Google Antigravity y Windsurf, y reportó el patrón en los seis. No se ha reportado ninguna explotación en estado salvaje: el trabajo es una demostración de prueba de concepto, y la entrada del archivo no registra ningún daño real. Tres proveedores publicaron correcciones, dos acusaron recibo del informe y luego dejaron de responder, y uno cuestionó que el comportamiento constituyera siquiera una vulnerabilidad. El Orca AI Incident Archive contiene el registro completo de este hallazgo junto con las demás entradas archivadas bajo su etiqueta de tipo SANDBOX.

El primitivo en sí no es novedad. El seguimiento de enlaces simbólicos, catalogado como CWE-61, ha sido un primitivo de ataque durante décadas —Wiz enumera usos anteriores en condiciones de carrera, gestores de paquetes y escapes de contenedores— y cada uno de ellos dependía de que una herramienta escribiera en una ruta controlada por el usuario sin resolverla primero. Lo que hizo que este hallazgo mereciera un nombre es la segunda capa: en varios productos, el propio razonamiento del asistente identificó el destino peligroso, y el prompt mostrado a la persona lo ocultaba. Wiz lo registra como CWE-451, tergiversación en la interfaz de usuario de información crítica. El límite de seguridad estaba presente. La información que una persona necesitaba para hacerlo valer no lo estaba.

Cómo funciona el truco y en qué acaba

El repositorio malicioso de Wiz es deliberadamente aburrido. Contiene un enlace simbólico llamado project_settings.json que resuelve al archivo de claves autorizadas SSH del desarrollador, además de un README que indica al agente que actualice esa "config" mientras configura el espacio de trabajo. Cuando el desarrollador pide al asistente que siga el README, el agente sigue el enlace y escribe la clave pública del atacante. Si la máquina ejecuta un servicio SSH al que el atacante puede acceder, eso supone un inicio de sesión sin contraseña a partir de entonces. Una segunda variante apunta el mismo señuelo a ~/.zshrc, por lo que la carga útil se ejecuta la próxima vez que se abra una terminal y no se necesita ningún acceso SSH en absoluto.

La descripción de Wiz del fallo técnico es breve: el sandbox, cuando existe, no valida la ruta canónica, de modo que una escritura dirigida al interior del proyecto acaba donde apunte el enlace. La prueba de concepto de la empresa reprodujo esto en "6 de los principales asistentes de programación con IA", en sus propias palabras, y publicó capturas de pantalla para cada uno. La población afectada es cualquiera que abra en una de esas herramientas un repositorio que no haya creado él mismo, lo que, en el flujo de trabajo habitual de un desarrollador, incluye proyectos bifurcados, dependencias de terceros y cualquier revisión de código de la rama de un colaborador externo.

El cuadro de diálogo que nombró el archivo incorrecto

La evidencia más clara provino de Claude Code. En la prueba de Wiz, el razonamiento del agente afirmaba, según la cita de la empresa, «Puedo ver que project_settings.json es en realidad un archivo de configuración de zsh». El aviso de permiso que vio el usuario preguntaba: «¿Aplicar esta edición a project_settings.json?». El agente sabía adónde iba la escritura; la persona que la autorizaba, no. Wiz califica el consentimiento resultante de «vacío en esencia» y la comprobación con intervención humana de mero trámite.

Tres productos agravaron la brecha más que una etiqueta deficiente. Windsurf escribió el archivo en el disco antes de que aparecieran los botones Aceptar y Rechazar, por lo que el diálogo era una oferta de deshacer en lugar de una puerta de autorización; según Wiz, cuando el usuario podía rechazar, la clave ya estaba en su lugar. Amazon Q Developer mostró el mismo orden, ofreciendo solo un botón Deshacer después de la escritura. Augment no preguntó nada en absoluto: Wiz demostró una lectura mediante enlace simbólico que mostró en la transcripción del chat un archivo de credenciales de AWS señuelo procedente de fuera del proyecto, y una escritura mediante enlace simbólico en ~/.ssh/authorized_keys sin ningún tipo de diálogo. En el otro extremo, Cursor y Google Antigravity mostraron la ruta sin resolver y pidieron un clic que autorizaba la resuelta.

La primera prueba de Wiz se realizó el 10 de febrero de 2026 y los informes se enviaron entre el 12 de febrero y el 5 de marzo. Su cronograma de divulgación registra las confirmaciones: Anthropic el 15 de febrero, Augment el 24 de febrero, Google el 26 de febrero, Cursor el 2 de marzo, AWS el 6 de marzo y Cognition, propietaria de Windsurf, el 23 de junio. La divulgación pública se produjo aproximadamente cinco meses después del primer informe.

HTML card headed 'Five months from first test to public disclosure', with a kicker reading 'GhostApproval · Wiz Research · disclosure sequence'. A vertical timeline lists the dated steps: 10 February 2026, initial discovery; 12 and 14 February, Augment read and write reports; 14 February, report to Anthropic; 15 February, Anthropic closes the ticket as Informative; 24 February, Augment acknowledges; 26 February, Google acknowledges; 2 March, Cursor acknowledges; 2 and 5 March, reports to Cognition and AWS; 22 May, Google deploys its fix; 27 May, AWS ships language server 1.69.0; 23 June, AWS publishes CVE-2026-12958 and Cognition acknowledges; 8 July 2026, public disclosure. An amber box records that Augment and Windsurf acknowledged receipt and supplied no further updates. A footer cites Wiz's disclosure timeline. The OrcaRouter logo is composited in the bottom-right corner.

Seis proveedores, tres respuestas

Wiz clasifica los hallazgos según su propia escala de gravedad, desde High en AWS hasta Critical en Augment, Cursor, Google Antigravity y Windsurf. Tres proveedores trataron el informe como una vulnerabilidad y publicaron una corrección. El archivo califica la entrada como de gravedad alta y con A en confianza, y los avisos principales coinciden con Wiz en cuanto al mecanismo.

• Amazon Web Services. Gravedad alta, registrado como CVE-2026-12958 y corregido en Language Servers for AWS 1.69.0. El boletín propio de AWS 2026-047-AWS, publicado el 23 de junio de 2026, confirma "un problema de validación de enlaces simbólicos ausente" antes de 1.69.0 y enumera las versiones mínimas de los complementos que incluyen la corrección: Amazon Q Developer for Visual Studio Code 2.20, for JetBrains 4.3, for Eclipse 2.7.4, y AWS Toolkit with Amazon Q for Visual Studio 1.94.0.0. Indica que no existen soluciones alternativas, que el servidor de lenguaje se actualiza automáticamente a menos que una configuración de red lo impida, y agradece a Wiz por la divulgación coordinada. El registro del CNA puntúa el problema con 8,5 según CVSS 4.0 y 7,8 según CVSS 3.1.

• Cursor.Crítico, registrado como CVE-2026-50549 y corregido en Cursor 3.0. El registro fue publicado por GitHub como CNA el 25 de junio de 2026 con una puntuación de 9,3 según CVSS 4.0. Su descripción enmarca al atacante de forma ligeramente distinta de la historia del repositorio de Wiz: un agente malicioso crea un enlace simbólico dentro del workspace y fuerza que falle la canonicalización de la ruta, ya sea porque el destino no existe o porque se retiró el permiso de lectura de la ruta, tras lo cual la escritura recae en la ruta original sin aprobación y puede sobrescribir el helper de sandbox para ejecución sin sandbox.

• Google. Wiz califica Antigravity como Critical y registra la corrección como versión 1.19.6, desplegada el 22 de mayo de 2026. Su columna de severidad indica "Pending" y, según el informe de Wiz, Google estaba evaluando si emitir un CVE; no aparece ningún identificador de CVE para Antigravity en el registro público.

• Augment.Crítico según la calificación de Wiz, probado en la versión 0.754.3, reconocido el 24 de febrero de 2026 y sin parchear en el momento de la publicación. La nota de investigación de Cloud Security Alliance sobre el hallazgo recoge el contraargumento de Augment de que un agente opera con las credenciales del propio usuario.

• Windsurf.Crítica según la calificación de Wiz, probada en la compilación V1.9566, reconocida por Cognition el 23 de junio de 2026 y sin parchear en el momento de la publicación.

• Anthropic.En disputa. No hay CVE, y la versión probada de Claude Code, 2.1.42, figura en la tabla de Wiz con el estado «Rechazado».

HTML card headed 'One pattern, six products, six answers', with a kicker reading 'GhostApproval · vendor status at public disclosure, 8 July 2026'. A six-row table gives product, Wiz's severity rating, CVE identifier, fixed version and status: Amazon Q Developer, High, CVE-2026-12958, fixed in language server 1.69.0; Cursor, Critical, CVE-2026-50549, fixed in 3.0; Google Antigravity, Critical, no CVE published, fixed in 1.19.6 on 22 May 2026; Augment, Critical, no CVE, no fix, acknowledged 24 February 2026; Windsurf, Critical, no CVE, no fix, acknowledged 23 June 2026; Claude Code from Anthropic, Disputed, no CVE, rejected as outside the threat model. A note beneath reads that severity ratings for the products without a CVE are Wiz's own, not a CNA score, and that no exploitation in the wild was reported. A footer cites Wiz's vendor table, the AWS security bulletin and the two CVE records. The OrcaRouter logo is composited in the bottom-right corner.

El rechazo de Anthropic, y la corrección que precede al informe.

La respuesta de Anthropic a Wiz fue una negativa meditada. «Esto queda fuera de nuestro modelo de amenaza actual», escribió la empresa, según la cita de Wiz. «Cuando el usuario inicia Claude Code por primera vez en un directorio, debe confirmar que confía en el directorio antes de iniciar la sesión. El escenario que describes implica que un usuario confirme explícitamente un aviso de permiso dentro de un directorio que contiene un enlace simbólico malicioso, lo cual queda fuera del modelo de amenaza de Claude Code». El ticket se cerró como «Informativo».

Ese razonamiento tiene una forma coherente: el usuario confió en el directorio y luego aprobó la operación, de modo que se respetaron ambos momentos de consentimiento. La réplica de Wiz es que el consentimiento informado necesita información precisa: aprobar project_settings.json mientras la escritura recae en ~/.ssh/authorized_keys es, formalmente, una decisión y, en sustancia, una decisión vacía. Wiz no afirma haber resuelto cuál postura es la correcta, y este artículo tampoco. La observación práctica es que AWS, Google y Cursor adoptaron la otra postura y aplicaron el parche.

Wiz también informó que Claude Code había cambiado en el trasfondo de la disputa: las versiones actuales, escribió la empresa, resuelven los enlaces simbólicos y advierten antes de escribir en archivos sensibles, y señaló que Anthropic se negó a decir si eso estaba relacionado con el informe. El 7 de julio de 2026, Anthropic proporcionó una corrección, citada por Wiz: «La advertencia sobre enlaces simbólicos en el diálogo de permisos de Editar/Escribir se incluyó en la v2.1.32 (5 de febrero de 2026), nueve días antes de que se nos enviara este informe. Se añadió como parte de un endurecimiento de seguridad proactivo basado en una revisión interna. La negativa a comentar fue una respuesta automática de nuestro sistema de triaje».

La cronología de la versión cuadra; el registro público de lo que cambió no. Claude Code 2.1.32 se publicó en el registro de npm el 5 de febrero de 2026 a las 17:03 UTC, es decir, nueve días antes del informe del 14 de febrero, exactamente como afirma Anthropic. Pero la entrada del registro público de cambios correspondiente a esa versión enumera doce cambios, incluidos equipos de agentes, registro de memoria y varias correcciones de interfaz, y ninguno menciona enlaces simbólicos ni diálogos de permisos. Las primeras líneas del registro de cambios que describen este comportamiento exacto son mucho posteriores: la versión 2.1.280, publicada en npm el 22 de septiembre de 2026, registra «Corregido: las escrituras a través de una ruta con enlace simbólico se juzgaban por su forma dentro del árbol; el aviso indica dónde acaba la escritura», y la 2.1.287, el 1 de octubre de 2026, registra que una escritura de shell a través de un enlace simbólico confirmado en el repositorio sobre un archivo sensible ahora indica dónde acaba y espera a una persona. La propia observación de Wiz de que la 2.1.173 y las posteriores resuelven enlaces simbólicos también es posterior al informe, ya que la 2.1.173 se lanzó el 11 de junio de 2026.

Qué está establecido y qué no

• Confirmado. El mecanismo: un enlace simbólico señuelo en un repositorio, un agente que lo sigue, una escritura que termina fuera del espacio de trabajo y una superficie de confirmación que nombra la ruta incorrecta. Wiz lo reprodujo en los seis productos y publicó capturas de pantalla. Existen dos registros CVE y están publicados por sus CNA, y el boletín de AWS confirma de forma independiente el fallo de las versiones anteriores a la 1.69.0 y la corrección. Anthropic no discute que el comportamiento ocurrió; discute que sea una vulnerabilidad.

• De una sola fuente. Las clasificaciones de gravedad para Augment, Windsurf y Google Antigravity son juicios de Wiz, no puntuaciones del CNA, porque no se publicó ningún CVE para ninguno de los tres. La afirmación de que Windsurf y Amazon Q escriben antes de que aparezca el diálogo se basa en las capturas de pantalla y la narración de Wiz; ningún proveedor ha confirmado públicamente el orden.

• En disputa. Si una herramienta debe a su usuario protección frente a un espacio de trabajo engañoso, o si la confianza en el directorio más un clic zanja la cuestión. Anthropic dice lo segundo; Wiz dice que el mensaje que mostró hizo que el clic careciera de sentido. El archivo no marca el registro como disputado: los hechos están acordados y solo la interpretación está en disputa.

• No determinado. Si Augment y Windsurf han corregido el fallo desde la publicación. Toda la cobertura revisada para este artículo, incluida la nota de Cloud Security Alliance del 15 de julio de 2026, sigue describiendo a ambos como sin parchear; no se encontró ningún aviso público de corrección por parte de ninguno de los dos proveedores.

La fecha en sí conlleva una pequeña discrepancia. La publicación de Wiz y su cronología de divulgación indican ambas el 8 de julio de 2026, Infosecurity Magazine describe la prueba de concepto como publicada el 7 de julio y su propio informe el 9 de julio, y la entrada del archivo está fechada el 9 de julio de 2026 con precisión de día. El hallazgo, la cobertura periodística y el archivo no discrepan respecto de la semana; discrepan respecto del día en hasta dos.

Trabajo anterior sobre uno de los seis merece crédito por separado. Evan Schuman, de CSO Online, en un artículo del 9 de julio de 2026, señaló que Cato Networks había informado de una versión de la vulnerabilidad exclusiva de Cursor antes del estudio más amplio de Wiz. El artículo de SecurityWeek sobre esa investigación, publicado el 3 de julio de 2026, lo denomina DuneSlide, asigna CVE-2026-50548 y CVE-2026-50549 al par, puntúa ambos con 9,8 y fecha la versión 3.0 de Cursor que los corrigió el 2 de abril — cifras que no coinciden con la cronología de Wiz, que sitúa la publicación de la corrección de Cursor el 5 de junio, ni con el registro de la CNA publicado el 25 de junio con 9,3. El 9,8 y el 9,3 son dos puntuaciones de la misma vulnerabilidad; las fechas de abril y junio pueden estar describiendo una versión y un aviso en lugar de discrepar sobre cuándo se publicó el parche.

¿Qué cambió después?

Concretamente: los usuarios de Amazon Q Developer fueron migrados al servidor de lenguaje 1.69.0, automáticamente en la mayoría de las configuraciones; los de Google Antigravity, a la 1.19.6 desde el 22 de mayo de 2026; los de Cursor, a la 3.0; y los de Claude Code, a una versión que resuelve enlaces, con más cambios en la fidelidad de los prompts que llegarán en la 2.1.280 y la 2.1.287 durante septiembre y octubre de 2026. Los usuarios de Augment y Windsurf, según la evidencia disponible en el momento de la publicación, solo obtuvieron una fecha a la que prestar atención y nada más.

Las propias recomendaciones de Wiz eran limitadas y técnicas: resolver los enlaces simbólicos antes de mostrar una solicitud, advertir explícitamente cuando la ruta resuelta queda fuera del espacio de trabajo y no escribir nunca en disco antes de una autorización explícita, de modo que el diálogo sea una compuerta en lugar de un botón de deshacer. La nota de Cloud Security Alliance añade un marco de gobernanza: tratar los asistentes de programación como software privilegiado con acceso al sistema de archivos, en lugar de como complementos del editor, y preguntar directamente a los proveedores si las rutas se resuelven antes de que aparezca una confirmación. Katie Norton, de IDC, citada por CSO Online, situó el riesgo residual allí donde ya opera la cadena de suministro: colaboradores externos, repositorios bifurcados y dependencias de terceros, «en lugar de en el código de autoría interna».

Lo que sigue abierto es la cuestión de diseño, no el error. Seis productos construidos de forma independiente convergieron en la misma secuencia —mostrar la ruta solicitada, confiar en el clic—, y la divergencia posterior tuvo que ver con la responsabilidad, no con el mecanismo. La entrada del archivo lleva una marca de referencia, que es el juicio del archivo de que el registro describe una categoría y no el error de un solo proveedor, y es difícil discutir esa lectura: la misma breve prueba de concepto funcionó seis veces.

Abstract technical illustration on a dark navy field: a pale translucent check mark, drawn as a thin outline, floats above a small white rectangle that represents an approval surface. Beneath the rectangle a white line drops vertically, passes through a faint horizontal plane, and emerges on the other side pointing at a second dark rectangle that is drawn only as an outline, unlit. A soft amber glow marks the point where the line crosses the plane. No text, people or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.