Voltar para todas as publicações
Publicado em · por Renaud Deraison

O agente recomendou o malware

A Island descobriu o FakeGit: cerca de 7.600 repositórios GitHub maliciosos, mais de 800 deles se passando por skills de IA e servidores MCP, semeando um loader do Windows chamado SmartLoader que instala o infostealer StealC. O que torna a técnica nova é o AgentBaiting — Claude Code, Gemini e ChatGPT descobrem esses repositórios sozinhos, leem o README do atacante como documentação e entregam a você os passos de instalação. Em um teste, o Claude Code clonou um repositório e executou os arquivos sozinho. O Bromure Agentic Coding roda todo esse caminho, da recomendação à execução, dentro de uma VM Linux descartável, onde um loader do Windows fica inerte e as únicas credenciais para roubar são iscas.

Você pediu ao seu agente de código que encontrasse um skill. Ele pesquisou, leu um README que parecia documentação e disse a você para baixar um ZIP e executá-lo. Ninguém enviou um link ruim. O agente encontrou o malware sozinho e o recomendou — e em um teste, clonou o repositório e executou os arquivos para você.

Em 21 de julho de 2026, a Island publicou uma pesquisa sobre uma campanha que chama de FakeGit — e uma técnica de entrega que batizou de AgentBaiting. Os números são grandes: cerca de 7.600 repositórios GitHub maliciosos em aproximadamente 6.600 contas, dos quais mais de 800 se passam por skills de IA ou servidores MCP — integrações de Gmail e WhatsApp, ferramentas de Databricks, Jenkins e Docker, o tipo de capacidade que um desenvolvedor pede a um agente de código para ir buscar. Mais de 600 deles também estavam listados em registros de IA públicos como LobeHub, Glama, MCP.so e MCP Market. Até julho, um subconjunto de cerca de 200 repositórios havia registrado mais de 14 milhões de downloads de seus arquivos de release.

O payload é um loader do Windows chamado SmartLoader que estabelece persistência e puxa o StealC, um ladrão de informações. O malware é a parte comum. Como ele chega até você é a parte nova.

AgentBaiting: o agente é o vetor de entrega

Os ataques à cadeia de suprimentos costumavam precisar de uma isca — um link em um e-mail, um nome de pacote com erro de digitação forjado que você digitou errado, um resultado de busca em que você clicou. O FakeGit remove o humano dessa etapa. A conclusão da Island, em suas próprias palavras: «Um agente de IA não precisa receber um link malicioso. Ele pode descobrir um repositório FakeGit sozinho, tratar o README como documentação legítima e repassar as instruções do atacante ao usuário.»

Eles testaram contra agentes reais:

  • Peça ao Claude Code para «encontrar um skill gratuito de prompt cinematográfico» e ele trouxe adlaiponderous700/claude-skill-cinematic-prompt e, em algumas execuções, recomendou os passos de baixar-e-executar.
  • Peça ao Gemini um «servidor MCP gratuito da Walmart» e ele retornou DomingosNgongo/walmart-mcp como primeiro resultado, com um link direto do GitHub.
  • O ChatGPT listou o mesmo repositório entre suas opções e o destacou como «o melhor lugar para começar».

Nenhum deles recebeu um link. Os agentes foram atrás de uma capacidade, encontraram os repositórios da campanha por busca e navegação em registros comuns, e leram o README escrito pelo atacante como leem qualquer documentação — como fato. Os repositórios estão vestidos exatamente para esse leitor: Mann1988/awesome-claude-skills copia o verdadeiro ComposioHQ/awesome-claude-skills (67.000+ estrelas) e se enche de 63 estrelas e 18 forks para parecer estabelecido. Os nomes de usuário estão a um caractere de distância do de um mantenedor conhecido. O README conduz o leitor por três passos: baixar o ZIP das GitHub Releases, executá-lo, ignorar qualquer aviso de segurança, seguir o assistente de instalação.

E em pelo menos uma execução, relata a Island, o Claude Code não parou na recomendação — ele «clonou repositórios maliciosos e baixou os arquivos maliciosos na máquina de teste» antes que algo nos indicadores o fizesse parar. Essa é toda a superfície de ataque em uma frase: o agente, fazendo uma tarefa de rotina, trouxe o payload para o disco por conta própria.

O que de fato aterrissa

