Antes de que hables, el agente ya ha ejecutado

Compartir

Por Ismael Esquilichi

El momento que nadie revisa

Clonas un repositorio, entras en la carpeta y abres tu agente de IA favorito. Todavía no has escrito nada. Y ya tienes código malicioso ejecutando en tu máquina. Sin haber caido en ninguna trampa ni en ningún ataque de ingeniería social. Solo usar una herramienta en la que confías.

Lo que presentamos aquí son vulnerabilidades reales, sin parche a día de publicación, en cuatro agentes de código con cientos de miles de usuarios: OpenCode, OpenHands, Cline y Goose. Todas permiten ejecución de código arbitrario en la máquina del desarrollador solo por abrir el agente dentro de un repositorio que contenga los ficheros adecuados. No requieren que el usuario acepte nada, ni que el modelo haga nada. Son 0-day: reportadas a los responsables, sin fix disponible a fecha de hoy.

Solemos vigilar al modelo: prompt injection, secretos que puede leer, comandos que destruyen o filtran datos. Pero hay una pregunta anterior: ¿qué hace el agente entre que lo arrancas y que tú escribes el primer prompt? En los cuatro casos que documentamos, la respuesta es ejecutar lo que el repositorio le diga.

Cómo funcionan los agentes de código por dentro

Los agentes de código actuales no son solo un chat con un LLM. Son entornos de ejecución con sistemas de plugins, hooks, servidores MCP y ficheros de configuración que se cargan al arrancar. Esa extensibilidad es lo que los hace útiles: un plugin puede conectar al agente con tu base de datos, un hook puede ejecutar linters antes de cada commit, un servidor MCP puede exponer herramientas específicas del proyecto.

El problema es de dónde sale esa configuración. Muchos agentes la buscan dentro del propio directorio de trabajo: carpetas ocultas con nombres como .agente/plugins/ o .agente/hooks/ que contienen código o comandos que el agente carga de forma automática. La idea es que cada proyecto pueda personalizar el comportamiento del agente. En la práctica, eso significa que quien controle el repositorio controla lo que el agente ejecuta.

Y estos ficheros no son los que miras en un diff. Son carpetas ocultas, con nombres que parecen configuración interna, que pasan desapercibidas en cualquier revisión de código normal.

El escenario es simple. Alguien controla un repositorio, tú lo clonas y abres un agente dentro. Nadie toca tu cuenta, nadie te pide que apruebes nada.

Leer más