Aikido

Pacote NPM «tensorlake» comprometido pelo verme Shai Hulud

Escrito por
Oliver Smith

A 8 de outubro de 2026, um agente malicioso publicou uma versão comprometida do tensorlake no npm. A versão comprometida é 0.5.144 e contém uma variante do worm Shai-Hulud, que extrai dados de secrets a partir de dispositivos infetados e tenta auto-replicar-se através de cadeias de abastecimento interligadas. O Tensorlake é uma sandbox sem servidor para agentes de IA e o seu pacote npm tem um número total de instalações, ao longo do tempo, superior a 100 000. 

A Tensorlake também distribui um pacote através do PyPI e do Cargo, mas, à data da redação deste artigo, não há indícios de que o autor da ameaça tenha conseguido publicar em qualquer um desses ecossistemas. O malware apresenta ligeiras variações em relação à última onda do Shai-Hulud, pelo que é provável que se trate de um novo ataque e não de uma reinfecção contínua. 

O que o malware faz

O malware é ativado através de um script de pré-instalação, que invoca ficheiro lib/setup.mjs. setup.mjs (25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef) é um script ofuscado que serve para instalar o Bun num host infetado e para executar lib/Math_Symbol.js (b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec) com o ambiente de execução do Bun.

Math_Symbol.js contém uma carga útil ofuscada do Shai-Hulud. O malware define uma variável global WORMTAG marcador antes da execução do código ofuscado, específico do pacote TensorLake infetado. Este marcador indica que o pacote constitui um novo caso de infeção, em vez de uma reinfecção resultante de uma onda anterior do Shai-Hulud. 

O malware descodifica cargas úteis de persistência e proliferação, bem como um «dead-man’s switch» que apaga as máquinas infetadas caso um token do GitHub incorporado seja revogado, em consonância com as ondas anteriores do Shai-Hulud. Também em consonância com as ondas anteriores do Shai-Hulud, o malware tenta ler e extrair variáveis de ambiente sensíveis e ficheiros locais secrets. Está disponível, no final desta publicação, um índice completo dos dados visados pelo malware. Qualquer sistema ou ambiente infetado pelo malware deve ser tratado como totalmente comprometido e quaisquer « secrets » ou credenciais nele contidas devem ser substituídas com a máxima prioridade.

O malware contém o endereço C2 codificado de forma fixa iseekaigogo[.]com, mas também inclui um mecanismo de entrega secreta baseado em blockchain para estabelecer uma ligação C2 alternativa. O malware invoca uma função de leitura no contrato Ethereum controlado pelo autor da ameaça

0xb614155Fd88114d40549b259457Bcf921Df091B9 através de eth.llamarpc.com, rpc.ankr.com e ethereum.publicnode.com para recuperar um domínio C2/exfiltração alternativo. A atualização mais recente do contrato, efetuada a 21 de setembro a partir da carteira 0x779f83aE56309682beDb04816c19d358c4B21040, define este valor para o mesmo endereço C2 codificado de forma fixa, iseekaigogo[.]com.

O malware difere das ondas anteriores do Shai-Hulud ao tentar ler dados mais sensíveis armazenados nos navegadores da Web. O malware tenta ler dados a partir de caminhos de ficheiros pré-definidos relacionados com 14 extensões de navegador de criptomoedas. O malware tenta extrair ficheiros IndexedDB e LevelDB das extensões. O malware também obtém, a partir do endereço C2, um ficheiro binário remoto «HackBrowserData» adequado ao sistema infetado e executa-o para tentar obter credenciais adicionais dos armazenamentos do navegador. Estas alterações refletem, potencialmente, um operador mais focado na monetização rápida dos terminais de programadores infetados do que na proliferação através da cadeia de abastecimento.

Rastrear a infeção

