Volver a todas las publicaciones
Publicado el · por Renaud Deraison

Añadieron tu agente a la lista

Gen Digital publicó el 8 de septiembre una investigación que muestra que ocho familias de infostealers comunes ya recogen los datos locales de los agentes de codificación de IA: tokens de acceso y de renovación, configuraciones MCP, bases de conversaciones, historiales de prompts, rastros de proyectos. No hay ningún fallo de Claude, Cursor o Codex de por medio. Los stealers llevan reglas de recolección gestionadas en remoto, así que añadir la carpeta de tu agente fue un envío de configuración a máquinas que ya estaban infectadas. Bromure Agentic Coding traslada esa carpeta a una VM y la llena de señuelos brm-, y mantiene el token de renovación en el anfitrión, donde el invitado nunca puede tenerlo.

Tu agente de codificación no tiene ningún fallo que nadie deba encontrar. Alguien se fijó en dónde guarda sus archivos y envió una sola línea nueva de configuración a unos cientos de miles de máquinas que ya estaban comprometidas.

El 8 de septiembre, Jan Rubín, que dirige el equipo de investigación de amenazas de Gen Digital, publicó un texto breve con un hallazgo poco vistoso. Ocho familias distintas de malware común de robo de información ya recogen los datos locales de los agentes de codificación de IA. Copian archivos. Esa es toda la técnica.

Los objetivos nombrados se leen como una encuesta de lo que instalaron los desarrolladores este año: Claude, Cline, Codex, Continue, Cursor, OpenCode, Kilo. Amatera fue a por Cline y Continue. Remus fue a por Claude, Cursor y OpenCode. CallbackBeaver añadió Cursor y Claude, y Gen contó más de 5.000 muestras suyas en una ventana de treinta días. BeeStealer, STG Stealer, HydraStealer, APEX Stealer y Otter Stealer hacen todos alguna versión de lo mismo. En macOS la variante es Djinn Stealer, y su lista es la más larga: Claude, Codex, Gemini, Cline, OpenCode, Kilo.

Rubín es cuidadoso con lo que describe. “La actividad no apunta a un fallo recién descubierto en Claude, Cursor o Codex”, escribe. “Más bien muestra a criminales adaptando stealers ya establecidos para recoger archivos valiosos guardados en carpetas locales predecibles.”

La lista se alargó una línea

El cambio no les costó casi nada a sus autores.

Los stealers modernos no fijan en el código lo que se llevan. Vienen con reglas de recolección gestionadas en remoto: un bloque de configuración que enumera carpetas, nombres de archivo, bases de datos, extensiones y límites de búsqueda, descargado desde la infraestructura del operador. Añadir un objetivo nuevo, como lo resumió Cyber Press, significa que los operadores “añaden las herramientas de IA recién populares a las listas de recolección del malware actualizando rutas, nombres de archivo o reglas de base de datos, sin necesariamente reconstruir el malware”.

Esto fue una decisión de producto. Alguien miró qué carpetas contienen ahora algo que vale la pena vender, escribió unas cuantas rutas en una configuración, y las máquinas que ya ejecutaban una de estas familias empezaron a enviar datos de agentes en su siguiente contacto. Los operadores no reinfectaron nada. El binario en disco siguió igual, y la firma de detección también.

Gen registró detecciones de infostealer en 3,3 millones de usuarios protegidos únicos en el primer semestre de 2026, con totales mensuales por encima de 500.000. Solo Amatera y Remus aparecieron en decenas de miles de usuarios a lo largo de tres meses. Esa es la población a la que los operadores enviaron la nueva regla.

una actualización de config, no una campañaoperador — reglas de recolecciónnavegadores, cookies, carterasSlack, Discord, perfiles VPNclaves ssh, rutas en la nube+ directorios de agentes de IAuna línea añadida, septiembrepróximo contactomáquinas ya infectadas3,3 M de usuarios, S1 2026500.000+ detecciones al mesbinario sin cambios en discono hace falta reinfectarninguna firma nueva que atraparlo que sale del portátiltokens de acceso + renovacióncredenciales de servidor MCPbase de conversacioneshistorial de promptsnombres de proyectos, fuente en cachédetalles de cuenta y suscripciónocho familias, un trimestreAmatera · Remus · CallbackBeaver · BeeStealer · STG · Hydra · APEX · Otter — y Djinn en macOS
Añadir los agentes de codificación de IA a la lista del botín no les costó a los operadores ninguna compilación nueva. Los stealers comunes descargan de sus operadores reglas de recolección gestionadas en remoto (carpetas, nombres de archivo, bases de datos, extensiones). Un operador añade los directorios de los agentes, y cada máquina ya infectada empieza a recogerlos en su siguiente contacto. El binario en disco no cambia, así que nada en la máquina parece distinto.

