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.
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.
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.
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.