Neste post
Resumindo: o Contagious Interview é um ataque de recrutamento falso feito por hackers norte-coreanos. Eles se passam por clientes ou recrutadores em plataformas como Upwork e LinkedIn e, no fim, fazem você mesmo rodar um "projeto de teste" ou instalar um "app de reunião". Uma regra basta para reconhecer: se um processo seletivo pede para você rodar código desconhecido no seu computador, pare. Se já rodou, desconecte da internet, procure processos e pastas desconhecidos, troque as senhas e encerre a sessão em todos os dispositivos nos sites que importam.
A primeira vez: junho de 2026
Um cliente que se dizia ucraniano me procurou no Upwork. Ele tinha um projeto e queria minha ajuda, e me mandou um projeto de teste em Node.js chamado "Online_Store".
O código malicioso estava escondido em uma das dependências do npm. Já não lembro exatamente qual pacote era; acho que era algo ligado ao Tailwind. Assim que rodei o projeto, ele criou em silêncio uma pasta ~/.node_modules no meu computador, com axios e socket.io-client dentro, prontos para mandar meus dados para fora.
Quando percebi, ele já estava rodando em segundo plano havia dias. Só descobri por sorte: um colega meu no Reino Unido passou exatamente pela mesma coisa, e quando ele me contou, me dei conta de que eu provavelmente também tinha sido atingido.
A segunda vez: outubro de 2026
Desta vez, a pessoa dizia ser lituana, de uma empresa de investimentos chamada Veyron Capital (veyron[.]capital), que tinha publicado várias vagas de Web3 no Upwork.
Primeiro ele me mandou mensagem e depois marcou uma videochamada pelo Upwork. Ficou com a câmera desligada e falou comigo em chinês o tempo todo. Depois pediu para eu adicioná-lo no Telegram e me colocou em um grupo, onde me pediram para fazer uma demo de Web3 e apresentar para a equipe em uma reunião.
Na hora da apresentação, disseram que um colega estava viajando e não podia usar a ferramenta de sempre, então precisávamos trocar para um app de reuniões chamado "Zeff" (zeff[.]app). Outra pessoa do grupo me "ajudou" a instalar e deu duas opções: rodar um comando curl | bash no terminal ou baixar um DMG.
Não instalei. Depois de ter caído uma vez, assim que vi "rode este comando desconhecido no terminal para a gente fazer uma reunião", percebi que era o mesmo golpe.
Olhando para trás
As duas vezes foram ataques "Contagious Interview" da Coreia do Norte: recrutamento falso e entrevistas falsas. Eles ganham sua confiança com o que parece uma vaga comum e depois fazem você rodar o código deles com as próprias mãos.
O que mais me incomodou foi que nem o XProtect, que já vem no macOS, nem os antivírus tradicionais deram um pio, nas duas vezes.
O Claude Code como meu investigador forense
Depois da primeira infecção, quem realmente achou o problema foi o Claude Code. Usei o Fable 5 (Max), dei as permissões necessárias e pedi para ele vasculhar o disco inteiro e os processos em segundo plano, como um investigador. Ele logo descobriu que o malware ainda estava rodando e depois me guiou, passo a passo, para limpar tudo.
O que eu perdi
Por sorte, nada. O que esse tipo de malware mais quer são carteiras de criptomoedas, e eu não tenho nenhuma naquele computador. As contas que importam para mim têm verificação em duas etapas ativada, então mesmo com as minhas senhas ninguém conseguiria entrar.
Mas fica um alerta: esse malware costuma roubar também as sessões de login (cookies) salvas no navegador. Com elas, o atacante pode pular a verificação em duas etapas e entrar direto nas suas contas. Então, se você for atingido, troque as senhas e também encerre a sessão em todos os dispositivos conectados nos sites que importam.
Por isso criei uma ferramenta: o Tsuba
Depois desses dois episódios, ficou claro onde estava a brecha. Esses ataques vêm com uma embalagem nova a cada vez e usam as ferramentas mais comuns que existem, como node, curl e bash, então o antivírus tradicional não tem motivo para desconfiar.
Por isso criei um pequeno app de barra de menus para macOS chamado Tsuba (鍔, a guarda da mão de uma espada japonesa). A ideia é simples: antes de um código desconhecido rodar pela primeira vez, ele dá uma olhada por você. Ele descobre o que o código vai fazer, de onde veio e se parece com um ataque conhecido, e então decide se libera, avisa ou bloqueia.
Veja como ele se aplica aos meus dois casos:
- Um projeto de entrevista falso, como o primeiro: antes de você rodar
npm installounpm start, ele verifica se as dependências estão em listas públicas de pacotes maliciosos e procura no código do projeto por código escondido, endereços remotos fixos ou trechos que leem carteiras e cofres de senhas. Se ainda estiver em dúvida, você pode rodar o projeto em uma sandbox e ver o que ele faz de verdade. - Um app de reunião falso, como o segundo: quando aparece um
curl | bash, ele baixa o script remoto sem executar e verifica o que ele faria. DMGs baixados também têm assinatura, notarização e origem verificadas.
O Tsuba é gratuito e o código-fonte está no GitHub. O download para Macs com Apple silicon e Intel, e tudo mais sobre ele, está na página do Tsuba. Se você pega trabalhos no Upwork ou em plataformas parecidas, ou costuma rodar código que outras pessoas mandam, vale a pena experimentar.