Aikido

Le paquet NPM « tensorlake » a été compromis par le ver Shai Hulud

Écrit par
Oliver Smith

Le 8 octobre 2026, un acteur malveillant a publié une version corrompue de « tensorlake » sur npm. La version corrompue est 0.5.144 et contient une variante du ver Shai-Hulud, qui extrait des informations confidentielles des appareils infectés et tente de se répliquer via les chaînes d'approvisionnement connectées. Tensorlake est un environnement de test sans serveur destiné aux agents d'IA, et son paquet npm aurait été installé plus de 100 000 fois depuis sa création. 

Tensorlake distribue également un paquet via PyPI et Cargo, mais rien n'indique, à l'heure où nous écrivons ces lignes, que l'auteur de la menace ait réussi à le publier sur l'un ou l'autre de ces écosystèmes. Le logiciel malveillant présente de légères variations par rapport à la dernière vague de Shai-Hulud ; il s'agit donc probablement d'une nouvelle attaque plutôt que d'une réinfection en cours. 

Ce que fait le malware

Le logiciel malveillant est déclenché par un script de préinstallation, qui appelle fichier lib/setup.mjs. setup.mjs (25a0735d0db7dc40e5d45ce42d9c106067e6a66e184d967cfecfab17c3bcb5ef) est un script obscurci qui sert à implanter Bun sur un hôte infecté et à exécuter lib/Math_Symbol.js (b50a00900399ba99fb6ce1fc151519cb99d44320ef2a631f2237e1aea0ad6fec) avec le moteur d'exécution Bun.

Math_Symbol.js contient une charge utile Shai-Hulud obscurcie. Le logiciel malveillant définit une variable globale WORMTAG marqueur avant l'exécution du code obscurci, spécifique au paquet TensorLake infecté. Ce marqueur indique que le paquet correspond à une nouvelle intrusion et non à une réinfection issue d'une vague antérieure de Shai-Hulud. 

Le logiciel malveillant déchiffre des charges utiles assurant sa persistance et sa prolifération, ainsi qu’un mécanisme de « dead-man’s switch » qui efface les machines infectées si un jeton GitHub intégré est révoqué, à l’instar des vagues précédentes de Shai-Hulud. Toujours à l’instar des vagues précédentes de Shai-Hulud, le logiciel malveillant tente de lire et d’exfiltrer des variables d’environnement sensibles et des secrets locaux. Un index complet des données ciblées par le logiciel malveillant est disponible à la fin de cet article. Tout système ou environnement infecté par ce logiciel malveillant doit être considéré comme entièrement compromis, et la rotation des secrets ou des identifiants qu’il contenait doit être traitée comme une priorité absolue.

Le logiciel malveillant contient l'adresse C2 codée en dur iseekaigogo[.]com, mais intègre également un mécanisme de « dead drop » basé sur la blockchain permettant de mettre en place un canal de commande et de contrôle (C2) alternatif. Le logiciel malveillant appelle une fonction de lecture sur le contrat Ethereum contrôlé par l'acteur malveillant

0xb614155Fd88114d40549b259457Bcf921Df091B9 par eth.llamarpc.com, rpc.ankr.com et ethereum.publicnode.com pour récupérer un autre domaine C2/d'exfiltration. La dernière mise à jour du contrat, effectuée le 21 septembre à partir du portefeuille 0x779f83aE56309682beDb04816c19d358c4B21040, attribue à cette valeur la même adresse C2 codée en dur, iseekaigogo[.]com.

Ce logiciel malveillant se distingue des vagues précédentes de Shai-Hulud en ce qu’il tente d’extraire des données plus sensibles stockées dans les mémoires cache des navigateurs Web. Il tente notamment d’accéder à des données situées dans des chemins d’accès codés en dur, associés à 14 extensions de navigateur dédiées aux cryptomonnaies. Le logiciel malveillant tente d’exfiltrer les fichiers IndexedDB et LevelDB des extensions. Il récupère également depuis l’adresse C2 un binaire HackBrowserData distant adapté au système infecté et l’exécute pour tenter d’obtenir des identifiants supplémentaires à partir des mémoires cache des navigateurs. Ces changements reflètent potentiellement une stratégie de l’opérateur davantage axée sur la monétisation rapide des terminaux de développeurs infectés que sur la prolifération via la chaîne d’approvisionnement.

Retracer la source de l'infection

Le logiciel malveillant provenait du dépôt GitHub « tensorlake ». Le 7 octobre 2026, l'auteur de la menace a effectué des commits vérifiés sous l'identité d'un responsable de maintenance. Le logiciel malveillant a été introduit lors du commit 41b38f0 via un téléchargement direct de fichier, après quoi l'auteur de la menace a tenté de modifier la version et de déclencher la publication. Le dépôt a été compromis pendant environ 20 heures avant que l'auteur de la menace ne parvienne à déclencher la publication sur npm. 

Comment Aikido détecte cela

Si vous êtes un utilisateur Aikido, vérifiez votre flux central et filtrez les problèmes de logiciels malveillants. Cela apparaîtra comme un problème critique 100/100. Aikido effectue des rescans nocturnes, mais nous vous recommandons de déclencher un rescan manuel dès maintenant.

Si vous n'êtes pas encore un utilisateur d'Aikido, vous pouvez créer un compte et connecter vos dépôts. Notre couverture anti-malware est incluse dans le plan gratuit, aucune carte de crédit requise.