Qué hay en esa carpeta

El inventario de Gen sobre lo que recogen las reglas es concreto: “tokens de acceso y de renovación, credenciales guardadas en configuraciones MCP, historiales de prompts, bases de conversaciones, detalles de cuenta y rastros de los proyectos en los que ha estado trabajando un desarrollador”.

Esa lista mete dos pérdidas de naturaleza distinta bajo un mismo nombre.

La primera es acceso. Un token de acceso compra una sesión. Un token de renovación compra sesiones, en plural, durante todo el tiempo que siga siendo válido, porque alguien lo diseñó para sobrevivir a la sesión de la que vino. Esa propiedad es lo que lo hace digno de robo, y es la razón por la que revocar una sesión deja al ladrón donde estaba. A su lado, en la misma carpeta, están las credenciales de tu configuración MCP, que abren todavía otra cosa: un servicio interno, un sistema de tickets, una base de datos detrás de un servidor MCP por HTTP.

El segundo tipo de pérdida es inteligencia, y es más nuevo. Tu historial de prompts es una visita guiada a la infraestructura de tu empresa. Cyber Press lo dijo sin rodeos: los historiales de prompts robados revelan “nombres de repositorios, nombres de host internos, detalles de infraestructura, controles de seguridad, secretos de API y planes de negocio”. Un martes tecleas el nombre del servicio, el nombre del clúster, el motivo por el que la migración está bloqueada, y luego pegas el fragmento con la cadena de conexión dentro para preguntar por qué la cosa sigue fallando. Nunca has escrito un modelo de amenazas para tu propio registro de conversación.

Llega por un resultado de búsqueda

Colocar el stealer tampoco requiere un zero-day. En mayo, EclecticIQ documentó una campaña que colocó páginas de instalación falsas por encima de las reales: claudecode.co.com y geminicli.co.com, imitando la documentación del fabricante lo bastante de cerca como para pasar a primera vista. La página te tiende una línea de PowerShell para copiar. La ejecutas y obtienes la herramienta que querías, instalada a la vista, mientras un segundo comando oculto tira de un stealer sin archivo directamente a memoria. Apaga ETW y AMSI de camino, y luego cosecha navegadores, Slack, Teams, Discord, clientes VPN, claves SSH y rutas de almacenamiento en la nube. El mismo actor jugó la misma baza contra Node.js, Chocolatey, KeePassXC y Monero.

La víctima, entonces, es el desarrollador que buscó un agente de codificación e hizo clic en el primer resultado. Cuatro meses después ese desarrollador también está entregando los tokens y el historial de conversación del agente, porque la regla de recolección creció una línea.

El mismo barrido, dentro de un espacio de trabajo Bromure

Bromure Agentic Coding ejecuta cada agente de codificación en una VM Linux con virtualización por hardware en tu Mac y mantiene todo secreto real en el lado anfitrión de esa frontera. Coge la lista de recolección de Gen punto por punto y pásala por un espacio de trabajo. Supón que el stealer gana en el anfitrión, lee la regla y va a buscar cada cosa.

Tokens de acceso y de renovación. Si usas una suscripción de Claude o ChatGPT en lugar de una clave de API, el inicio de sesión nunca ocurre en tu VM de trabajo. Bromure arranca una VM de registro desechable, sin carpetas del espacio de trabajo montadas y sin mapa de intercambio de credenciales, ejecuta el claude login de verdad dentro de ella, captura en el anfitrión los tokens OAuth resultantes, los cifra y destruye la VM. A partir de ahí el invitado corre en modo clave de API con una credencial falsa determinista: una ANTHROPIC_API_KEY falsa para Claude, un ~/.codex/auth.json sembrado con un JWT falso de caducidad lejanísima para Codex, de modo que el cliente nunca intente renovarlo por su cuenta. Quien renueva es el anfitrión, unos cinco minutos antes de caducar, una vez por cada VM en ejecución. El manual expone la consecuencia sin rodeos: el invitado nunca tiene un token de renovación.

Credenciales guardadas en configuraciones MCP. El bearer de MCP recibe el mismo trato, y el panel de ajustes lo dice. El token real de un servidor MCP con transporte HTTP se queda en el anfitrión, la configuración que lee el agente recibe un marcador brm-mcp_…, y el proxy sustituye el valor real en el cable, con ámbito exacto o de subdominio para el host de ese servidor y para ningún otro. El campo del panel MCP lleva la leyenda Nunca se envía a la VM — lo cambia el proxy.