O malware teve origem no repositório «tensorlake» do GitHub. A 7 de outubro de 2026, o autor da ameaça efetuou commits verificados sob a identidade de um mantenedor. O malware foi introduzido no commit 41b38f0 através do carregamento direto de ficheiros, após o que o autor da ameaça tentou aumentar a versão e desencadear a publicação. O repositório esteve comprometido durante aproximadamente 20 horas antes de o autor da ameaça ter conseguido desencadear a publicação no npm. 

Como a Aikido detecta isso

Se você é um usuário Aikido, verifique seu feed central e filtre por problemas de malware. Isso aparecerá como um problema crítico 100/100. O Aikido reanalisa todas as noites, mas recomendamos acionar uma reanálise manual agora.

Se você ainda não é um usuário Aikido, pode criar uma conta e conectar seus repositórios. Nossa cobertura de malware está incluída no plano gratuito, não é necessário cartão de crédito.

Para uma cobertura mais ampla em toda a sua equipe, o Device Protection do Aikido oferece visibilidade e controle sobre os pacotes de software instalados nos dispositivos da sua equipe. Ele abrange extensões de navegador, bibliotecas de código, plugins de IDE e dependências de build, tudo em um só lugar. Pare o malware antes que ele seja instalado.

Para proteção futura, considere o Aikido Safe Chain (código aberto). O Safe Chain se integra ao seu fluxo de trabalho existente, interceptando comandos npm, npx, yarn, pnpm e pnpx e verificando pacotes contra o Aikido Intel antes da instalação.

Indicadores de comprometimento

Pacotes NPM:

  • tensorlake 0.5.144

Domínio C2:

  • iseekaigogo[.]com

Ficheiros:

  • lib/setup.mjs
    • 25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef
  • lib/Math_Symbol.js
    • b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec

Outros:

  • Transação na rede Ethereum realizada por um agente malicioso:
    • ‍0xb614155Fd88114d40549b259457Bcf921Df091B9
  • Carteira Ethereum do agente malicioso:
    • 0x779f83aE56309682beDb04816c19d358c4B21040

Variáveis e ficheiros visados

‍

Variáveis de ambiente:

APPVEYOR
AWS_ACCESS_KEY_ID
AWS_CONFIG_FILE
AWS_CREDENCIAIS_DO_CONTENTOR_URI_COMPLETA
AWS_CREDENCIAIS_DO_CONTENTOR_URI_RELATIVO
AWS_PROFILE
AWS_REGION
AWS_ROLE_ARN
AWS_SECRET_ACCESS_KEY
AWS_WEB_IDENTITY_TOKEN_FILE
bamboo_agentId
NÚMERO_DE_CONSTRUÇÃO_DO_BITBUCKET
BITRISE_IO
BUDDY_WORKSPACE_ID
BUILD_BUILDURI
BUILDKITE
CF_ID_DA_CONSTRUÇÃO
CF_PAGES
CI
CI_NAME
CIRCLECI
CIRRUS_CI
CODEBUILD_BUILD_ID
DISTELLI_APPNAME
DRONE
GITHUB_ACTIONS
GITLAB_CI
JB_SPACE_NÚMERO_DE_EXECUÇÃO
JENKINS_URL
KUBECONFIG
KUBERNETES_SERVICE_HOST
NETLIFY
NOW_GITHUB_IMPLEMENTAÇÃO
SAILCI
SCREWDRIVER
SEMAPHORE
SHIPPABLE
TEAMCITY_VERSION
TRAVIS
VAULT_ADDR
TOKEN_API_VAULT
TOKEN_DE_AUTORIZAÇÃO_DO_VAULT
VAULT_AWS_ROLE
VAULT_TOKEN
VAULT_TOKEN_FILE
VAULT_TOKEN_PATH
VELA
VERCEL
WERCKER_MAIN_PIPELINE_INICIADO
WS_SHARED_CREDENTIALS_FILE

Caminhos dos ficheiros de credenciais:

