Des packages npm AsyncAPI compromis permettent la diffusion de logiciels malveillants de type botnet multi-étapes

Selon les conclusions d’ OX Security , SafeDep , Socket et StepSecurity , quatre packages npm compromis dans l’espace de noms @asyncapi distribuent un chargeur de botnet à plusieurs étapes.
Les paquets concernés sont listés ci-dessous –
- @asyncapi/generator-helpers@1.1.1
- @asyncapi/generator-components@0.7.1
- @asyncapi/generator@3.3.1
- @asyncapi/specs(v6.11.2, v6.11.2-alpha.1)
« Les paquets compromis déploient une charge utile de première étape obscurcie qui télécharge une charge utile de deuxième étape cryptée, identifiée comme Miasma, depuis IPFS », a déclaré Socket.
Les paquets infectés contiennent un implant JavaScript caché, chacun renfermant un fichier source injecté qui se décode en un même programme de téléchargement de seconde étape. Contrairement aux versions précédentes qui exploitaient les points d’installation pour déclencher l’exécution d’une charge utile JavaScript, le code malveillant est ici exécuté lorsque le module infecté est chargé par Node.js. Ce dernier lance ensuite un nœud d’arrière-plan détaché qui télécharge et exécute le logiciel malveillant depuis IPFS.
La charge utile suivante est un chargeur JavaScript chiffré nommé « sync.js », qui est écrit dans des répertoires spécifiques au système d’exploitation puis exécuté. L’URL du téléchargeur est « ipfs[.]io/ipfs/QmQobZSp1wRPrpSEQ56qnyq7ecZh5Bg5k1fnjt4SUwwHb9 ». Le chargeur contient deux composants :
- La charge utile JavaScript finale chiffrée, qui se décode selon le framework de tâches Miasma
- Un gros blob chiffré utilisé par le framework de chaîne de génération du runtime
Le framework regroupe 744 modules et est construit comme un framework de commande qui prend en charge six canaux de communication de commande et de contrôle (C2) indépendants utilisant HTTP, le relais Nostr, IPFS, BitTorrent DHT, le maillage P2P libp2p GossipSub et un contrat intelligent Ethereum.
/>
Outre le fait de faciliter le vol d’identifiants, l’empoisonnement d’outils d’IA, les déplacements latéraux sur le réseau local et la propagation de type ver sur les registres npm, PyPI et Cargo, Miasma dispose de son propre mécanisme de persistance, configurant des clés de démarrage automatique systemd, crontab, launchd macOS et du registre Windows.
« Bien que ce logiciel malveillant présente certaines similitudes avec les campagnes Shai-Hulud et Miasma , et qu’il contienne la chaîne Miasma à plusieurs reprises dans son code, il n’est pas identique à ces derniers et n’est pas non plus attribué aux campagnes Miasma/Shai-Hulud/TeamPCP que nous avons observées par le passé », a déclaré Moshe Siman Tov Bustan d’OX Security.
De plus, il intègre un interrupteur de sécurité qui surveille un jeton volé et déclenche une suppression du répertoire si le jeton est révoqué, tout en évitant les systèmes identifiés comme des environnements sandbox ou virtuels, ainsi que ceux dont la langue actuelle est le russe ou qui ont des outils de sécurité de CrowdStrike, SentinelOne, Microsoft Defender, CarbonBlack, Cylance, Osquery, Tanium et Qualys installés.
« Son mode de fonctionnement le plus évident est une architecture C2 basée sur REST : l’implant envoie des balises à un point de terminaison HTTP, accepte les tâches chiffrées et renvoie les résultats des commandes à la même infrastructure. Autour de ce noyau, la charge utile prend également en charge le transport des chargements, le chiffrement des commandes, la signature des nœuds, les mises à jour de la charge utile, la gestion des fichiers, l’exécution de commandes shell et l’écriture persistante. »
D’après StepSecurity, l’attaquant aurait obtenu un accès en écriture aux dépôts et utilisé le système de publication GitHub Actions légitime du projet pour publier des paquets avec des attestations de provenance OIDC valides. Cette attaque de la chaîne d’approvisionnement n’a pas impliqué le vol d’un jeton npm.
« Ces deux attaques sont des compromissions de pipelines CI/CD, et non des vols de jetons npm ou des actes malveillants de la part de mainteneurs », a déclaré Rohan Prabhu, chercheur en sécurité. « L’attaquant a effectué des commits sous une identité Git factice et a laissé le véritable processus de publication de chaque dépôt se charger de la publication via l’intégration de npm avec GitHub OIDC (outil de publication de confiance). »
« Les paquets résultants comportent des attestations de provenance SLSA légitimes, prouvant uniquement que le flux de travail autorisé du projet les a produits, et non que les commits déclencheurs étaient légitimes. La provenance ne protège pas contre une authentification de push compromise. »
Les cinq versions malveillantes ont depuis été retirées du registre npm. Il est conseillé de considérer comme potentiellement compromise toute plateforme ayant importé ou exécuté l’une de ces versions. Toutefois, il convient de noter que le risque d’exposition dépend du contexte d’utilisation du module infecté : lors d’une compilation ou dans le cadre d’un processus de développement.
« Aucun script de préinstallation, de post-installation ou d’installation n’est présent dans les trois fichiers package.json », a déclaré StepSecurity. « Ce programme d’installation malveillante se déclenche lorsque le module infecté est appelé par la fonction `require()` lors de l’utilisation normale du générateur : au moment où une tâche de compilation ou d’intégration continue fait appel à la bibliothèque, et non lors de l’installation via npm. »