O pacote baixou o Bun, rodou 856 KB ofuscados e deixou um vigia esperando você revogar o token

A versão 0.5.144 do SDK tensorlake foi publicada no npm em 8 de outubro, às 01h12 UTC, pelo próprio fluxo de release do repositório e com atestação de procedência válida. Onze minutos depois a Socket sinalizou. O que o pacote instala é uma variante do verme Shai-Hulud com um detalhe novo, e esse detalhe inverte o roteiro de resposta: há um monitor que apaga o diretório do usuário se o token do GitHub for revogado antes de o monitor ser removido.

O resumo operacional, na ordem exata em que precisa ser executado:

  1. Identificar. Rodar npm ls tensorlake e procurar 0.5.144 em lockfile, log de build e artefato publicado.
  2. Isolar. Toda máquina onde o script de instalação rodou deve ser tratada como comprometida. Remover a dependência não remove o implante.
  3. Remover a persistência antes de revogar qualquer credencial. O serviço gh-token-monitor sai primeiro.
  4. Só então rotacionar: npm, nuvem, SSH, Kubernetes, Vault, segredo em .env, chave de ferramenta de IA e senha salva no navegador.

A inversão dessa ordem é o ponto da matéria. Em incidente de credencial a reação treinada é revogar o token primeiro. Aqui, revogar primeiro é o que aciona a limpeza do diretório do usuário.

A linha do tempo

O primeiro commit malicioso entrou no branch main do repositório tensorlakeai/tensorlake em 7 de outubro, às 01h20 UTC, assinado com a identidade de um mantenedor. Outros sete vieram nas horas seguintes, ajustando a carga e acrescentando a linha de preinstall ao package.json. Nenhum passou por pull request. Quase 24 horas depois, em 8 de outubro às 01h12 UTC, o fluxo de release do próprio repositório publicou a 0.5.144 no npm. A Socket marcou o pacote às 01h23, onze minutos depois.

A Aikido fala em mais de 100 mil instalações acumuladas. A Socket mede cerca de 12 mil downloads semanais e faz a ressalva correta: isso é uso do pacote, não número de máquinas infectadas.

Vale parar na atestação. O npm exibe procedência válida porque o artefato foi construído a partir daquele repositório, por aquele fluxo, com aquela identidade. A cadeia de assinatura estava impecável. O que estava errado era o código. Procedência responde onde o pacote nasceu e nunca o que ele faz, e quem tratou Sigstore como selo de segurança acabou de receber a fatura dessa confusão.

A cadeia de execução

  1. O package.json traz "preinstall": "node lib/setup.mjs". Não é preciso importar nada nem subir agente. Basta um npm install em ambiente onde script de ciclo de vida é permitido.
  2. O setup.mjs é um carregador ofuscado. Ele detecta CI e se desliga, segundo a StepSecurity. O alvo é a estação do desenvolvedor, não o runner.
  3. Ele baixa o runtime Bun e usa o Bun para executar lib/Math_Symbol.js, 856 KB ofuscados.
  4. O payload ainda busca um binário HackBrowserData compatível com a plataforma da máquina, para raspar credencial guardada no navegador.

A escolha do Bun é esperta e desagradável em partes iguais. Traz um interpretador novo para a máquina, fora da lista de processos que a maioria das regras de detecção espera ver sendo chamada por um script de npm.

O que ele leva

CategoriaAlvos
npmarquivos .npmrc, API de token e troca de token OIDC
GitHubtoken, com verificação de permissão de repositório e de workflow
AWSIMDS, ECS, Secrets Manager e SSM Parameter Store
HashiCorp Vaultinstância local em 127.0.0.1:8200, inclusive caminhos de autenticação por Kubernetes e AWS
Kubernetestoken de service account e arquivo kubeconfig
Chaves e segredosSSH, GPG, TLS, arquivos .env, configuração de Docker e Helm, cofre de gerenciador de senha
Criptomoedacarteiras de Ethereum, Monero, Bitcoin e Near, e 14 extensões de navegador, entre elas MetaMask, Phantom e Ronin
Ferramentas de IAarquivos de configuração e de MCP em .claude, .cursor, .kiro, Windsurf e Zed

A última linha é a novidade de 2026. O que até outro dia era pasta de dotfile virou cofre: chave de API de modelo, token de servidor MCP, configuração de agente com permissão de escrita no repositório. Quem adotou assistente de código sem inventariar o que ele guarda em disco ganhou um item novo na lista de ativos críticos, e provavelmente ainda não o colocou lá.

Como ele se espalha

Com o token do npm, o verme enumera os pacotes ligados à identidade de publicação da vítima, se acrescenta a eles, sobe a versão, constrói procedência Sigstore e republica. Com o token do GitHub, escreve .claude/settings.json e .vscode/tasks.json nos repositórios alcançáveis, com autor falso claude@users.noreply.github.com e mensagem de commit "chore: update dependencies". Esses arquivos executam a carga de novo quando alguém abre o projeto no Claude Code ou no VS Code.

