Contexte de la compromission
Le SDK TypeScript tensorlake, publié sur le registre npm, a vu la version 0.5.144 retirée après la découverte d’une compromission. Le premier commit malveillant a été introduit le 7 octobre 2026 à 01:20 UTC, suivi d’une publication sur npm le 8 octobre 2026. Cette intrusion s’inscrit dans la campagne ChainDrop, identifiée pour la première fois en août 2026, qui a déjà infecté plusieurs paquets npm tels que Keyv et Cacheable avec une variante du ver Shai‑Hulud.
Mécanisme du ver et vecteur d’infection
Le paquet compromis intègre un preinstall hook qui exécute le script package/lib/setup.mjs. Ce script charge un chargeur obfusqué, lequel lance le module principal package/lib/Math_Symbol.js sous le runtime Bun. Le chargeur initialise un composant de vol de crédentiels capable de parcourir les fichiers locaux, les environnements CI, les clusters Kubernetes et les coffres HashiCorp Vault. Il récupère notamment des jetons npm, des jetons GitHub, des clés d’accès AWS, des identifiants SSH, des fichiers .env, des portefeuilles cryptographiques et des configurations d’agents IA (Claude, Cursor, Kiro, Windsurf, Zed).
Propagation et command‑and‑control
Pour se propager, le ver répertorie les paquets associés à l’identité de publication du compte compromis, génère une preuve d’origine Sigstore et republie de nouvelles versions infectées. Des chaînes de caractères faisant référence à un faux workflow Copilot/Dependabot suggèrent l’injection de workflows GitHub Actions. Le C2 est résolu via un contrat Ethereum pointant vers le domaine iseekaigogo.com, avec GitHub comme mécanisme de secours pour déposer les données volées chiffrées dans un dépôt public. Un composant « hostage token » surveille la validité du jeton GitHub volé via PowerShell ; si le jeton est révoqué, il déclenche un code PowerShell destructeur via Invoke‑Expression.
Impacts et mesures d’atténuation
Le ver persiste en écrivant des fichiers .claude/settings.json et .vscode/tasks.json dans les dépôts accessibles, assurant une réexécution dès l’ouverture du projet dans Claude Code ou VS Code. La compromission expose l’ensemble des secrets accessibles au processus, au-delà d’une simple clé API. Les experts recommandent de désinstaller immédiatement la version 0.5.144, de purger les caches npm, de révoquer et de régénérer tous les jetons et clés exposés, et de surveiller les dépôts GitHub pour d’éventuels workflows malveillants.