À mesure que les outils de développement deviennent plus puissants, plus collaboratifs et souvent enrichis par l’intelligence artificielle, ils deviennent également des cibles de choix pour les cybercriminels. L’éditeur de code Cursor, basé sur GPT-4, en a récemment fait les frais. Une campagne de compromission particulièrement sophistiquée a permis à un acteur malveillant d’infecter discrètement plus de 3 200 développeurs, en injectant du code malveillant au cœur même de l’éditeur via des packages npm faussement inoffensifs.
Cette attaque s’inscrit dans une tendance de plus en plus préoccupante : la compromission de la chaîne d’approvisionnement logicielle. Au lieu de cibler directement les systèmes finaux, les attaquants insèrent du code malveillant dans les dépendances ou outils utilisés par les développeurs, espérant ainsi contaminer un maximum de projets en amont. Ce mode opératoire est redoutable, car il repose sur la confiance implicite que nous plaçons dans les bibliothèques open-source, souvent installées sans vérification approfondie.
Avec Cursor, l’enjeu est encore plus critique. Utilisé comme alternative moderne à Visual Studio Code, l’éditeur embarque des fonctionnalités avancées d’intelligence artificielle, une gestion centralisée des extensions et une interface soignée, attirant des milliers de développeurs soucieux de leur productivité. L’attaque exploitant cette plateforme a donc non seulement permis de compromettre des machines de développement, mais aussi potentiellement les projets sur lesquels travaillaient les victimes, avec tous les effets en cascade que cela implique.
Comment trois simples packages npm ont-ils pu causer une telle brèche ? Quels mécanismes ont permis à l’attaquant de persister sur les machines infectées même après suppression des paquets malveillants ? Et surtout, comment éviter que de telles compromissions ne se reproduisent ? C’est ce que nous allons analyser en profondeur dans cet article.
Analyse de l’attaque : trois packages npm ciblent Cursor
Au cœur de cette attaque se trouvent trois packages malveillants publiés sur le registre npm, tous spécifiquement conçus pour compromettre la version macOS de l’éditeur Cursor. Présentés comme des outils de configuration ou d’optimisation, ils dissimulent en réalité une charge utile visant à voler les identifiants des utilisateurs et à injecter un code malveillant dans le cœur même de l’application.
Les trois packages identifiés
Les chercheurs de chez Socket ont identifié les paquets suivants :
À eux trois, ces modules totalisent plus de 3 200 téléchargements. Deux d’entre eux (sw-cur et sw-cur1) ont été publiés par un utilisateur opérant sous l’alias gtr2018. Le troisième, aiide-cur, a été mis en ligne le 14 février 2025 par un utilisateur nommé aiide, et se présente comme un « outil en ligne de commande pour configurer la version macOS de l’éditeur Cursor ».
Mécanisme d’infection
Une fois installés, ces paquets suivent un schéma d’attaque bien huilé :
- Vol d’identifiants : Les paquets commencent par extraire les identifiants que l’utilisateur a fournis dans Cursor.
- Téléchargement distant : Ils établissent une connexion avec une infrastructure contrôlée par les attaquants, notamment les domaines
t.sw2031[.]com
etapi.aiide[.]xyz
, afin de récupérer une charge utile chiffrée. - Altération du code source : La charge utile est utilisée pour écraser le fichier
main.js
de Cursor, un composant critique du fonctionnement de l’éditeur. - Désactivation des mises à jour automatiques : Le paquet sw-cur désactive les mises à jour automatiques de Cursor, afin d’assurer la persistance du code malveillant. Il termine ensuite tous les processus Cursor actifs avant de relancer l’application, garantissant que le code altéré soit immédiatement exécuté.
Une stratégie de compromission évoluée
Cette attaque ne se contente pas d’installer un logiciel malveillant via un paquet npm : elle modifie un logiciel de confiance déjà installé sur la machine. C’est ce qu’on appelle une attaque par patch. Même si les paquets malveillants sont supprimés, le code modifié dans Cursor reste actif, ce qui rend la désinfection bien plus complexe et impose souvent une réinstallation complète de l’application.
Une stratégie d’infiltration plus subtile : la compromission par patch
Comprendre la « compromission par patch » (Patch‑based compromise)
La compromission par patch représente une méthode particulièrement rusée et efficace utilisée par les attaquants pour infiltrer des systèmes. Plutôt que d’injecter directement un logiciel malveillant via un gestionnaire de paquets, les attaquants publient un package npm apparemment inoffensif qui modifie le code source d’un logiciel déjà installé et de confiance sur la machine de la victime. Dans cette attaque, Cursor, un éditeur de code AI, a été ciblé de cette manière.
Le package malveillant publié ne contient pas de code malicieux visible au premier abord. Il agit plutôt comme un outil permettant de modifier un fichier existant, ici le fichier main.js
de Cursor. Ce changement crée une vulnérabilité dans le logiciel légitime en modifiant son comportement ou en insérant une logique malveillante tout en maintenant l’apparence de l’application originale. Cela permet au code malveillant de survivre même après la suppression du package, car il a modifié un composant crucial du logiciel installé sur le système de la victime.
Pourquoi cette méthode est redoutable, même après suppression du package malveillant ?
La particularité de la compromission par patch réside dans sa capacité à maintenir la persistance du code malveillant, même après que le package malveillant ait été retiré du système. Une fois que le logiciel (ici, Cursor) a été altéré par le patch malveillant, ce changement reste actif tant que le logiciel n’est pas réinstallé de manière propre. Même si l’attaquant retire son package du registre npm, le code malveillant est déjà intégré dans le logiciel de la victime.
Cela rend cette technique particulièrement redoutable, car le malware persiste sans qu’une réinstallation complète du logiciel ne soit nécessaire. Les développeurs victimes de l’attaque peuvent tenter de supprimer les paquets malveillants, mais sans nettoyer complètement leur installation, ils risquent de maintenir la porte d’entrée pour d’autres attaques.
Les avantages pour l’attaquant : persistance, privilèges hérités, dissimulation
L’un des plus grands avantages pour les attaquants qui utilisent la compromission par patch est la persistance qu’ils obtiennent. En opérant à l’intérieur d’un processus légitime, tel qu’un IDE ou une bibliothèque partagée, le code malveillant hérite de toute la confiance accordée à ce processus. Cela permet au malware de fonctionner comme une partie intégrante de l’environnement de développement, ce qui le rend difficile à détecter ou à supprimer.
De plus, le malware hérite des privilèges du logiciel modifié. Cela inclut l’accès aux API, aux clés de signature, aux tokens, ainsi qu’à toute autre autorisation que le logiciel pourrait détenir, y compris l’accès réseau. Cela donne à l’attaquant une puissance considérable pour mener des actions malveillantes, telles que l’exécution de code arbitraire sur le système infecté.
Enfin, la dissimulation est un autre facteur clé de cette méthode. En ne modifiant pas directement les fichiers du package malveillant, mais plutôt en altérant un composant déjà de confiance, l’attaquant parvient à cacher ses actions et à éviter une détection immédiate.
Autres campagnes similaires : vol de cryptomonnaies et Trojan RAT
Exemples des packages pumptoolforvolumeandcomment et debugdogs : exfiltration vers Telegram
Deux autres packages npm malveillants, nommés pumptoolforvolumeandcomment et debugdogs, ont été découverts, et ils partagent un objectif similaire : l’exfiltration de données sensibles. Ces packages, bien que distincts dans leur nom et leur fonctionnement, travaillent ensemble pour siphonner des clés de cryptomonnaies, des fichiers de portefeuille et des données de transactions provenant d’une plateforme de cryptomonnaie appelée BullX.
Le package pumptoolforvolumeandcomment a été téléchargé 625 fois, tandis que debugdogs a été téléchargé 119 fois depuis leur publication en septembre 2024. En réalité, debugdogs sert de package secondaire qui déclenche l’exécution de pumptoolforvolumeandcomment, facilitant ainsi l’infection sur plusieurs points d’entrée. Cette méthode permet aux attaquants de multiplier les vecteurs d’infection sans modifier le code malveillant de base, rendant l’attaque plus difficile à détecter.
Une fois que ces packages sont installés, ils commencent à capturer des informations de portefeuilles de cryptomonnaies, ainsi que des données de trading. Les informations collectées sont ensuite exfiltrées vers un bot Telegram, une méthode populaire pour communiquer avec les attaquants de manière discrète et directe.
Cas du package rand-user-agent : intégration d’un cheval de Troie à distance (RAT)
Un autre exemple de compromission observé récemment concerne le package rand-user-agent, qui a été compromis pour injecter un cheval de Troie à distance (RAT) dans des systèmes infectés. Les versions malveillantes (2.0.83, 2.0.84 et 1.0.110) de ce package ont été utilisées pour établir des communications avec des serveurs externes, permettant ainsi aux attaquants d’exécuter des commandes à distance sur les machines des victimes.
Une fois infectés, les systèmes peuvent exécuter des commandes shell, télécharger et charger des fichiers, et modifier le répertoire de travail des victimes, ouvrant ainsi une porte dérobée pour une exploitation continue. Le cheval de Troie permet aux attaquants de prendre le contrôle complet du système infecté, offrant ainsi un accès privilégié à des données sensibles et la possibilité d’effectuer diverses actions malveillantes.
Lien entre ces attaques : exploitation de la confiance dans les outils open-source
Ce qui relie ces différentes attaques, y compris celles mentionnées dans les parties précédentes, est l’exploitation de la confiance dans les outils open-source. Les attaquants savent que les outils open-source sont largement utilisés par les développeurs et sont souvent considérés comme sûrs et fiables. En intégrant des packages malveillants dans des bibliothèques populaires ou en exploitant des packages légitimes déjà présents sur les machines des victimes, les attaquants profitent de cette confiance aveugle dans les outils open-source pour infiltrer des systèmes.
Les développeurs, cherchant à améliorer leur efficacité en utilisant des outils gratuits ou populaires, peuvent négliger de vérifier minutieusement les packages qu’ils installent, créant ainsi une opportunité pour les cybercriminels. Une fois un package malveillant installé, il peut fonctionner en arrière-plan, collectant des données sensibles ou créant des portes dérobées sans alerter l’utilisateur.
Cette tendance montre que les attaques ciblant les outils open-source sont de plus en plus fréquentes et sophistiquées. Elle souligne l’importance de la vigilance et de la mise en place de mécanismes de sécurisation pour protéger les systèmes et éviter de compromettre la confiance dans les solutions open-source essentielles à de nombreux projets de développement.