Tu asistente de programación con IA podría estar reescribiendo tus claves SSH sin que te des cuenta. Wiz Research descubrió un fallo de “GhostApproval” que permite que un enlace simbólico (symlink) malicioso de project_settings.json apunte a claves privadas, y el diálogo de aprobación por acción que aparece solo muestra el nombre del symlink. Si apruebas el diálogo, acabas de darle al asistente acceso sin restricciones a tus credenciales.

Cómo funciona el exploit

  • Un atacante añade un archivo llamado project_settings.json a un repositorio.
  • Ese archivo no es un archivo JSON común; es un enlace simbólico (symlink) que redirige a la clave privada ~/.ssh/id_rsa (o equivalente) del usuario.
  • Cuando el desarrollador pide al asistente de IA que “configure el espacio de trabajo” (set up the workspace), el asistente sigue el symlink y se prepara para escribir en el archivo de la clave SSH real.
  • El diálogo de aprobación que aparece solo muestra project_settings.json. No resuelve el symlink para mostrar la ruta real en el disco.
  • Al hacer clic en “Approve”, se le concede al asistente permiso para modificar la clave privada, comprometiendo de forma efectiva la identidad del usuario en cada servicio que confíe en esa clave.

El error aparece en seis herramientas ampliamente utilizadas: Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity y Windsurf. Todas ellas muestran el mismo diálogo engañoso porque la interfaz de usuario muestra el nombre que recibe, no el destino resuelto.

Por qué los diálogos por acción no son suficientes

La aprobación por acción asume que un humano puede supervisar cada operación que realiza una IA. En la práctica, te obliga a tomar decisiones perfectas cada pocos segundos, algo que nadie puede hacer más rápido de lo que actúa el agente.

Qué están haciendo los proveedores y por qué es importante

  • Amazon, Google y Cursor ya lo han solucionado.
  • Anthropic (el creador de Claude Code) afirma que los usuarios solo deben aprobar lo que comprenden. Eso ignora la carga cognitiva de detectar symlinks y asume que los usuarios pueden auditar cada ruta de archivo instantáneamente, una expectativa poco realista.
  • Cursor también reveló un problema distinto, denominado DuneSlide, que permitía a los atacantes ejecutar código en una máquina sin ningún aviso de aprobación. La empresa parcheó ese error, demostrando lo rápido que estos asistentes pueden convertirse en vectores de ataque cuando las comprobaciones de permisos son débiles.

La división en las respuestas plantea una pregunta más profunda: ¿debería la seguridad ser un diálogo posterior a los hechos o un límite predefinido que el asistente nunca cruce?

Permisos limitados (scoped permissions): una alternativa práctica

En lugar de solicitar permiso para cada operación de archivo, los desarrolladores pueden establecer un alcance (scope) para el asistente antes de que se ejecute:

  • Definir un árbol de directorios (por ejemplo, /src) que la IA pueda leer o escribir.
  • Cualquier intento de acceder a archivos fuera de ese árbol —como ~/.ssh/id_rsa— es bloqueado por el sistema operativo o una capa de sandbox.
  • El alcance se establece una sola vez, reduciendo el número de decisiones que un humano debe tomar y conteniendo al mismo tiempo el impacto del asistente.

Limitar el alcance cambia el modelo de seguridad de “preguntar cada vez” a “permitir solo lo necesario”. Esto refleja cómo los entornos de ejecución de contenedores y los sistemas operativos móviles ejecutan las aplicaciones en un sandbox, limitando el daño cuando algo sale mal.

Qué observar a continuación

  • Lanzamientos de proveedores: Esté atento a las notas de actualización de las seis herramientas afectadas.

Conclusión

El exploit GhostApproval demuestra que confiar en un cuadro de diálogo emergente da una falsa sensación de seguridad. Hasta que cada asistente de programación con IA resuelva los symlinks y muestre las rutas completas, los desarrolladores deberían imponer permisos de escritura limitados, indicando al asistente exactamente dónde puede trabajar antes de que comience. Ese simple cambio bloquea la clase de ataques más peligrosa sin añadir fatiga por clics.

Fuente: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1