Les informations d’identification volées et divulguées entraînent l’empoisonnement des packages Node.js d’AsyncAPI et de Jscrambler Code Integrity par des logiciels malveillants.
Les attaques ciblant les écosystèmes de développeurs sont de plus en plus fréquentes et sophistiquées, les développeurs Node.js étant fermement dans la ligne de mire de cette semaine, car plusieurs packages npm appartenant à l’open source AsyncAPI et Jscrambler Code Integrity ont été empoisonnés par des logiciels malveillants suite à des informations d’identification de développement compromises.
Ces incidents mettent en évidence l’effet en cascade des attaques de la chaîne d’approvisionnement logicielle dans lesquelles des informations d’identification volées sont ensuite utilisées pour perpétrer des compromissions supplémentaires. Les chercheurs en sécurité conseillent aux organisations de reconstruire complètement à partir d’images propres toutes les machines de développeur qui ont installé un package empoisonné – et de faire pivoter tous les jetons npm, l’accès au contrôle de source, les informations d’identification cloud, les secrets CI/CD, les clés SSH, les clés de signature et les sessions de navigateur.
Les packages concernés incluent : jscrambler@8.14.0, jscrambler@8.16.0, jscrambler@8.17.0, jscrambler@8.18.0, jscrambler@8.20.0, @asyncapi/generator-helpers@1.1.1, @asyncapi/generator-components@0.7.1, @asyncapi/generator@3.3.1, @asyncapi/specs@6.11.2 et @asyncapi/specs@6.11.2-alpha.1.
Cependant, les packages qui répertorient l’un des packages empoisonnés ci-dessus comme dépendances peuvent également être affectés, y compris ceux des mêmes projets, tels que jscrambler-webpack-plugin 8.6.2, gulp-jscrambler 8.6.2, grunt-jscrambler 8.5.2 et jscrambler-metro-plugin 9.0.2.
Workflow d’actions GitHub vulnérable utilisé comme point d’entrée
L’attaque contre AsyncAPI, une spécification de référence open source et un ensemble d’outils pour la mise en œuvre d’architectures événementielles et d’API asynchrones, s’est produite mardi et a été détectée indépendamment par plusieurs sociétés de sécurité surveillant le registre npm, notamment Upwind, Socket.dev, Wiz, StepSecurity et Aikido Security.
Selon l’analyse des chercheurs, les attaquants ont profité d’une vulnérabilité de configuration connue dans un workflow CI/CD GitHub Actions qui avait été signalée en avril. La faille implique le pull_request_target événement, qui s’exécute chaque fois qu’une nouvelle demande d’extraction est effectuée. Lorsqu’il est déclenché, le workflow extrait et exécute automatiquement le code de demande d’extraction soumis par le développeur dans le conteneur Actions, mais cela est effectué dans le contexte du référentiel de base avec un accès complet aux secrets.
Le projet AsyncAPI avait un correctif proposé depuis le 17 mai, mais le correctif n’avait pas encore fait l’objet d’un examen complet et n’avait pas été fusionné dans la branche principale.
« À 05h08 UTC, l’attaquant a ouvert le PR #2155 contenant un fichier de démarque avec du JavaScript obscurci caché après environ 1 000 octets d’espaces », ont expliqué les chercheurs de Wiz dans leur rapport. « La charge utile a été conçue pour analyser l’environnement du coureur GitHub Actions à la recherche de secrets et les exfiltrer vers une URL morte sur la poubelle rentry.co. »
Lorsqu’un workflow GitHub Actions est déclenché et exécuté dans un environnement, un délai temporaire GITHUB_TOKEN est généré pour permettre les commandes git authentifiées sur le référentiel. D’autres jetons peuvent également être inclus.
Dans ce cas, les attaquants ont réussi à obtenir un jeton associé à asyncapi-bot, un compte de service ayant accès à l’ensemble de l’organisation AsyncAPI sur GitHub. Cela leur a permis d’effectuer des validations de code malveillant dans deux référentiels distincts. Ces validations ont ensuite déclenché des flux de travail de construction automatisés qui ont généré et publié les packages npm.
La charge utile fournie dans les packages partage certaines similitudes avec un framework de malware appelé Miasma qui a été utilisé lors de précédentes compromissions de la chaîne d’approvisionnement. Cependant, le code du malware semble être très différent des variantes précédemment documentées.
Le code de première étape télécharge une charge utile de cheval de Troie secondaire qui comporte des variantes pour Linux, Windows et macOS. Il s’agit d’un cadre modulaire de logiciels malveillants doté de capacités de vol d’informations d’identification qui cible les mots de passe et les cookies enregistrés dans les navigateurs, les clés SSH, les jetons npm et GitHub, les informations d’identification AWS, le trousseau macOS et les portefeuilles de crypto-monnaie.
Le cheval de Troie communiquait avec un serveur de commande et de contrôle et peut accepter des commandes à distance pour effectuer des opérations sur les fichiers, répertorier les répertoires et exfiltrer les données.
Jscrambler compromis via une fuite d’informations d’identification npm
L’attaque de Jscrambler s’est produite le week-end du 11 juillet, les attaquants publiant plusieurs versions de chevaux de Troie en deux vagues. Jscrambler Code Integrity est une bibliothèque de sécurité côté client conçue pour protéger les applications Web et mobiles basées sur JavaScript contre la falsification et l’ingénierie inverse.
Jscrambler a publié un avis en réponse à l’incident dans lequel il a précisé que les attaquants avaient publié des versions malveillantes du package à l’aide d’informations d’identification de publication npm. Cependant, contrairement au cas AsyncAPI, la manière dont ces informations d’identification ont été divulguées n’est pas claire.
Initialement, les attaquants ont publié de nouvelles versions de package avec deux scripts malveillants qui sont exécutés au moment de l’installation à l’aide d’un hook de préinstallation dans le script de configuration. Les scripts exécutent également des binaires spécifiques à la plate-forme pour Linux, macOS et Windows intégrés dans un conteneur obscurci.
Parce que preinstall ou postinstall Les hooks sont des moyens courants de diffuser des logiciels malveillants dans des packages npm, ils sont automatiquement vérifiés par les outils de sécurité. Pour éviter d’être détectés, les attaquants ont opté pour une méthode qui consistait à injecter le code malveillant directement dans le dist/index.js et dist/bin/jscrambler.js fichiers. Cela a modifié l’exécution du logiciel malveillant à partir du moment de l’installation du package jusqu’au moment où le package est importé dans d’autres projets ou où la CLI Jscrambler est invoquée.
Les exécutables de logiciels malveillants intégrés pour différentes plates-formes sont écrits en Rust et, selon l’analyse de Socket.dev, étaient « un vaste collecteur d’informations d’identification et de secrets axé sur les développeurs » qui ciblait les portefeuilles cryptographiques d’extension de navigateur, les clés API des assistants de codage IA et des serveurs MCP, les informations d’identification cloud pour AWS, Azure et GCP, les jetons d’authentification pour les applications de messagerie (telles que Discord, Slack et Telegram), les magasins de mots de passe des navigateurs, Steam et KDE.



