Sécurité et confidentialité

Le paquet npm Tensorlake compromis lors d'une attaque de la chaîne d'approvisionnement Shai-Hulud

La version malveillante 0.5.144 du SDK Tensorlake a été publiée sur npm, diffusant un ver voleur de credentials qui cible les infrastructures IA et les secrets cloud.

Illustration d'une boîte de paquet npm compromise révélant du code malveillant à l'intérieur
Illustration créée pour cet article

Traduit automatiquement depuis l’original en anglais.

Le paquet npm Tensorlake, un SDK TypeScript pour créer des applications sur les services cloud de Tensorlake, a été compromis lors d'une attaque sophistiquée de la chaîne d'approvisionnement. Le 8 octobre 2026, des chercheurs en sécurité ont identifié que la version 0.5.144 contenait un malware obfusqué conçu pour voler des credentials et se propager dans les environnements de développement.

Cet incident s'inscrit dans la campagne plus large ChainDrop, qui utilise la variante du ver Shai-Hulud pour cibler les chaînes d'approvisionnement logicielles. Le paquet malveillant a depuis été retiré du registre npm, mais les développeurs qui l'ont installé pendant la période d'exposition restent exposés à un risque d'accès non autorisé persistant et d'exfiltration de données.

Ce qui s'est passé

Les attaquants ont obtenu l'accès au dépôt Tensorlake et ont poussé du code malveillant sur la branche principale sous le nom d'un mainteneur. Le premier commit frauduleux a eu lieu le 7 octobre 2026, à 01:20 UTC. Le jour suivant, le workflow de publication automatisé du dépôt a publié la version 0.5.144 sur le registre npm public. Cette séquence suggère que les attaquants ont compromis le pipeline de maintenance plutôt que simplement le canal de distribution du paquet.

Le paquet compromis inclut un hook preinstall qui exécute un fichier de chargement JavaScript nommé "package/lib/setup.mjs". Ce chargeur lance la charge utile principale, "package/lib/Math_Symbol.js", en utilisant le runtime Bun. La charge utile est un ver obfusqué qui collecte des credentials, établit une persistance sur le système hôte et exécute du code fourni à distance. La société de sécurité Socket a noté que les capacités du malware vont bien au-delà du simple keylogging, car il peut maintenir l'accès même après la suppression de la dépendance.

Le ver est conçu pour être auto-propagateur. Il énumère les autres paquets associés à l'identité de publication de la victime, crée de faux enregistrements de provenance Sigstore et republie des versions compromises de ces paquets. Ce mécanisme permet à l'infection de se propager latéralement dans l'écosystème logiciel du développeur, impactant potentiellement les utilisateurs en aval qui font confiance aux autres projets du développeur.

Détails clés

  • Version malveillante : Seule la version 0.5.144 du paquet tensorlake est confirmée comme étant compromise.
  • Exécution de la charge utile : Le malware utilise un hook preinstall pour exécuter un chargeur obfusqué via le runtime Bun.
  • Données ciblées : Le voleur collecte les tokens npm, les tokens GitHub, les credentials AWS, les secrets HashiCorp Vault, les credentials Kubernetes, les clés SSH, les fichiers .env et les portefeuilles de cryptomonnaies.
  • Intégration des outils IA : Il cible spécifiquement les fichiers de configuration des assistants de codage IA tels qu'Anthropic Claude, Cursor, Kiro, Windsurf et Zed.
  • Mécanisme de persistance : Le malware écrit des paramètres dans .claude/settings.json et .vscode/tasks.json, garantissant son exécution lorsque les développeurs ouvrent des projets dans ces éditeurs.
  • Commande et contrôle (C2) : Le ver utilise un contrat Ethereum pour résoudre son endpoint C2 (iseekaigogo[.]com) et utilise des dépôts GitHub comme solution de repli pour stocker temporairement les données volées.

Contexte