~/.ansible
~/.azure
~/.cert/nm-openvpn
~/.config/atomic/Armazenamento Local/leveldb
~/.config/discord/Armazenamento local/leveldb
~/.config/Element/Armazenamento local
~/.config/Exodus/exodus.wallet
~/.config/helm
~/.config/kwalletd
~/.config/Ledger Live
~/.config/remmina
~/.config/Signal
~/.config/telegram-desktop
~/.docker
~/.electrum-ltc/carteiras
~/.electrum/carteiras
/etc/openvpn
/etc/ssh
~/.ethereum/keystore
~/.kde4/share/apps/kwallet
~/.kde/share/apps/kwallet
~/.local/share/keyrings
~/.local/share/TelegramDesktop/tdata
~/.monero
~/.pki/nssdb
~/.remmina
~/.ssh
/var/lib/docker/containers
~/.foundry/keystores
~/.brownie/accounts
~/.config/github-copilot
~/.gnupg/private-keys-v1.d
~/.config/gcloud/legacy_credentials
~/.volta/tools/image/node
~/.kube/cache/discovery
~/.kube/http-cache
~/.near-credentials
~/.keplr
~/.config/keplr
~/.bitcoin/carteiras
~/.nethermind/keystore
~/.local/share/io.parity.ethereum/keys
~/.config/exodus/exodus.wallet
~/.local/share/gopass/stores
/etc/ssl/private
/etc/letsencrypt/live
~/.mozilla/firefox
~/.config/google-chrome
~/.config/chromium
~/.config/BraveSoftware/Brave-Browser
~/.config/microsoft-edge
~/.config/opera
~/.config/vivaldi
/etc/ssl/cert.pem
~/.aws/credentials
~/.aws/config
~/.kube/config
~/.vault-token
/home/runner/.vault-token
/vault/token
/var/run/secrets/vault-token
/var/run/secrets/vault/token
/run/secrets/vault_token
/run/secrets/VAULT_TOKEN
~/.vault/token
/etc/vault/token

Extensões do navegador:

nkbihfbeogaeaoehlefnkodbefgpgknn  MetaMask
bfnaelmomeimhlpmgjnjophhpkkoljpa Phantom
hnfanknocfeofbddgcijnmhnfnkdnaad  Extensão da Coinbase Wallet
acmacodkjbdgmoleebolmdjonilkdbch  Carteira Rabby
egjidjbpglichdcondbcbdnbeeppgdph  Trust Wallet
ibnejdfjmmkpcnlpebklmnkoeoihofec  TronLink
fnjhmkhhmkbjkkabndcnnogagogbneec  Carteira Ronin
bhhhlbepdkbapadjdnnojkbgioiodbic  Carteira Solflare
dmkamcknogkgcdfhhbddcghachkejeap  Keplr
aholpfdialjgjfhomihkjbmgjidlcdno  Carteira Exodus Web3
mcohilncbfahbmgdjkbpemcciiolgcge  Carteira OKX
opfgelmcmbiajamepnmloijbpoleiama  Rainbow
ppbibelpcjmhbdihakflkdcoccbgbkpo  Carteira UniSat
lgmpcpglpngdoalbgeoldeajfclnhafa  Carteira SafePal Extension

‍

Compartilhar:

https://www.aikido.dev/blog/tensorlake-npm-package-compromised

Verificar por malware

Comece Gratuitamente
4.7/5
Cansado de falsos positivos?

Experimente Aikido como 100 mil outros.
Começar Agora
Obtenha um tour personalizado

Confiado por mais de 100 mil equipes

Agende Agora
Escaneie seu aplicativo em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipes

Iniciar Escaneamento
Veja como o pentest de IA testa seu aplicativo

Confiado por mais de 100 mil equipes

Iniciar Testes

Torne-se seguro hoje,
de forma rápida e gratuita.

Proteja o seu código, a cloud e o runtime num sistema central.
Conecte um repositório para descobrir o que os agentes de raciocínio encontram na sua base de código.

Não é necessário cartão de crédito | Resultados do teste em 32 segundos.
Confiado por mais de 150 mil orgs