Un ver basé sur Rust appelé IronWorm a compromis au moins 36 packages npm dans l'écosystème Arweave, volant des identifiants de développeurs et les utilisant pour s'auto-propager à travers les dépôts GitHub avant de disparaître.
JFrog Security Research a identifié la campagne en enquêtant sur une activité suspecte liée à un compte développeur au sein de l'écosystème open source Arweave et WeaveDB. Le malware, écrit en Rust, récolte les clés API, les identifiants cloud, les clés SSH et les jetons de publication npm depuis les machines de développeurs infectées, puis réutilise ces identifiants pour pousser du code malveillant vers d'autres dépôts.
"La comparaison la plus proche est la campagne Shai-Hulud", a déclaré l'équipe de recherche de JFrog dans un rapport publié mercredi. "Le malware que nous avons examiné partage beaucoup de points avec elle : la même idée de compromettre des développeurs, de voler des identifiants et d'utiliser des workflows de confiance de la chaîne d'approvisionnement logicielle pour se propager davantage." Mais IronWorm porte le concept "au niveau supérieur", ont ajouté les chercheurs.
L'attaquant a effectué au moins 57 modifications de code malveillantes dans des dépôts appartenant à neuf organisations, antidatant les commits pour obscurcir la chronologie de la compromission. Certaines contributions ont été attribuées au modèle d'IA Claude d'Anthropic utilisant l'email "claude@users.noreply.github.com" bien qu'elles portent des horodatages datant de 13 ans. Les journaux GitHub Action ont révélé que les commits ont en réalité été poussés par l'utilisateur compromis ocrybit, a déclaré JFrog. OX Security, qui a également suivi la campagne, a indiqué que les packages affectés totalisaient plus de 32 000 téléchargements mensuels combinés avant que la menace ne soit atténuée.
Un implant personnalisé sans précédent connu
JFrog a déclaré que la charge utile d'IronWorm ne correspondait à aucun voleur d'informations, rootkit eBPF ou framework de commande et contrôle connu dans sa base de données. Le binaire contient des milliers de fonctions avec des chaînes chiffrées qui ne pouvaient être récupérées qu'au moment de l'exécution, chacune utilisant des paramètres de déchiffrement uniques plutôt qu'une seule clé codée en dur.
Le malware cible 86 variables d'environnement dans les fournisseurs cloud, les services d'IA et les plateformes de cryptomonnaies. Il récupère les identifiants pour Amazon Web Services, Docker, Kubernetes, npm et les configurations de coffre-fort, ainsi que les clés API pour les services d'IA incluant Anthropic, OpenAI, Google Gemini, Cohere, Mistral, Groq, Perplexity et xAI. Il cible également le portefeuille de cryptomonnaies de bureau Exodus — bien que l'attaquant ait codé en dur la phrase de récupération BIP-39 de son propre portefeuille pour empêcher le malware de le toucher, un détail que JFrog a retracé jusqu'à un portefeuille test presque vide contenant quelques centimes de poussière.
IronWorm utilise une charge utile eBPF qui fonctionne comme un rootkit du noyau Linux pour cacher les processus malveillants, les fichiers et l'activité réseau aux systèmes de sécurité. Sur les systèmes où le verrouillage du noyau est activé, les astuces de dissimulation de processus échouent et l'activité redevient visible, a noté JFrog. Le malware communique avec son opérateur via Tor et accepte des commandes pour télécharger des secrets, déposer des fichiers et exécuter des shells distants.
Auto-propagation via la publication de confiance
La chaîne d'attaque a commencé avec un compte npm compromis nommé "asteroiddao", qui a publié des versions de packages contenant un binaire Rust ELF exécuté via un hook de pré-installation. Dans les environnements CI, le malware a abusé du flux de publication de confiance (Trusted Publishing) de npm — obtenant un jeton OIDC depuis l'environnement CI du développeur pour pousser des versions empoisonnées vers le registre sans avoir besoin d'identifiants npm.
La charge utile malveillante a également remplacé les workflows GitHub Actions existants par une version capable de récolter des secrets, de les écrire dans un fichier d'apparence inoffensive et de les télécharger comme artefact de construction — éliminant ainsi le besoin d'un serveur C2 externe pour l'exfiltration de données. L'attaquant a ensuite silencieusement supprimé les packages malveillants de GitHub dans un délai d'un jour après leur publication, a déclaré JFrog.
La campagne fait écho au ver Shai-Hulud déployé par le groupe cybercriminel TeamPCP, qui avait précédemment compromis l'outil d'analyse de sécurité Trivy et d'autres projets pour déployer des voleurs d'informations ciblant les secrets CI/CD. Mais IronWorm est écrit en Rust plutôt qu'en JavaScript, ce qui le rend considérablement plus difficile à rétro-ingénier. JFrog a déclaré qu'il "ne peut pas savoir avec certitude" si IronWorm est directement lié à TeamPCP ou s'il s'agit d'un imitateur.
L'attaque souligne comment les environnements de développement sont devenus des cibles privilégiées pour les compromissions de la chaîne d'approvisionnement. En compromettant un seul développeur, les acteurs malveillants peuvent introduire du code nuisible dans des projets logiciels de confiance et atteindre de nombreuses organisations en aval. Les organisations qui pourraient avoir été affectées devraient auditer les dépôts pour les commits provenant du compte ocrybit, faire pivoter toutes les clés et secrets accessibles au compte compromis, et vérifier les packages npm publiés pour les versions malveillantes, a déclaré JFrog.
Cet article est fourni à titre informatif uniquement et ne constitue pas un conseil en investissement.