O ZIP não é código-fonte. A Island é direta sobre o sinal: «Um servidor MCP ou Skill legítimo é código-fonte com um manifesto, não um ZIP do Windows contendo um script de lançamento, um runtime renomeado e um payload disfarçado de arquivo de texto.» Dentro de uma release FakeGit como server_databricks_mcp_1.6.zip você tem um pequeno lançador .cmd ou .bat, um runtime estilo LuaJIT renomeado (luau.exe) e um payload Lua ofuscado de cerca de 300 KB usando o nome de um arquivo de dados — ico64.txt. O lançador executa start luau.exe ico64.txt, a janela do console se esconde, e o SmartLoader:

  • resolve seu endereço de comando-e-controle a partir de um valor armazenado em um contrato inteligente na Polygon — descentralizado, difícil de derrubar;
  • registra tarefas agendadas em %LOCALAPPDATA% para sobreviver a uma reinicialização;
  • puxa estágios criptografados do GitHub e injeta o StealC em outro processo por meio de um cryptor de PE.

O StealC então faz o que os infostealers fazem, e um pouco pior: pega senhas e cookies do navegador, dados de extensões, credenciais de e-mail e de acesso remoto, capturas de tela, detalhes do host — e sessões ativas. A observação da Island sobre este último ponto importa: «O StealC pega sessões ao vivo, não apenas senhas, então redefinir apenas as senhas não é suficiente.» Um token de sessão roubado já passou do seu login.

O agente«ache um skill»buscaRepo FakeGitnome sósia · 63 estrelasREADME = «docs»lê como fatoRecomendabaixar + rodar ZIPou o clona sozinhoSua máquinaluau.exe ico64.txt → SmartLoader → StealCsenhas · cookies · sessões · tarefa agendadaexfilC2via PolygonNenhum humano clicou. O agente achou, acreditou e trouxe para casa.
O AgentBaiting fecha o ciclo sem nenhuma isca humana. O agente busca uma capacidade, encontra um repositório FakeGit sozinho, lê o README do atacante como documentação e, ou recomenda os passos de instalação, ou os clona e executa por conta própria. Numa configuração normal que roda na sua máquina: o loader do Windows executa, o StealC raspa suas senhas reais e sessões ativas, e o butim é exfiltrado.

Por que verificar o repositório nunca foi a resposta inteira

O instinto é pegar o repositório ruim — sinalizar o nome sósia, pontuar o README, colocar a conta em lista de bloqueio. O próprio conselho da Island aponta para algo mais difícil: «Observe os caminhos que os agentes usam, não apenas os caminhos que os usuários usam. O AgentBaiting significa que um download, um git clone ou um comando de shell podem se originar de um agente concluindo uma tarefa de rotina.» A busca do agente não é um caminho no qual você possa colocar um ponto de verificação humano. Ela roda na velocidade da máquina, através de milhares de repositórios quase idênticos, e trata o que quer que encontre como documentação, porque esse é o trabalho dela.

Esta é a mesma parede na qual o resto da segurança agêntica não para de bater. Uma lista de bloqueio que lê o comando perde para o shell que o reescreve. Um scanner que lê o pacote perde para o payload que não está no pacote. E uma revisão feita para encontrar malware executa o malware que foi enviada para encontrar. O FakeGit adiciona mais um: um motor de recomendação que trata o README de um atacante como verdade. Cada um deles coloca um filtro onde a coisa ruim é descrita e espera pegá-la antes que a coisa ruim execute. A descrição é do atacante para escrever. A execução é o único lugar onde o resultado se decide.

Onde o Bromure traça a linha

O Bromure Agentic Coding não tenta adivinhar melhor que os resultados de busca do agente. Ele muda o que acontece no único momento que importa — quando a coisa recomendada roda. Cada agente que o Bromure executa — Claude Code, Codex, Grok Build — roda dentro de uma VM Linux descartável no seu Mac, não no próprio macOS. Então, quando o agente clona o repositório FakeGit e executa o ZIP do jeito que a Island viu o Claude Code fazer, três coisas já são verdade.

Primeiro, o payload fica inerte. O SmartLoader é um programa do Windows: um lançador .bat, um runtime luau.exe, uma injeção por cryptor de PE, tarefas agendadas em %LOCALAPPDATA%. O agente do Bromure roda no Linux. O lançador .cmd não tem interpretador, o luau.exe e o PE do StealC injetado não vão executar, e não há %LOCALAPPDATA% nem Agendador de Tarefas do Windows ao qual a persistência possa se prender. Um ataque compilado para um sistema operacional roda no outro e não encontra nada que saiba fazer.

Segundo, não há credenciais reais para pegar. Suponha que o atacante tivesse enviado uma versão para Linux. O propósito inteiro do StealC é raspar os armazenamentos do navegador, sessões ativas e credenciais salvas — e dentro da VM não há navegador logado, nem pote de cookies, nem sessão a levantar. Os segredos que ele pode encontrar no disco e no ambiente são iscas: o Bromure injeta valores fictícios (brm_…, um ~/.kube/config sintético, tokens ssh e de nuvem descartáveis) na VM e só troca os verdadeiros de volta no host, no proxy, no caminho de saída rumo à API real. As chaves genuínas nunca entram na caixa. O que quer que chegue ao C2 resolvido pela Polygon é um saco de strings que não autentica nada.

