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

GhostApproval: cuando el aviso de aprobación de un agente de código oculta el destino real

Wiz Research divulgó el 8 de julio de 2026 un fallo de frontera de confianza en seis asistentes de código con IA: un repositorio malicioso usa un enlace simbólico para que una edición aprobada escriba en ~/.ssh/authorized_keys.

2026-07-13 // 6 min affects: claude-code, amazon-q-developer, cursor, google-antigravity, windsurf, augment

¿Qué es esto?

El 8 de julio de 2026, Wiz Research publicó GhostApproval, un fallo sistemático de frontera de confianza presente en seis de los asistentes de código con IA más populares: Amazon Q Developer, Anthropic Claude Code, Augment, Cursor, Google Antigravity y Windsurf. Es una divulgación defensiva —notificada a los seis proveedores antes de la publicación— que documenta un punto ciego de toda una categoría de herramientas, no un ataque inédito contra un producto concreto.

El problema de fondo no tiene nada de exótico. Combina una primitiva de hace décadas —el seguimiento de enlaces simbólicos (CWE-61)— con algo más nuevo e interesante: el aviso de confirmación que muestran estos agentes no revela dónde va a parar realmente la escritura. El humano está, en teoría, «en el bucle», pero el bucle se alimenta de información engañosa.

Cómo funciona

Un repositorio malicioso incluye un archivo de aspecto corriente, por ejemplo project_settings.json, que en realidad es un enlace simbólico que apunta fuera del espacio de trabajo —a ~/.ssh/authorized_keys, ~/.zshrc u otro objetivo sensible—. El README del repositorio contiene instrucciones claras del tipo «para configurar este proyecto, actualiza project_settings.json con lo siguiente», junto con una clave pública SSH suministrada por el atacante.

Cuando la persona desarrolladora clona el repositorio y pide a su asistente «configurar el espacio de trabajo» o «seguir el README», el agente lee la instrucción y escribe en project_settings.json. Como la herramienta nunca resuelve el enlace simbólico a su ruta canónica, la escritura aterriza en el destino real. La clave del atacante se añade a authorized_keys, lo que concede acceso remoto persistente y sin contraseña —el patrón del diputado confundido aplicado a un escritor de archivos autónomo—.

El segundo fallo, más agudo, es una tergiversación de la interfaz (CWE-451). Wiz observó varios agentes cuyo razonamiento interno reconocía explícitamente el peligro —uno indicaba que el archivo «en realidad es un archivo de configuración zsh»— mientras que el cuadro de diálogo mostrado al usuario solo preguntaba «¿Aplicar esta edición a project_settings.json?». El agente lo sabía; al usuario no se le decía. Esto convierte un control de espacio aislado en un eludido del consentimiento informado: el consentimiento está formalmente presente, pero vacío en la práctica.

Wiz halló variantes en las seis herramientas. Algunas (Amazon Q Developer, Windsurf) escribían en disco antes de que aparecieran los botones de aprobación, convirtiendo el diálogo en un deshacer y no en un punto de control. Augment realizaba tanto lecturas por enlace simbólico —mostrando en el chat el contenido de un archivo fuera del espacio de trabajo— como escrituras sin confirmación alguna. La prueba de concepto cabe en un repositorio configurado en dos líneas: la barrera para el abuso es una pull request o una dependencia, no una destreza avanzada.

Por qué importa

El «human-in-the-loop» es el principal argumento de seguridad de los agentes de código autónomos, y GhostApproval muestra lo endeble que puede ser ese argumento cuando el bucle carece de información fiable. El tema enlaza con trabajos previos sobre aprobación y enlaces simbólicos como SymJack, pero aquí el énfasis está en la frontera de confianza y el consentimiento: el control de seguridad existe, pero no expone lo que el usuario necesita para decidir.

Las respuestas de los proveedores se dividieron, lo que resulta instructivo en sí mismo. Google, AWS y Cursor lo trataron como una vulnerabilidad y publicaron correcciones. Anthropic discrepó de que el comportamiento de Claude Code fuera un error, argumentando que un usuario que confía en un directorio y aprueba una edición asume esa decisión —situando el escenario del directorio engañoso fuera de su modelo de amenazas (Anthropic señaló además que un aviso sobre enlaces simbólicos ya figuraba en una versión de endurecimiento anterior)—. El desacuerdo es una auténtica cuestión de filosofía de diseño: ¿debe una herramienta proteger al usuario de un espacio de trabajo diseñado para engañarlo, o detectar un repositorio malicioso es responsabilidad del usuario? Para quienes ejecutan agentes sobre código de terceros no confiable —justo el uso que venden estas herramientas—, la respuesta práctica debe seguir siendo defensiva, sea cual sea la línea trazada. Es la misma lección que el problema de los agentes demasiado celosos: una capacidad sin una superficie de control fiel es un riesgo.

Defensas

Resuelve los enlaces simbólicos antes de mostrar el aviso. La corrección que recomienda Wiz consiste en canonizar la ruta de destino y mostrar el destino resuelto en el diálogo. Una escritura en ~/.ssh/authorized_keys nunca debería mostrarse como una edición de ./config.json.

Haz del diálogo un punto de control, no un deshacer. Nunca escribas en disco antes de la autorización explícita. Las escrituras previas a la autorización anulan todo el sentido de la supervisión humana: cuando haces clic, el daño ya está hecho.

Alerta ante cualquier escritura fuera del espacio de trabajo. Trata como de alto riesgo las escrituras cuya ruta canónica salga de la raíz del proyecto y exige una confirmación explícita y reforzada que nombre el archivo real.

Aísla los repositorios no confiables y desactiva la auto-aprobación. Ejecuta los agentes sobre código desconocido en un entorno aislado y desactiva los modos de auto-aprobación para proyectos de terceros. Actualiza las herramientas ya corregidas (Amazon Q Developer, Cursor, Google Antigravity); para las demás, asume que el comportamiento sigue presente.

Vigila los destinos sensibles. Genera alertas ante modificaciones de ~/.ssh/authorized_keys, los archivos rc del shell y otras rutas de persistencia —sobre todo cuando el proceso que escribe es un asistente de código con IA operando sobre un repositorio recién clonado—.

Estado

Proveedor / herramientaEstadoReferencia
Amazon Q DeveloperCorregido (language server 1.69.0)CVE-2026-12958 (advisory de AWS)
CursorCorregido (v3.0)CVE-2026-50549 (advisory de Cursor)
Google AntigravityCorregido; evaluación de CVE en curso
AugmentAcuse de recibo, sin corrección en la divulgación
WindsurfAcuse de recibo, sin corrección en la divulgación
Anthropic Claude CodeDiscrepancia («fuera del modelo de amenazas»); aviso de enlace simbólico señalado en una versión anterior
DivulgaciónDescubierto el 10 feb. 2026; público el 8 jul. 2026 (Wiz Research)

Sources