O endereço de comando e controle não está no binário. O payload consulta um contrato na rede Ethereum, por cerca de 30 endpoints RPC públicos, e tem o GitHub como alternativa, onde o dado roubado fica cifrado em repositório público com a descrição "Shai-Hulud: Here We Go Again". A Aikido registra que o contrato foi atualizado pela última vez em 21 de setembro de 2026, apontando para o domínio iseekaigogo[.]com.

O vigia

É aqui que o incidente muda de categoria. Quando o payload obtém um token do GitHub, instala o gh-token-monitor e passa a consultar api.github.com/user a cada 60 segundos, por até 24 horas. Se o GitHub recusar o token, o monitor executa um comando entregue pelo atacante via Invoke-Expression. Na análise da StepSecurity, esse comando é um rm -rf no diretório do usuário, ou a remoção do perfil no Windows. O arquivo carrega a cadeia literal IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner, já vista em ondas anteriores do Shai-Hulud.

Onde ele mora:

  • Linux: serviço de usuário systemd gh-token-monitor.service, script em ~/.local/bin/gh-token-monitor.sh e configuração em ~/.config/gh-token-monitor/.
  • macOS: LaunchAgent com.user.gh-token-monitor.plist em ~/Library/LaunchAgents/.
  • Windows: tarefa de logon no Agendador de Tarefas executando monitor.ps1.

Para remover: systemctl --user disable --now gh-token-monitor.service e apagar ~/.config/gh-token-monitor/ no Linux, descarregar o plist no macOS, excluir a tarefa de logon no Windows. Faça backup do que importa antes, porque o risco está do lado da revogação e não do lado da remoção.

Indicadores

  • Pacote tensorlake@0.5.144.
  • lib/setup.mjs, SHA-256 25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef.
  • lib/Math_Symbol.js, SHA-256 b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec.
  • Domínio iseekaigogo[.]com.
  • Repositório público com "Shai-Hulud" na descrição dentro da conta do GitHub.
  • Commit de claude@users.noreply.github.com e arquivos .claude ou .vscode que ninguém criou.

A correção que vale depois desta semana

Fixar a 0.5.143, apagar node_modules e limpar o cache do npm resolve hoje. O que resolve o próximo caso é ignore-scripts=true no .npmrc, com exceção declarada e revisada para o punhado de pacotes que de fato precisa de hook de instalação. Se o pacote só rodou em CI, rotacione mesmo assim os segredos que aquele job alcançava.

Vale ainda olhar a proteção do branch nos repositórios que publicam pacote. Oito commits diretos no main, sem uma única revisão, em um projeto com mais de mil estrelas: foi isso que abriu a porta. A publicação automatizada só fez o resto do caminho com a assinatura certa.

Outras correções e falhas do dia

  • Cisco

    Nexus com execução remota como root

    A versão de endurecimento de outubro do NX-OS trouxe seis CVEs, com a NX-API em CVSS 9.8 (CVE-2026-76471) e execução remota não autenticada como root no componente NGOAM (CVE-2026-76485). Não há mitigação por configuração.

  • Citrix

    NetScaler em implantação SAML

    A Citrix corrigiu um estouro de memória no NetScaler que pode levar a execução remota de código ou negação de serviço em ambientes configurados com SAML.

  • Cadeia de suprimentos

    FakeGit volta com 17.610 repositórios

    A campanha FakeGit reapareceu com 17.610 repositórios maliciosos publicados no GitHub, desenhados para aparecer na busca de quem procura ferramenta legítima.

  • Navegador

    Dezesseis extensões do Firefox atrás da frase de recuperação

    Um conjunto de 16 complementos se passava por Rabby e OKX Wallet para capturar frase de recuperação e chave privada de carteira de criptomoeda.

  • Dispositivo

    Celular Android barato com proxy residencial de fábrica

    Aparelhos Android de baixo custo foram encontrados saindo de fábrica com malware que transforma o telefone em nó de proxy residencial, revendido depois como endereço IP legítimo.

Fontes e aprofundamento

  1. Socket · Tensorlake npm SDK compromised, cronologia em UTC, cadeia de preinstall, alvos de credencial e os hashes dos dois arquivos.
  2. StepSecurity · Tensorlake npm package compromised with a hostage-token worm, os oito commits diretos no main, a persistência por sistema operacional e a ordem de resposta.
  3. Aikido Security · tensorlake NPM package compromised with Shai-Hulud worm, mais de 100 mil instalações acumuladas e o contrato de comando e controle na Ethereum.
  4. npm · Pacote tensorlake no registro público, para conferir a versão em uso e fixar a 0.5.143.
Quantos ativos da sua empresa estão nessa situação? O diagnóstico mede exposição por domínio e mostra o que tratar primeiro. Solicitar diagnóstico.