Un domaine expiré conduit à une attaque de la chaîne d’approvisionnement sur le package node-ipc npm

Lucas Morel

Les attaquants ont effectué une attaque de piratage de courrier électronique sur un compte de responsable inactif et ont publié de nouvelles versions de node-ipc contenant un logiciel malveillant de vol d’informations d’identification.

Un package NPM populaire appelé node-ipc a été compromis, des pirates informatiques publiant des versions malveillantes regroupant des logiciels malveillants de vol d’informations d’identification. La cause première de la compromission était un nom de domaine expiré que les attaquants avaient réussi à enregistrer afin de détourner le compte d’un responsable.

Le package node-ipc a déjà eu des logiciels malveillants ajoutés à son code. En mars 2022, à la suite de l’invasion de l’Ukraine par la Russie, le créateur du projet a intentionnellement ajouté un code malveillant au programme pour effacer les fichiers des systèmes dotés d’adresses IP russes ou biélorusses.

Node-ipc est un module Node.js qui implémente la prise en charge de la communication inter-processus locale et distante sur différents types de socket sur toutes les principales plates-formes. Un cas d’utilisation consiste à implémenter des réseaux neuronaux multi-processus complexes en JavaScript, mais le module est également utilisé comme dépendance pour 424 autres projets et reçoit près de 700 000 téléchargements hebdomadaires.

Jeudi, les attaquants ont réussi à publier trois versions trojanisées dans trois branches différentes du projet : 9.1.6, 9.2.3 et 12.0.1. Toutes les nouvelles versions contenaient une charge utile de vol d’informations d’identification obscurcie de 80 Ko dans le fichier node-ipc.cjs.

Le code malveillant recherche et vole un large éventail d’informations d’identification pour les outils CI/CD, les services et infrastructures cloud, Kubernetes, SSH et les agents de codage IA. Les données sont exfiltrées via des requêtes DNS TXT plutôt que via des connexions HTTP.

Étant donné que node-ipc est une dépendance pour des centaines d’autres packages, qui pourraient à leur tour être des dépendances pour encore plus de packages, cette attaque pourrait avoir un grand rayon d’action. Les utilisateurs doivent immédiatement analyser leurs systèmes pour déterminer si l’une des versions compromises est installée et, si c’est le cas, traiter la machine ainsi que tout jeton d’accès, variable d’environnement et clé API qui y sont stockés comme compromis.

Collecte exhaustive d’informations d’identification et exfiltration sournoise

La charge utile malveillante est déchiffrée et exécutée chaque fois que d’autres applications chargent le package via . Les versions trojanisées ont été conçues pour rester pleinement fonctionnelles afin d’éviter une détection immédiate, ce qui, avec d’autres décisions prises par les attaquants, telles que l’exfiltration de données via DNS TXT, suggère que la furtivité était une priorité absolue.

Une fois exécuté, le code malveillant collecte des informations sur le système hôte, notamment la version du système d’exploitation, le nom d’hôte et les variables d’environnement. Il commence ensuite à rechercher des informations d’identification à différents endroits en fonction du système d’exploitation détecté.

« La charge utile choisit entre des listes de cibles décodées distinctes pour macOS et Linux/plates-formes par défaut », ont déclaré les chercheurs de Socket.dev dans leur analyse. « Les listes ne sont pas identiques. Dans la charge utile analysée, la liste macOS contient 113 modèles et la liste Linux/par défaut contient 127 modèles. « 

Les listes de cibles sont étendues et comprennent :

  • Fichiers de configuration pour AWS, Azure, GCP, OCI, DigitalOcean, Scaleway, Hetzner, Fly, Vercel, Railway, Alibaba Cloud, IBM Cloud, Linode, MinIO, Snowflake, Doppler et Salesforce ;
  • Clés SSH et configuration SSH ;
  • Kubernetes, Docker, Helm, Rancher et matériel de compte de service ;
  • Informations d’identification npm, Yarn, Netrc, Git, GitHub CLI, GitLab CLI et Hub ;
  • Informations d’identification Terraform et fichiers tfvars ;
  • .env, .env.local, .env.production, fichiers de configuration de base de données, historiques de shell et historiques CLI de base de données ;
  • Fichiers de base de données du trousseau macOS ;
  • Fichiers de base de données de clés de profil Firefox sur macOS ;
  • Porte-clés Linux et fichiers KWallet ;
  • FileZilla, Remmina, OpenVPN et profils de connexion associés ;
  • Stockage local Microsoft Teams et chemins IndexedDB.

