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

O pacote que o agente inventou

Pesquisadores da Universidade de Tel Aviv, do Technion e da Intuit divulgaram o HalluSquatting: os atacantes sondam um agente de código até descobrir quais nomes de pacotes, repositórios ou skills ele inventa de forma confiável, registram esses nomes inventados e esperam. Quando você pede a coisa real, o agente busca a versão do atacante — e as instruções ocultas dentro dela sequestram o shell do agente para instalar malware de botnet. Nomes de repositórios alucinados em até 85% das vezes; instalações de skills em até 100%. O Bromure Agentic Coding executa todo esse caminho de busca e execução dentro de uma VM Linux descartável, verifica os registros de pacotes onde o palpite cai, e deixa ao malware apenas iscas para roubar.

Você pediu ao seu agente de código um pacote conhecido. Ele digitou um nome que parecia certo, executou a instalação e seguiu em frente. O nome era um palpite — e alguém já havia registrado exatamente esse palpite e o preenchido com malware. Ninguém cometeu um erro de digitação. O agente inventou o nome, e o atacante esperava onde a invenção caiu.

Em julho de 2026, um grupo da Universidade de Tel Aviv, do Technion e da Intuit — Aya Spira, Stav Cohen, Ron Bitton, Avishai Wool e Ben Nassi, entre outros — descreveu um ataque que chamam de HalluSquatting. Ele transforma uma das fraquezas mais conhecidas dos grandes modelos de linguagem — o fato de inventarem coisas e afirmarem a invenção como fato — em um sistema de entrega para a cadeia de suprimentos, mirado não em você, mas no agente que trabalha em seu nome.

A montagem é quase banal de tão simples. Peça a um agente de código para puxar um pacote, clonar um repositório ou instalar um skill para um projeto que ele nunca viu, e ele muitas vezes adivinhará o identificador em vez de admitir que não sabe. O HalluSquatting transforma esse palpite em arma.

De um erro de digitação a uma alucinação

O typosquatting existe desde sempre: registre expresss ou lodahs, espere que um humano erre a tecla no terminal. Depende de uma pessoa cometer um erro. O slopsquatting, que surgiu ao longo de 2025 e início de 2026, moveu o erro para o modelo — um agente alucina um nome de pacote que não existe, um atacante o registra primeiro, e o próximo agente que alucina o mesmo nome instala a carga. Em janeiro de 2026, Charlie Eriksen, da Aikido, documentou um pacote npm alucinado, react-codeshift, que se espalhou para 237 projetos antes que alguém percebesse. Nenhum erro de digitação foi cometido, então nenhuma defesa contra typosquatting foi acionada também.

O HalluSquatting é a escalada de 2026, e a escalada está em que a alucinação não é mais deixada ao acaso. O método dos pesquisadores é uma receita de quatro passos:

  1. Escolha um alvo que o modelo não tenha memorizado. Repositórios em alta e ferramentas que surgiram depois do corte do treinamento são o ponto ideal: o modelo já ouviu falar deles, então vai tentar, mas não viu o nome real, então vai inventar um.
  2. Aprenda o erro. Sonde o agente repetidamente até saber qual nome falso ele produz de forma confiável. O artigo relata nomes de repositórios alucinados aparecendo em até 85% das vezes, e cenários de instalação de skills chegando a até 100% — consistente o suficiente para apostar.
  3. Reivindique o nome inventado. Registre-o no GitHub ou numa loja de plugins e preencha o README, o manifesto ou o SKILL.md com instruções escritas para o agente ler.
  4. Espere. Quando um desenvolvedor pede o recurso real, o agente emite o identificador inventado do atacante em vez disso e o busca. As instruções ocultas então sequestram a própria ferramenta de execução de comandos do agente para instalar a carga.

Essa carga não é uma prova de conceito. Os pesquisadores encadeiam o palpite a uma injeção de prompt — o que o grupo de Nassi chama de promptware — e chegam à execução remota de código e a malware de botnet: máquinas de desenvolvedores infectadas que ligam de volta para casa e recebem ordens. O palpite coloca o arquivo do atacante no prato do agente, as instruções enterradas o transformam em comandos, e os comandos constroem um botnet a partir dos laptops dos desenvolvedores.

Por que isto é um ataque ao agente, não a você

A frase que resume tudo, tirada do estudo, é que o HalluSquatting "migra o alvo dos humanos para os agentes de IA, que podem não confirmar se a fonte é real enquanto executam comandos". Um humano inseguro sobre o nome de um pacote para, verifica o registro, olha a contagem de estrelas. Um agente em modo de execução automática não para. Seu trabalho é continuar, e um nome que saiu de seus próprios pesos carrega a mesma autoridade que um nome que você digitou. Ele não tem motivo para duvidar de si mesmo.