Todo lo demás que parece una clave. Cada credencial que configuras queda reemplazada dentro de la VM por un señuelo que preserva la estructura, derivado del valor real más una sal por instalación, de forma que conserva la forma que esperan los validadores y se mantiene estable entre sesiones: sk-ant-api03-brm-…, sk-brm-…, xai-brm-…, brm-k8s-…, brm-docker-…, brm-db-…. El canal de intercambio solo corre en un sentido. El anfitrión puede escribir señuelos dentro del invitado; no hay llamada por la que el invitado pida de vuelta un valor real, y el agente dentro de la VM se niega a escribir cualquier credencial que no lleve el prefijo brm-.

Bases de conversaciones, historiales de prompts, referencias de proyectos, fuente en caché. Estos son reales y duraderos, porque el trabajo de código necesita estado duradero. Viven en la carpeta personal persistente de la propia VM del espacio de trabajo, una por espacio de trabajo, detrás del hipervisor, y no en el directorio personal de macOS que nombra la regla de recolección. Una regla que dice “copia el directorio de configuración del agente desde el perfil de usuario” encuentra un perfil de usuario sin ningún agente dentro.

El almacén del propio anfitrión. Lo que guarda el anfitrión está cifrado en reposo con AES-GCM bajo una clave maestra de 256 bits por instalación que vive en el llavero de Data Protection de macOS, acotada a la identidad de firma de la aplicación, con la sincronización de iCloud desactivada. La aplicación no sube ni sincroniza nada. Copia la carpeta Application Support, o restaura una copia de Time Machine de ella, y sin la entrada del llavero de este Mac tienes texto cifrado.

la regla de recolección, pasada por un espacio de trabajolo que pide la reglalo que encuentratokens de acceso + renovaciónuna clave falsa; no existe token de renovación en la VMel anfitrión renueva ~5 min antes de caducar, para todas las VMconfiguración MCPbrm-mcp_…el bearer real se cambia en el cable, solo para ese hostclaves de API, credenciales de nubesk-ant-api03-brm-… · brm-k8s-… · brm-db-…forma correcta, valor incorrecto, inerte fuera de su ámbitobase de conv., historial de promptsreales, duraderos — y dentro del home de la VM, no del tuyola ruta de la regla nombra una carpeta que tu Mac no tiene
La lista de recolección de Gen Digital, punto por punto, pasada por un espacio de trabajo de Bromure Agentic Coding. Los tokens de suscripción están en el anfitrión y se renuevan en el anfitrión, así que el invitado nunca tiene un token de renovación. El bearer de MCP en la configuración del agente es un marcador brm-mcp. Las claves de API son señuelos que preservan la estructura. La base de conversaciones y el historial de prompts son reales, y están en la carpeta personal persistente de la VM en lugar del directorio personal de macOS al que apunta la regla.

Cuando el barrido ocurre dentro de la VM

Un stealer también puede llegar por el otro lado: traído por el propio agente, a través de una dependencia o una instrucción envenenada, y ejecutado dentro del espacio de trabajo. Entonces el barrido funciona, y recoge señuelos. Donde se cae es en la subida.

Cada señuelo tiene una única familia de destinos legítima, el ámbito de host para el que fue acuñado, así que el proxy escanea cada petición saliente, cabeceras y cuerpo, con un autómata de Aho-Corasick lo bastante barato como para correr sobre todo, buscando un señuelo que vaya a donde no le corresponde. Al encontrarlo, rechaza la petición con HTTP 451 sin reenviar un solo byte, pausa la VM en el acto y levanta una alerta que ofrece Apagar, Guardar para investigación (exportar antes el disco, la carpeta personal y las carpetas compartidas para el análisis forense), o Continuar por tu cuenta y riesgo. El evento aterriza como una fila roja de Credential brokering en la Security Timeline, la aplicación marca el espacio de trabajo como comprometido, y el siguiente arranque exige Borrar y arrancar.

El proxy también señala secretos sin cambiar y de aspecto real en el tráfico saliente: valores Bearer y x-api-key con prefijos conocidos como sk-ant-, ghp_ o AKIA, y tokens opacos de veinte caracteres o más. Esos aparecen en el Trace Inspector y en bromure-cli trace leaks. Suelen significar que alguien pegó un secreto real dentro de la VM a mano, que es la única manera de deshacer la frontera desde dentro.