Bien que les magasins d’informations d’identification du navigateur ne soient pas directement ciblés, les bases de données du trousseau macOS peuvent contenir des informations d’identification du système et du navigateur. Ces informations d’identification doivent donc également être considérées comme compromises et alternées.

Toutes les données collectées sont archivées dans un fichier GZIP, qui est ensuite divisé en morceaux et exfiltré en effectuant des requêtes DNS TXT sur un domaine contrôlé par un attaquant dont le nom est similaire à celui du domaine Azure Static Web Apps légitime de Microsoft.

Étant donné que les attaquants contrôlent le serveur DNS de leur nom de domaine, ils peuvent voir les requêtes d’enregistrement TXT effectuées par les systèmes infectés et reconstruire les archives de leur côté à partir des octets divulgués. Les chercheurs de Socket estiment qu’un fichier de 500 Ko nécessiterait environ 29 400 requêtes TXT pour être exfiltré de cette manière.

« La charge utile n’établit pas de persistance dans l’échantillon décodé », ont déclaré les chercheurs. « Aucun cron, launchd, rc.d, installation de service ou téléchargement de deuxième étape n’a été observé. L’impact opérationnel est concentré dans la fenêtre d’exécution : collecte, création d’archives, exfiltration DNS TXT et tentative de nettoyage. »

Un domaine expiré a conduit à une prise de contrôle de l’e-mail

Les versions malveillantes de node-ipc ont été publiées à partir d’un compte npm appelé atiertant, qui appartient à l’un des nombreux développeurs ayant un accès mainteneur au package. Atiertant n’avait jamais utilisé son accès pour publier de nouvelles versions de node-ipc auparavant, et n’a eu aucune activité sur node-ipc ou tout autre package npm auquel il a accès depuis 2022.

Les chercheurs en sécurité ont remarqué que l’adresse e-mail du compte d’atiertant était hébergée sur un domaine appelé atlantis-software.net qui avait expiré en janvier 2025 et avait été réenregistré plus tôt ce mois-ci, probablement par les attaquants. Il suffisait alors de mettre en place un serveur de messagerie, de recréer l’adresse e-mail de l’atiertant et d’effectuer une réinitialisation du mot de passe du compte.

Cela met en évidence certains des défis de sécurité auxquels les projets de logiciels open source sont confrontés. Bien que l’examen périodique des listes d’accès pour les comptes dormants et inutilisés soit une recommandation générale de sécurité pour les entreprises, les projets open source sont gérés par des groupes de bénévoles, et il n’est pas rare que des personnes prennent de longues pauses avant de contribuer à des projets, surtout si ces projets ont atteint un niveau élevé de maturité et d’exhaustivité des fonctionnalités et ne reçoivent donc plus de mises à jour fréquentes.

Il est également probable que les attaquants n’ont pas ciblé node-ipc dès le début, ils ont simplement recherché dans npm des comptes avec des adresses e-mail sur des noms de domaine personnalisés, puis ont vérifié si l’un de ces noms de domaine avait expiré. Cela signifie qu’il pourrait y avoir d’autres comptes dormants susceptibles d’être piratés par courrier électronique en utilisant la même méthode.

Le rapport Socket.dev contient des recommandations supplémentaires destinées aux utilisateurs et aux développeurs, ainsi que des hachages de fichiers et d’autres indicateurs de compromission qui peuvent être utilisés par les équipes de sécurité pour créer des détections.

Source ouverteDéveloppement de logicielsCyberattaquesCybercriminalitéSécurité