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-prompte, 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-mcpcomo 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.
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.
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.