Os pesquisadores testaram nas ferramentas que os desenvolvedores usam todos os dias — GitHub Copilot, Cursor, Windsurf, Cline, Google Gemini CLI e a família OpenClaw — e descobriram que as alucinações eram "transferíveis entre diferentes modelos de LLM e aplicações", funcionando contra agentes construídos sobre modelos da Anthropic, da OpenAI e do Google. Nenhum fornecedor pode corrigir isto com um patch, porque cabalga sobre a forma compartilhada de como um agente de código transforma um pedido em ação: adivinhar o nome, buscar o recurso, ler o que ele diz, fazer o que ele diz.

O agente“adicione o pacote X”adivinha um nomebuscaNome inventadopré-registrado pelo atacanteREADME = instruçõeslê como planoInjeção de promptsequestra o shellferramenta → instalaSua máquinacarga do botnet instala · recebe ordenschaves reais · tokens · sessões no discosinalC2botnetNenhum humano errou a digitação. O palpite do agente era o endereço, e o atacante o possuía.
O HalluSquatting remove o humano da cadeia de suprimentos. O atacante sonda o agente até aprender qual nome o modelo inventa, registra esse nome exato com um README ou manifesto armadilhado, e espera. Quando você pede o recurso real, o agente emite o nome inventado, busca a versão do atacante, lê as instruções embutidas como seu próprio plano, e instala a carga do botnet. Numa configuração comum, isso roda na sua máquina.

Por que "só parar de alucinar" nunca foi a solução

A resposta tentadora é fazer o modelo verificar a si mesmo — resolver o nome antes de buscar, sinalizar clone, install e fetch, ancorar cada identificador em algo real. São boas ideias, e os pesquisadores as recomendam. Mas todas vivem no mesmo lugar: um filtro que lê o que o agente está prestes a fazer e espera pegar o caso ruim antes que ele execute. O HalluSquatting é projetado exatamente contra esse leitor. O nome parece legítimo porque o modelo o produziu; o README parece documentação porque é isso que um README é; o comando de instalação é a coisa mais comum que um agente de código faz o dia todo.

Este é o muro contra o qual o resto da segurança de agentes vive se chocando. Uma lista de bloqueio que lê um comando perde para o shell que o reescreve. Um scanner que lê um pacote perde para a carga que não está no pacote. Um agente que busca um skill recomenda o malware que ele mesmo encontrou. O HalluSquatting adiciona a versão mais afiada até agora: o nome malicioso não veio da internet de jeito nenhum. Veio do modelo. Você não pode colocar na lista negra a imaginação do seu próprio agente. A descrição é do atacante para escrever, e a execução é o único lugar onde o desfecho é decidido.

Onde o Bromure traça a linha

O Bromure Agentic Coding não tenta convencer o modelo a não adivinhar. Ele muda o que um palpite errado pode alcançar. 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 macOS em si. Então, quando o agente emite um nome inventado, busca o recurso do atacante e executa a instalação do jeito que os pesquisadores viram esses agentes fazerem, várias coisas já são verdadeiras.

Primeiro, e raro para essa classe de ataque, o caminho do registro é verificado. Quando o nome inventado é um pacote npm, PyPI ou Cargo — o caso do slopsquatting, o caso react-codeshift — ele cai bem dentro da verificação de cadeia de suprimentos do Bromure, que inspeciona os pacotes conforme são puxados dos registros públicos. Esta é a única parte do HalluSquatting onde o palpite se resolve em algo que o Bromure foi construído para examinar diretamente, antes de ser confiado. Uma dependência alucinada ainda é uma dependência, e entra pela porta da frente que o Bromure vigia.

Segundo, a carga roda numa caixa que você joga fora. Suponha que o nome inventado aponte para um repositório GitHub ou um skill de loja de plugins em vez de um pacote de registro, e que o loader do botnet execute. Ele executa dentro da VM. Não há host persistente sobre o qual receber ordens: redefina o perfil para a base e o binário depositado, a tarefa agendada, o ponto de apoio — tudo isso desaparece. Um nó de botnet que se desvanece na próxima redefinição não é grande coisa como nó de botnet.

Terceiro, não há credenciais reais para alistar. Um malware de botnet que vasculha o ambiente e o disco em busca de chaves de API, tokens git e de nuvem, e chaves SSH encontra iscas: o Bromure injeta valores de substituição (brm_…, um ~/.kube/config sintético, tokens ssh e de nuvem descartáveis) na VM e só devolve os reais no host, no proxy, no caminho de saída para a API genuína. As chaves reais nunca entram na caixa. O que a carga envia para seu comando e controle é um saco de strings que não autenticam nada.