Les attaques de la chaîne d'approvisionnement surviennent lorsque des attaquants compromettent un composant tiers de confiance, tel qu'une bibliothèque ou un framework, pour distribuer des malwares à ses utilisateurs. Dans ce cas, le vecteur d'attaque est le registre npm, le gestionnaire de paquets par défaut pour les écosystèmes Node.js et TypeScript. Comme les développeurs font souvent confiance aux paquets provenant de mainteneurs connus, ils peuvent ne pas examiner attentivement les mises à jour, permettant ainsi au code malveillant d'entrer facilement dans les environnements de production.

Le ver Shai-Hulud se distingue par son focus sur l'infrastructure des agents IA. À mesure que davantage d'entreprises intègrent des assistants de codage IA dans leurs workflows, ces outils deviennent des cibles de haute valeur. Ils disposent souvent d'un accès étendu aux bases de code, aux variables d'environnement et aux API internes. En ciblant les fichiers de configuration d'outils comme Claude Code et VS Code, les attaquants s'assurent que leur malware s'active chaque fois qu'un développeur interagit avec son projet, créant un point d'ancrage persistant difficile à éradiquer par la suppression standard du paquet.

Pourquoi cela compte

Pour les équipes qui gèrent leur propre logiciel, cet incident met en lumière la fragilité de la confiance envers les dépendances open source. Même si vous vérifiez initialement un paquet, un compte de mainteneur ou un pipeline de build compromis peut injecter un malware à tout moment. Le fait que le ver republie d'autres paquets sous l'identité de la victime signifie qu'une seule compromission peut nuire à votre réputation et infecter l'ensemble de votre portefeuille d'outils. Ce mouvement latéral rend le confinement significativement plus difficile que la simple suppression d'une mauvaise dépendance.

Le ciblage spécifique des assistants de codage IA pose un nouveau risque pour les workflows de développement. Ces outils fonctionnent souvent avec des privilèges élevés pour lire et écrire du code, accéder aux fichiers locaux et interagir avec les commandes du terminal. Si un attaquant prend le contrôle de ces agents, il peut exfiltrer une logique sensible, insérer des backdoors dans le code source ou voler des secrets stockés dans des fichiers d'environnement locaux. Pour les équipes en auto-hébergement, cela signifie que les machines de développement locales sont désormais des périmètres de sécurité critiques nécessitant le même niveau de protection que les serveurs de production.

De plus, la tactique du « token otage » démontre une stratégie d'escalade agressive. Si une victime révoque un token GitHub volé, le malware détecte ce changement et exécute une routine PowerShell destructive. Cette mesure anti-forensique décourage les étapes simples de remédiation comme la rotation des tokens et force les organisations à effectuer des nettoyages complets du système. Cela souligne la nécessité de plans de réponse aux incidents complets qui tiennent compte des menaces persistantes intégrées dans les outils de développement.

Ce que vous pouvez faire

  • Vérifier les versions installées : Vérifiez immédiatement si la version 0.5.144 du paquet tensorlake est présente dans les dépendances de votre projet ou dans vos fichiers de lock.
  • Faire tourner tous les credentials : Si vous avez installé la version malveillante, faites tourner tous les tokens npm, les tokens GitHub, les clés AWS, les clés SSH et tout autre secret accessible depuis votre environnement de développement.
  • Inspecter les configurations IA : Vérifiez vos dépôts pour des changements inattendus dans les fichiers .claude/settings.json et .vscode/tasks.json, et supprimez toute entrée suspecte.
  • Auditer les paquets publiés : Examinez vos autres paquets npm publiés pour des versions non autorisées ou des modifications des enregistrements de provenance pouvant indiquer une propagation latérale.
  • Surveiller les pipelines CI/CD : Recherchez des workflows GitHub Actions inconnus ou des commits faisant référence à de faux processus Copilot/Dependabot dans vos dépôts.
  • Scanner la persistance : Utilisez des outils de détection sur les endpoints pour rechercher le binaire HackBrowserData et surveillez toute activité PowerShell inhabituelle impliquant Invoke-Expression.

« Tout secret accessible au processus en cours d'exécution peut être exposé, et la persistance peut conserver l'accès de l'attaquant même après la suppression de la dépendance affectée. » — Socket

Autres actualités

Toutes les actualités