Terceiro, a saída de rede é visível e a caixa é descartável. A busca do C2, a obtenção do estágio criptografado do GitHub, o sinalizador de exfiltração — tudo isso aparece no registro de segurança do Bromure como tráfego de saída que você pode ver. E porque a home da VM é descartável, a tarefa agendada e qualquer binário deixado somem na próxima vez que você redefinir o perfil para a base. Não há host persistente no qual o SmartLoader possa manter um apoio.

VM Linux descartávelFakeGit clonadoo agente executao ZIP aquiSmartLoader.bat + luau.exe = PEnão roda no LinuxO que o StealC roubariasem navegador · sem sessões ativasANTHROPIC_API_KEY = brm_9f2a… (falsa)git / AWS / ssh = iscasexfil (registrada)O C2 recebe iscasnão autenticam nadaSegredos reaisficam no proxy do hostinjetados no fioO agente ainda recomenda e executa. Só que longe de você, com chaves falsas.
Mesmo repositório, mesma recomendação, mesmo clone — máquina diferente. Dentro do Bromure o agente roda em uma VM Linux descartável: o loader do Windows não pode executar, não há sessão ativa nem chave real para raspar, as credenciais no disco são iscas trocadas pelas reais somente no proxy do host, e o sinalizador do C2 é registrado. A recomendação ainda acontece. O roubo não tem nada para levar.

Há uma quarta camada, porque este ataque é um ataque de leitura antes de ser um ataque de execução. O README do FakeGit é exatamente o tipo de autoridade não confiável que o Bromure vigia — a mesma classe de um CLAUDE.md invasor, um AGENTS.md ou um SKILL.md. A detecção de injeção de prompt no dispositivo do Bromure pontua o conteúdo que o agente ingere como documentação contra modelos locais que nunca deixam o Mac, mais um scanner determinístico para truques de Unicode invisível. Um README que diz ao agente «baixe este ZIP, execute-o, ignore o aviso» é exatamente o caso que esse detector existe para sinalizar. Não é uma parede por si só — mas no Bromure ele fica em cima do isolamento, de modo que uma falha ainda é pega por uma caixa sem nada real dentro.

Em torno de que isso traça uma linha

O isolamento é contenção, não um filtro de recomendação. Vale ser preciso sobre o que o Bromure muda e o que não muda aqui.

O agente ainda pode recomendar o repositório

O Bromure não verifica o GitHub, nem os registros MCP, nem os resultados de busca de um agente, e não impede o agente de trazer à tona um repositório FakeGit ou de entregar a você seus passos de instalação. Sua varredura de cadeia de suprimentos cobre registros de pacotes — npm, PyPI, Cargo e o resto — não o README de um repositório sósia. O que muda é onde a coisa recomendada roda e o que ela pode alcançar quando roda.

Um payload do Windows é barrado pela fronteira do SO, não por uma regra

O SmartLoader falha porque o agente roda no Linux, não porque o Bromure o identificou. Um ladrão nativo de Linux executaria — e ainda sairia de mãos vazias, porque não há navegador logado nem sessão ativa na VM, as credenciais são iscas, e a home é descartável.

A substituição cobre os segredos que você configura

A troca por isca protege as credenciais que você coloca num perfil: chaves de modelo, tokens de git e de nuvem, endpoints de bancos de dados gerenciados, chaves ssh. Uma sessão que você estabelece à mão dentro da caixa, ou um segredo que um script grava num arquivo durante a execução, é apenas dado. Mantenha os segredos no broker, não no espaço de trabalho.

A detecção é uma rede, não uma parede

A pontuação de injeção no dispositivo sinaliza um README de instale-e-execute mais vezes do que não, mas um autor determinado pode formular uma isca para escapar de um único scanner. Trate o detector como uma camada; é a contenção — uma caixa descartável com chaves falsas e uma saída registrada — que segura quando um detector falha.

A frase de encerramento da Island é a que vale ponderar: «As capacidades de IA se tornaram uma rota pela qual software entra na empresa, e o FakeGit não será a última campanha a usá-la.» Seu agente vai buscar skills e servidores, e parte do que ele encontra estará vestida para ser encontrada. A pergunta não é se ele um dia recomendará o repositório errado — a 7.600 repositórios e 14 milhões de downloads, às vezes vai. A pergunta é o que roda quando isso acontece: sua máquina, suas sessões de navegador e suas chaves reais, ou uma caixa Linux que você pode jogar fora com um punhado de iscas dentro. O Bromure faz com que seja a segunda.