Quarto, o promptware é lido diante de um detector. O HalluSquatting é um ataque de leitura antes de ser um ataque de execução — todo o exploit depende de o agente ingerir o README, o manifesto ou o SKILL.md do atacante e tratá-lo como seu próprio plano. É precisamente a autoridade não confiável que o Bromure vigia: a mesma classe de um CLAUDE.md ou AGENTS.md malicioso. A detecção de injeção de prompt no dispositivo do Bromure avalia o conteúdo que o agente lê como documentação diante de modelos locais que nunca deixam o Mac, mais um scanner determinístico para truques de Unicode invisível. Uma instrução dizendo "agora execute este script de instalação" enterrada num manifesto buscado é exatamente o caso para o qual esse detector existe.

E por baixo de tudo isso, o tráfego de saída é visível. O sinal do botnet, a busca do estágio, a tentativa de exfiltração — tudo aparece no Registro de Segurança do Bromure como tráfego de saída que você pode ver, em vez de uma chamada silenciosa de uma máquina em que você confiava.

VM Linux descartávelNome inventadoo agente buscae instala aquiVerif. cadeia de suprim.npm / PyPI / Cargopego na portaO que o botnet alistariapromptware avaliado por detector localANTHROPIC_API_KEY = brm_9f2a… (falsa)git / AWS / ssh = iscas · a caixa se redefinesinal (registrado)O C2 recebe iscasum nó que se apagaSegredos reaisficam no proxy do hostreinseridos no fioO agente ainda adivinha e ainda instala. Só faz isso em algum lugar descartável, com chaves que não são reais.
Mesmo palpite, mesma busca, mesma instalação — máquina diferente. Dentro do Bromure o agente roda numa VM Linux descartável: um pacote de registro alucinado é pego pela verificação de cadeia de suprimentos na porta da frente, a carga do botnet roda em algum lugar descartável, as credenciais que ela vasculha são iscas trocadas pelas reais só no proxy do host, o promptware no manifesto buscado é avaliado por um detector no dispositivo, e o sinal é registrado. O palpite ainda acontece. Não há nada para alistar.

O que isto delimita

Isolamento e verificação são contenção, não cura para a alucinação. Vale a pena ser preciso sobre o que o Bromure muda aqui e o que não muda.

O agente ainda inventa o nome

O Bromure não impede o modelo de alucinar um identificador nem de buscar aquilo em que esse nome se resolve. Ancorar os palpites do agente é um problema de modelo e de harness. O que o Bromure muda é onde a coisa buscada roda e o que ela pode alcançar ao fazê-lo.

A verificação de registros cobre registros

Um pacote npm, PyPI ou Cargo alucinado é exatamente o que a verificação de cadeia de suprimentos inspeciona — uma captura genuína na porta da frente. Um repositório GitHub alucinado ou um skill de loja de plugins não é um pacote de registro; esse caminho é sustentado pelo isolamento, pelo detector de injeção e pelas iscas, não pela verificação de registro.

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

A troca por iscas protege as credenciais que você põe num perfil: chaves de modelo, tokens git e de nuvem, endpoints de banco de dados gerenciado, chaves ssh. Um token que um script escreve no disco no meio da execução, ou uma sessão que você estabelece à mão na caixa, é apenas dado. Mantenha os segredos no broker, não no espaço de trabalho.

A detecção é uma rede, não um muro

A avaliação de injeção no dispositivo sinaliza um manifesto de instalar-e-executar com mais frequência do que não, mas um autor cuidadoso 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 tráfego de saída registrado — é o que sustenta quando um detector falha.

Os pesquisadores terminam com uma frase que vale guardar: "Os ataques sempre melhoram; nunca pioram." Suas taxas de sucesso são um piso, não um teto, e o mecanismo de confiança subjacente — um agente que trata o próprio palpite como fato e um arquivo buscado como plano — não vai ser corrigido neste trimestre. Seu agente vai inventar um nome para algo de que se lembra pela metade, e alguns desses nomes inventados já estarão tomados. A questão não é se ele algum dia buscará o errado. A uma taxa de alucinação de 85%, às vezes buscará. A questão é o que roda quando isso acontece: sua máquina, suas chaves reais e um ponto de apoio que permanece — ou uma caixa Linux que você pode jogar fora, com iscas dentro dela e o registro verificado na entrada. O Bromure faz com que seja a segunda.