Un ver de npm auto-réplicant appelé SANDWORM_MODE touche plus de 19 packages, récoltant des clés privées, des mnémoniques BIP39, des fichiers de portefeuille et des clés API LLM depuis des environnements de développement.
Une attaque en chaîne d’approvisionnement npm en direct balaie actuellement les environnements des développeurs. L’équipe de recherche en menace de Socket a découvert ce qu’elle suit sous le nom de SANDWORM_MODE, un ver auto-réplicant se propageant à travers au moins 19 packages npm malveillants liés à deux alias d’éditeur. Comme l’a signalé SocketSecurity sur X, il s’agit d’une attaque active en chaîne d’approvisionnement volant des secrets de développement et d’intégration continue, injectant des workflows GitHub, empoisonnant des chaînes d’outils IA et récoltant des clés API LLM.
La campagne s’inspire directement de la famille de vers Shai-Hulud. Les clés privées passent en premier. Pas de porte temporelle, pas de délai. Les artefacts cryptographiques découverts lors de l’importation sont exfiltrés immédiatement via un point de drain dédié avant que toute autre étape de charge utile ne se déclenche.
Vous devriez savoir : Les menaces pour la sécurité des portefeuilles s’intensifient À lire absolument : Trust Wallet Security Hack : Comment protéger vos actifs
Le ver fonctionne selon un design en deux étapes. La première étape se déclenche instantanément lors de l’importation, collectant des jetons npm, des jetons GitHub, des secrets d’environnement et des clés cryptographiques uniquement par lecture de fichiers. Pas d’exécution de shell, pas de bruit. Les mnémoniques BIP39, les clés privées Ethereum, les tableaux d’octets Solana, les clés WIF Bitcoin et les chaînes xprv sont tous balayés lors de la première passe.
Les clés cryptographiques quittent immédiatement la machine via une requête HTTPS POST vers un Worker Cloudflare à l’adresse pkg-metrics[.]official334[.]workers[.]dev/drain. Cela se produit avant toute vérification de porte temporelle. Avant même que la deuxième étape ne se charge.
La deuxième étape se situe derrière un délai de 48 heures, dérivé d’un hash MD5 du nom d’hôte et du nom d’utilisateur. Elle va plus loin : gestionnaires de mots de passe via Bitwarden, 1Password et LastPass CLI, stockages SQLite locaux incluant Apple Notes et Messages macOS, ainsi qu’une analyse complète du système de fichiers à la recherche de fichiers de portefeuille. En environnement CI, cette étape disparaît complètement. La charge utile complète se déclenche sur GITHUB_ACTIONS, GITLAB_CI, CIRCLECI, JENKINS_URL et BUILDKITE sans attendre.
Selon SocketSecurity sur X, le ver injecte également des workflows GitHub et empoisonne des chaînes d’outils IA, détails confirmés dans la divulgation technique complète de Socket.
À lire également : $21M en Bitcoin saisi restitués après gel des transactions par les autorités
Trois packages imitent Claude Code. L’un cible OpenClaw, un agent IA qui a dépassé 210 000 étoiles sur GitHub. Le module McpInject du ver déploie un serveur MCP malveillant dans Claude Code, Claude Desktop, Cursor, VS Code Continue et Windsurf sur disque. Chacun reçoit une entrée d’outil factice pointant vers un serveur caché et malveillant.
Ce serveur contient une injection de prompt intégrée demandant aux assistants IA de lire silencieusement les clés SSH, les identifiants AWS, les jetons npm et les secrets d’environnement avant chaque appel d’outil. Le modèle ne le dit jamais à l’utilisateur. L’injection bloque explicitement cette possibilité.
Neuf fournisseurs de LLM sont ciblés pour la récolte de clés API : OpenAI, Anthropic, Google, Groq, Together, Fireworks, Replicate, Mistral et Cohere. Les clés sont extraites des variables d’environnement et des fichiers .env, puis validées selon des modèles de format connus avant exfiltration.
L’exfiltration utilise trois canaux en cascade. D’abord HTTPS vers le Worker Cloudflare, puis téléversements via API GitHub authentifiés vers des dépôts privés en utilisant un encodage double-base64, puis tunneling DNS via des requêtes encodées en base32 vers freefan[.]net et fanfree[.]net. Un algorithme de génération de domaines, initialisé par “sw2025”, fournit une solution de secours sur dix TLD si tout échoue.
À voir : Glassnode signale une exhaustion de la demande en BTC
Les deux alias d’éditeur derrière la campagne sont official334 et javaorg. Les 19 packages malveillants confirmés incluent suport-color@1.0.1, claud-code@0.2.1, cloude@0.3.0, crypto-locale@1.0.0, secp256@1.0.0 et scan-store@1.0.0, entre autres. Quatre packages dormants supplémentaires (ethres, iru-caches, iruchache et uudi) ne montrent pas encore de charge utile malveillante.
npm a supprimé les packages malveillants. GitHub a supprimé l’infrastructure de l’acteur de menace. Cloudflare a retiré les workers. Mais les défenseurs doivent agir dès maintenant, quoi qu’il en soit.
Si l’un de ces packages a été exécuté dans votre environnement, considérez cette machine comme compromise. Changez les jetons npm et GitHub, changez tous les secrets CI, auditez .github/workflows/ pour détecter des ajouts pull_request_target qui sérialisent ${{ toJSON(secrets) }}. Vérifiez la configuration du modèle de hook git global avec git config –global init.templateDir. Examinez les configurations des assistants IA pour des entrées inattendues de mcpServers. Un moteur polymorphe dormant utilisant deepseek-coder:6.7b est intégré dans le ver et désactivé dans cette version, ce qui signifie qu’une future variante pourrait se réécrire pour échapper à la détection.
Un interrupteur de sécurité est également présent dans le code. Désactivé pour l’instant. Lorsqu’il sera activé, il exécutera find ~ -type f -writable et détruira tous les fichiers modifiables dans le répertoire personnel. L’opérateur continue d’itérer.