Eles adicionaram o seu agente à lista
A Gen Digital publicou em 8 de setembro uma pesquisa mostrando que oito famílias de infostealers comuns agora coletam os dados locais dos agentes de codificação de IA: tokens de acesso e de renovação, configurações MCP, bancos de conversas, históricos de prompts, rastros de projetos. Nenhuma falha do Claude, do Cursor ou do Codex está envolvida. Os stealers carregam regras de coleta gerenciadas remotamente, então adicionar a pasta do seu agente foi apenas uma atualização de configuração enviada a máquinas que já estavam infectadas. O Bromure Agentic Coding move essa pasta para dentro de uma VM e a preenche com falsificações brm-, e mantém o token de renovação no host, onde o convidado nunca pode segurá-lo.
O seu agente de codificação não tem bug nenhum para alguém encontrar. Alguém reparou onde ele guarda os arquivos e enviou uma única linha nova de configuração para algumas centenas de milhares de máquinas que já estavam comprometidas.
Em 8 de setembro, Jan Rubín, que lidera a equipe de pesquisa de ameaças da Gen Digital, publicou um texto curto com um achado sem glamour. Oito famílias distintas de malware comum de roubo de informação agora coletam os dados locais dos agentes de codificação de IA. Elas copiam arquivos. Essa é toda a técnica.
Os alvos nomeados parecem uma enquete sobre o que os desenvolvedores instalaram este ano: Claude, Cline, Codex, Continue, Cursor, OpenCode, Kilo. O Amatera foi atrás de Cline e Continue. O Remus foi atrás de Claude, Cursor e OpenCode. O CallbackBeaver acrescentou Cursor e Claude, e a Gen contou mais de 5.000 amostras dele em uma janela de trinta dias. BeeStealer, STG Stealer, HydraStealer, APEX Stealer e Otter Stealer estão todos fazendo alguma versão da mesma coisa. No macOS a variante é o Djinn Stealer, e a lista dele é a mais longa: Claude, Codex, Gemini, Cline, OpenCode, Kilo.
Rubín é cuidadoso ao descrever o que está vendo. “A atividade não aponta para uma falha recém-descoberta no Claude, no Cursor ou no Codex”, escreve ele. “Ela mostra, isso sim, criminosos adaptando stealers já estabelecidos para coletar arquivos valiosos guardados em pastas locais previsíveis.”
A lista ficou uma linha maior
A mudança custou quase nada a quem a fez.
Os stealers modernos não fixam no código o que levam. Eles vêm com regras de coleta gerenciadas remotamente: um bloco de configuração listando pastas, nomes de arquivos, bancos de dados, extensões e limites de busca, buscado na infraestrutura do operador. Acrescentar um alvo novo, como o Cyber Press resumiu, significa que os operadores “adicionam ferramentas de IA recém-populares às listas de coleta do malware atualizando caminhos, nomes de arquivos ou regras de banco de dados, sem necessariamente reconstruir o malware”.
Isso foi uma decisão de produto. Alguém olhou quais pastas agora guardam algo que vale a pena vender, escreveu alguns caminhos numa configuração, e as máquinas que já rodavam uma dessas famílias começaram a enviar os dados dos agentes no contato seguinte. Os operadores não reinfectaram nada. O binário em disco continuou o mesmo, e a assinatura de detecção também.
A Gen registrou detecções de infostealer em 3,3 milhões de usuários protegidos únicos no primeiro semestre de 2026, com totais mensais acima de 500.000. Só o Amatera e o Remus apareceram em dezenas de milhares de usuários ao longo de três meses. É essa a população para a qual os operadores enviaram a nova regra.
O que tem nessa pasta
O inventário da Gen sobre o que as regras coletam é específico: “tokens de acesso e de renovação, credenciais guardadas em configurações MCP, históricos de prompts, bancos de conversas, detalhes de conta e rastros dos projetos em que um desenvolvedor esteve trabalhando”.
Essa lista guarda dois tipos diferentes de perda sob um nome só.
O primeiro é acesso. Um token de acesso compra uma sessão. Um token de renovação compra sessões, no plural, por todo o tempo em que continuar válido, porque alguém o projetou para sobreviver à sessão de onde veio. É essa propriedade que o torna digno de roubo, e é por isso que revogar uma sessão deixa o ladrão onde ele estava. Ao lado dele, na mesma pasta, estão as credenciais da sua configuração MCP, que abrem outra coisa ainda: um serviço interno, um sistema de chamados, um banco de dados atrás de um servidor MCP em HTTP.
O segundo tipo de perda é inteligência, e é mais novo. O seu histórico de prompts é um passeio guiado pela infraestrutura do seu empregador. O Cyber Press disse sem rodeios: históricos de prompts roubados revelam “nomes de repositórios, hostnames internos, detalhes de infraestrutura, controles de segurança, segredos de API e planos de negócio”. Numa terça-feira você digita o nome do serviço, o nome do cluster, o motivo pelo qual a migração está travada, e então cola o trecho com a string de conexão dentro para perguntar por que a coisa continua falhando. Você nunca escreveu um modelo de ameaças para o seu próprio log de conversa.
Ele chega por um resultado de busca
Colocar o stealer na máquina também não exige um zero-day. Em maio, a EclecticIQ
documentou uma campanha que
colocou páginas falsas de instalação acima das verdadeiras:
claudecode.co.com e geminicli.co.com, imitando a documentação do fornecedor
de perto o bastante para passar num olhar rápido. A página entrega uma linha de
PowerShell para você copiar. Você executa e recebe a ferramenta que queria,
instalada à vista de todos, enquanto um segundo comando escondido puxa um stealer
sem arquivo direto para a memória. Ele desliga ETW e AMSI no caminho, e depois
colhe navegadores, Slack, Teams, Discord, clientes de VPN, chaves SSH e caminhos
de armazenamento na nuvem. O mesmo ator rodou a mesma jogada contra Node.js,
Chocolatey, KeePassXC e Monero.
A vítima, então, é o desenvolvedor que procurou um agente de codificação e clicou no primeiro resultado. Quatro meses depois esse mesmo desenvolvedor também está entregando os tokens e o histórico de conversas do agente, porque a regra de coleta ganhou uma linha.
A mesma varredura, dentro de um workspace Bromure
O Bromure Agentic Coding roda cada agente de codificação em uma VM Linux com virtualização de hardware no seu Mac e mantém todo segredo real do lado do host dessa fronteira. Pegue a lista de coleta da Gen item por item e rode contra um workspace. Suponha que o stealer vença no host, leia a regra e vá buscar cada coisa.
Tokens de acesso e de renovação. Se você usa uma assinatura do Claude ou do
ChatGPT em vez de uma chave de API, o login nunca acontece na sua VM de trabalho.
O Bromure inicializa uma VM de registro descartável, sem pastas do workspace
montadas e sem mapa de troca de credenciais, roda o claude login de verdade
dentro dela, captura no host os tokens OAuth resultantes, criptografa-os e
destrói a VM. Dali em diante o convidado roda em modo de chave de API segurando
uma credencial falsa determinística: uma ANTHROPIC_API_KEY falsa para o Claude,
um ~/.codex/auth.json semeado com um JWT falso de expiração muito distante para
o Codex, de modo que o cliente nunca tente renová-lo sozinho. Quem renova é o
host, cerca de cinco minutos antes da expiração, uma vez para cada VM em
execução. O manual coloca a consequência sem rodeios: o convidado nunca segura
um token de renovação.
Credenciais guardadas em configurações MCP. O bearer do MCP recebe o mesmo
tratamento, e o painel de ajustes diz isso. O token verdadeiro de um servidor MCP
com transporte HTTP fica no host, a configuração que o agente lê recebe um
substituto brm-mcp_…, e o proxy troca pelo valor real no fio, com escopo exato
ou de subdomínio para o host daquele servidor e para mais lugar nenhum. O campo
no painel MCP traz a legenda Nunca enviado à VM — trocado pelo proxy.
Todo o resto que parece uma chave. Cada credencial que você configura é
substituída dentro da VM por uma falsificação que preserva a estrutura, derivada
do valor real mais um sal por instalação, então ela mantém o formato que os
validadores esperam e continua estável entre sessões: sk-ant-api03-brm-…,
sk-brm-…, xai-brm-…, brm-k8s-…, brm-docker-…, brm-db-…. O canal de
troca só corre num sentido. O host pode escrever falsificações dentro do
convidado; não existe chamada pela qual o convidado peça de volta um valor real,
e o agente dentro da VM se recusa a escrever qualquer credencial que não carregue
o prefixo brm-.
Bancos de conversas, históricos de prompts, referências de projetos, fonte em cache. Esses são reais e duráveis, porque trabalho de código precisa de estado durável. Eles vivem na pasta pessoal persistente da própria VM do workspace, uma por workspace, atrás do hipervisor, e não no diretório pessoal do macOS que a regra de coleta nomeia. Uma regra que diz “copie o diretório de configuração do agente do perfil do usuário” encontra um perfil de usuário sem agente nenhum dentro.
O armazenamento do próprio host. O que o host guarda fica criptografado em
repouso com AES-GCM sob uma chave mestra de 256 bits por instalação que vive no
Keychain de Data Protection do macOS, restrita à identidade de assinatura do
aplicativo, com a sincronização do iCloud desativada. O aplicativo não envia nem
sincroniza nada. Copie a pasta Application Support, ou restaure um backup dela
do Time Machine, e sem a entrada de keychain deste Mac você tem texto cifrado.
Quando a varredura acontece dentro da VM
Um stealer também pode chegar pelo outro lado: puxado pelo próprio agente, por uma dependência ou por uma instrução envenenada, e executado dentro do workspace. Aí a varredura funciona, e ela coleta falsificações. É no envio que a coisa cai.
Cada falsificação tem uma única família legítima de destino, o escopo de host para o qual foi cunhada, então o proxy varre toda requisição de saída, cabeçalhos e corpo, com um autômato de Aho-Corasick barato o bastante para rodar em tudo, procurando uma falsificação indo para onde ela não pertence. Ao acertar, ele recusa a requisição com HTTP 451 sem encaminhar um byte, põe a VM em pausa na hora e levanta um alerta que oferece Desligar, Guardar para investigação (exportar antes o disco, a pasta pessoal e as pastas compartilhadas para perícia), ou Continuar por sua conta e risco. O evento aparece como uma linha vermelha de Credential brokering na Security Timeline, o aplicativo marca o workspace como comprometido, e o próximo início exige Limpar e iniciar.
O proxy também sinaliza segredos não trocados e com cara de reais no tráfego de
saída: valores de Bearer e x-api-key com prefixos conhecidos como sk-ant-,
ghp_ ou AKIA, e tokens opacos de vinte caracteres ou mais. Esses aparecem no
Trace Inspector e em bromure-cli trace leaks. Em geral querem dizer que alguém
colou um segredo real dentro da VM na mão, que é a única maneira de desfazer a
fronteira por dentro.
Alcançabilidade é a terceira checagem. Cada workspace carrega um firewall de saída ordenado cobrindo ação, protocolo, host ou CIDR, portas e, para tráfego web, os verbos HTTP individuais, com um controle segmentado para o tráfego não correspondido. Workspaces novos permitem o que nenhuma regra alcança. Ponha em Negar, liste o que o trabalho precisa, e o host de C2 de um stealer não está na lista. Dois componentes fora do convidado aplicam isso: o switch de rede virtual casa cada fluxo por IP de destino e por hostname bisbilhotado no DNS, e o proxy casa de novo pelo nome de servidor TLS. As suas edições de regra chegam às sessões em execução sem reinicializar.
Se você instala agentes por copiar e colar
Confira de onde eles vieram. A campanha da EclecticIQ colocou
claudecode.co.com e geminicli.co.com acima das páginas reais e entregou
aos visitantes uma linha de PowerShell que instalava a ferramenta legítima
enquanto puxava um stealer para a memória. Se isso descreve alguma
instalação que você fez, trate a máquina inteira como exposta: revogue as
sessões da assinatura em vez de rotacionar uma chave, rotacione todos os
tokens da sua configuração MCP, e leia o seu próprio histórico de prompts do
jeito que um atacante leria. Os hostnames e nomes de repositório dentro dele
são a parte que você não consegue rotacionar.
As duas configurações que encolhem o alvo
Registre a sua assinatura do Claude ou do ChatGPT pelo editor de workspace,
para que os tokens OAuth sejam capturados no host e o convidado rode com uma
chave falsa. Depois abra Guardrails, ponha Tráfego não correspondido
em Negar e liste o que o trabalho precisa: allow web api.github.com,
allow web registry.npmjs.org, default deny. Rode
bromure-cli trace hostnames my-workspace depois de uma sessão para ver
cada host que o agente alcançou, com as contagens.
O saque segue a adoção
Stealers aprendem pastas numa ordem previsível. Perfis de navegador, depois carteiras de criptomoeda, depois tokens de Discord e Slack, depois perfis de VPN. Cada um entrou nas regras de coleta um ou dois anos depois que a coisa a que ele pertencia virou normal. O atraso é o tempo que leva para máquinas suficientes terem a pasta e a linha de configuração valer a pena de ser escrita.
Os agentes de codificação cruzaram esse limiar este ano, a um preço de entrada de uma atualização de configuração, em oito famílias, dentro de um único trimestre. Nenhum patch fecha isso, porque nada está quebrado. A pasta está onde deveria estar, guardando o que deveria guardar, numa máquina que também roda o seu navegador e o seu e-mail.
O que muda o desfecho é fazer a pasta valer menos que o trabalho de copiá-la. Ponha o estado do agente do outro lado de um hipervisor, encha os arquivos de credenciais dele com valores do formato certo e do número errado, e mantenha os verdadeiros no host, onde a renovação acontece.
O seu agente de codificação é um aplicativo normal que guarda arquivos normais num lugar normal, e é por isso que ele foi parar na lista. Decida quanto esses arquivos têm permissão de valer, antes que a próxima família atualize a configuração dela. Instale o Bromure Agentic Coding e deixe que copiem os chamarizes.