La alcanzabilidad es la tercera comprobación. Cada espacio de trabajo lleva un cortafuegos de salida ordenado que cubre acción, protocolo, host o CIDR, puertos y, para el tráfico web, los verbos HTTP individuales, con un control segmentado para el tráfico no emparejado. Los espacios de trabajo nuevos permiten lo que no casa con ninguna regla. Ponlo en Denegar, enumera lo que el trabajo necesita, y el host de C2 de un stealer no está en la lista. Dos componentes fuera del invitado lo aplican: el conmutador de red virtual casa cada flujo por IP de destino y por nombre de host espiado en el DNS, y el proxy casa otra vez por nombre de servidor TLS. Tus ediciones de reglas llegan a las sesiones en marcha sin reiniciar.

el estado está en tu carpeta personaluna ruta predecible, legible por todo lo que corre como túel directorio del agentetoken de acceso · token de renovaciónbearer tokens de MCPbase de conversacioneshistorial de prompts · nombres de proyectosel stealer residente lee la regla y copia la carpetael binario nunca cambió; solo la lista de rutassubidoacceso renovable, más un mapa del parqueel estado está en una VM, y son señuelostu home de macOS no tiene directorio de agente que nombrarVM del espacio de trabajo — home persistenteclave falsa · sin token de renovaciónbrm-mcp_… · brm-k8s-… · brm-db-…base de conversaciones e historial, tras el hipervisorlos reales cifrados en el anfitrión, AES-GCM, llaverovsock 8443 — la única salidaproxy anfitrión — consultado por peticióncortafuegos de salida · host, puerto, verbo HTTPcambio · valor real inyectado para un solo hostuna fila de traza por petición, en tu máquinaseñuelo fuera de su ámbito → HTTP 451, VM en pausa, fila en la timeline
Dos sitios donde guardar el estado de un agente. En un Mac corriente los tokens, las credenciales MCP y el historial de conversación están en una carpeta predecible del perfil de usuario, que es justo la que nombra la regla de recolección, y cualquier cosa que corra como tú puede leerla. En un espacio de trabajo de Bromure Agentic Coding el mismo estado está en la carpeta personal persistente de una VM, las credenciales que hay en ella son señuelos brm-, y la única ruta hacia fuera es el puerto vsock 8443 hasta un proxy anfitrión que comprueba el cortafuegos, cambia las credenciales y rechaza cualquier señuelo que salga de su ámbito.

Si instalas agentes por copiar y pegar

Comprueba de dónde los sacaste. La campaña de EclecticIQ colocó claudecode.co.com y geminicli.co.com por encima de las páginas reales y entregó a los visitantes una línea de PowerShell que instalaba la herramienta legítima mientras tiraba de un stealer a memoria. Si eso describe alguna instalación que hiciste, trata la máquina entera como expuesta: revoca las sesiones de la suscripción en lugar de rotar una sola clave, rota todos los tokens de tu configuración MCP, y lee tu propio historial de prompts como lo leería un atacante. Los nombres de host y de repositorio que hay ahí son la parte que no puedes rotar.

Los dos ajustes que encogen el objetivo

Registra tu suscripción de Claude o ChatGPT desde el editor del espacio de trabajo, para que los tokens OAuth se capturen en el anfitrión y el invitado corra con una clave falsa. Luego abre Guardrails, pon Tráfico no emparejado en Denegar, y enumera lo que el trabajo necesita: allow web api.github.com, allow web registry.npmjs.org, default deny. Ejecuta bromure-cli trace hostnames my-workspace tras una sesión para ver cada host que alcanzó el agente, con sus conteos.

El botín sigue a la adopción

Los stealers aprenden carpetas en un orden predecible. Perfiles de navegador, luego carteras de criptomonedas, luego tokens de Discord y Slack, luego perfiles VPN. Cada uno entró en las reglas de recolección uno o dos años después de que la cosa a la que pertenecía se volviera normal. Ese retraso es lo que tarda en haber suficientes máquinas con la carpeta como para que valga la pena escribir la línea de configuración.

Los agentes de codificación cruzaron ese umbral este año, a un precio de entrada de una actualización de configuración, en ocho familias, dentro de un solo trimestre. Ningún parche cierra esto, porque no hay nada roto. La carpeta está donde debe estar, con lo que debe tener dentro, en una máquina que también ejecuta tu navegador y tu correo.

Lo que cambia el desenlace es hacer que la carpeta valga menos que la molestia de copiarla. Pon el estado del agente al otro lado de un hipervisor, llena sus archivos de credenciales con valores de la forma correcta y el número equivocado, y guarda los reales en el anfitrión, donde ocurre la renovación.

Tu agente de codificación es una aplicación normal que guarda archivos normales en un sitio normal, y por eso acabó en la lista. Decide cuánto se les permite valer a esos archivos, antes de que la próxima familia actualice su configuración. Instala Bromure Agentic Coding y deja que copien los señuelos.