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.mjs25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef
lib/Math_Symbol.jsb50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec
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_FILECaminhos 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/tokenExtensõ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