Pour une couverture plus large pour toute votre équipe, Device Protection d'Aikido vous offre une visibilité et un contrôle sur les packages logiciels installés sur les appareils de votre équipe. Il couvre les extensions de navigateur, les bibliothèques de code, les plugins d'IDE et les dépendances de build, le tout en un seul endroit. Arrêtez les malwares avant qu'ils ne soient installés.

Pour une protection future, envisagez Aikido Safe Chain (open source). Safe Chain s'intègre à votre workflow existant, en interceptant les commandes npm, npx, yarn, pnpm et pnpx et en vérifiant les packages par rapport à Aikido Intel avant l'installation.

Indicateurs de compromission

Paquets NPM :

  • tensorlake 0.5.144

Domaine C2 :

  • iseekaigogo[.]com

Fichiers :

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

Autre :

  • Transaction Ethereum effectuée par un acteur malveillant :
    • ‍0xb614155Fd88114d40549b259457Bcf921Df091B9
  • Acteur malveillant - Portefeuille Ethereum :
    • 0x779f83aE56309682beDb04816c19d358c4B21040

Variables et fichiers concernés

‍

Variables d'environnement :

APPVEYOR
AWS_ACCESS_KEY_ID
AWS_CONFIG_FILE
AWS_CONTAINER_CREDENTIALS_FULL_URI
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
AWS_PROFILE
AWS_REGION
AWS_ROLE_ARN
AWS_CLÉ_D'ACCÈS_SECRÈTE
AWS_WEB_IDENTITY_TOKEN_FILE
bamboo_agentId
BITBUCKET_BUILD_NUMBER
BITRISE_IO
BUDDY_WORKSPACE_ID
BUILD_BUILDURI
BUILDKITE
CF_BUILD_ID
CF_PAGES
CI
CI_NAME
CIRCLECI
CIRRUS_CI
CODEBUILD_BUILD_ID
DISTELLI_APPNAME
DRONE
GITHUB_ACTIONS
GITLAB_CI
JB_SPACE_NUMÉRO_D'EXÉCUTION
JENKINS_URL
KUBECONFIG
KUBERNETES_SERVICE_HOST
NETLIFY
NOW_GITHUB_DEPLOYMENT
SAILCI
SCREWDRIVER
SEMAPHORE
SHIPPABLE
TEAMCITY_VERSION
TRAVIS
ADRESSE_VAULT
JETON_API_VAULT
JETON_D'AUTHENTIFICATION_VAULT
VAULT_RÔLE_AWS
VAULT_TOKEN
VAULT_TOKEN_FILE
VAULT_TOKEN_PATH
VELA
VERCEL
WERCKER_MAIN_PIPELINE_STARTED
WS_SHARED_CREDENTIALS_FILE

Chemins d'accès aux fichiers d'informations d'identification :

~/.ansible
~/.azure
~/.cert/nm-openvpn
~/.config/atomic/Stockage local/leveldb
~/.config/discord/Stockage local/leveldb
~/.config/Element/Stockage local
~/.config/Exodus/exodus.wallet
~/.config/helm
~/.config/kwalletd
~/.config/Ledger Live
~/.config/remmina
~/.config/Signal
~/.config/telegram-desktop
~/.docker
~/.electrum-ltc/wallets
~/.electrum/wallets
/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/wallets
~/.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

Extensions de navigateur :

nkbihfbeogaeaoehlefnkodbefgpgknn  MetaMask
bfnaelmomeimhlpmgjnjophhpkkoljpa Phantom
hnfanknocfeofbddgcijnmhnfnkdnaad  Extension Coinbase Wallet
acmacodkjbdgmoleebolmdjonilkdbch  Rabby Wallet
egjidjbpglichdcondbcbdnbeeppgdph  Trust Wallet
ibnejdfjmmkpcnlpebklmnkoeoihofec  TronLink
fnjhmkhhmkbjkkabndcnnogagogbneec  Portefeuille Ronin
bhhhlbepdkbapadjdnnojkbgioiodbic  Portefeuille Solflare
dmkamcknogkgcdfhhbddcghachkejeap  Keplr
aholpfdialjgjfhomihkjbmgjidlcdno  Portefeuille Exodus Web3
mcohilncbfahbmgdjkbpemcciiolgcge  Portefeuille OKX
opfgelmcmbiajamepnmloijbpoleiama  Rainbow
ppbibelpcjmhbdihakflkdcoccbgbkpo  Portefeuille UniSat
lgmpcpglpngdoalbgeoldeajfclnhafa  Portefeuille SafePal (extension)

‍

Partager :

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

Analyser les malwares

Commencer gratuitement
4,7/5
Fatigué des faux positifs ?
Essayez Aikido, comme 100 000 autres.
Commencez maintenant
Obtenez une démonstration personnalisée

Approuvé par plus de 100 000 équipes

Réserver maintenant
Analysez votre application à la recherche d'IDORs et de chemins d'attaque réels

Approuvé par plus de 100 000 équipes

Démarrer l'analyse
Découvrez comment le pentest IA teste votre application

Approuvé par plus de 100 000 équipes

Démarrer les tests

Sécurisez vos systèmes dès aujourd'hui,
rapidement et gratuitement.

Sécurisez votre code, votre cloud et votre runtime au sein d'un système centralisé.
Connectez un dépôt pour découvrir ce que les agents de raisonnement trouvent dans votre base de code.

Aucune carte bancaire requise | Résultats de l'analyse en 32 secondes.
Utilisé par plus de 150 000 organisations