Une extension Claude Code compromise installe une porte dérobée SSH sur macOS
Phorion a découvert une porte dérobée dans les versions 2.1.312 et 2.1.313 de l'extension officielle Claude Code pour VS Code sur le Cursor Marketplace, qui installe un accès SSH persistant.
Traduit automatiquement depuis l'original anglais.
Les chercheurs en sécurité de Phorion ont identifié une compromission de la chaîne d'approvisionnement affectant l'extension officielle Claude Code for VS Code distribuée via le Cursor Marketplace. Les versions malveillantes, 2.1.312 et 2.1.313, injectent une porte dérobée Secure Shell (SSH) persistante dans les environnements macOS, Linux et Windows dès leur chargement.
Cet incident met en évidence les risques inhérents aux écosystèmes d'outils pour développeurs, où les extensions s'exécutent avec des privilèges élevés et peuvent modifier silencieusement les configurations système. Les organisations utilisant ces versions spécifiques doivent considérer toute installation comme une violation potentielle et lancer des procédures de réponse aux incidents.
Ce qui s'est passé
La compromission cible les développeurs utilisant l'éditeur Cursor, qui héberge son propre marketplace pour les extensions compatibles avec VS Code. Phorion a découvert que le bundle des versions 2.1.312 et 2.1.313 de Claude Code contenait une charge utile injectée. Ce code s'exécute avant la logique d'activation standard de l'extension, ce qui signifie que les utilisateurs n'ont pas besoin d'interagir avec l'outil pour que le malware s'exécute. Cursor a depuis retiré ces versions de son marketplace.
L'objectif principal de la charge utile est d'établir un accès interactif à long terme à la machine de la victime. Elle y parvient en installant des clés SSH et en créant des tunnels inverses vers un serveur contrôlé par l'attaquant à l'adresse IP 134.209.82.225. Bien que le malware inclue une logique pour tous les principaux systèmes d'exploitation de bureau, l'analyse se concentre sur macOS en raison de détails d'implémentation spécifiques et de bugs présents sur les autres plateformes.
Comme les extensions fonctionnent avec les permissions de l'environnement de développement intégré (IDE) et de l'utilisateur, la porte dérobée obtient immédiatement un accès au code source local, aux fichiers et aux outils de développement. Ce niveau d'accès permet à l'attaquant de collecter des informations sensibles et de maintenir sa persistance même après la fermeture de l'IDE.
Comment cela fonctionne
L'infection commence par une expression de fonction auto-invocée ajoutée au début du fichier minifié extension.js. Ce script importe des modules Node.js standards pour manipuler le système de fichiers et exécuter des commandes shell. Sa première action consiste à s'assurer que le répertoire ~/.ssh existe et à ajouter une clé publique Ed25519 contrôlée par l'attaquant au fichier authorized_keys. La clé est étiquetée avec le commentaire svc-telemetry, bien que les enquêteurs doivent se fier à l'empreinte de la clé plutôt qu'au commentaire pour la détection.
Ensuite, le script tente d'activer le démon SSH. Sur macOS, il vérifie l'état de la connexion distante à l'aide de systemsetup -getremotelogin. Cependant, un bug critique existe ici : la commande nécessite des privilèges administrateur pour lire l'état. Lorsqu'elle est exécutée par un utilisateur standard, elle renvoie un message d'erreur au lieu de "Off", ce qui amène le script à ignorer l'étape d'activation. Si la connexion distante était déjà activée, la porte dérobée fonctionne comme prévu ; sinon, le chemin d'accès entrant reste bloqué jusqu'à ce qu'un utilisateur l'active manuellement.
Pour maintenir l'accès, le malware établit un tunnel SSH inverse sortant vers le serveur de l'attaquant. Il utilise une clé privée intégrée, étiquetée svc-telemetry-tun, stockée dans le répertoire temporaire. Le tunnel transfère le trafic d'un port alloué dynamiquement sur le serveur de l'attaquant vers le port 22 sur le localhost de la victime. Cela permet à l'opérateur de se reconnecter à la machine en utilisant la clé publique précédemment installée. La connexion est maintenue active à l'aide d'autossh ou d'une boucle de nouvelle tentative, assurant la persistance malgré les interruptions réseau.
Détails clés
- Versions affectées : Claude Code for VS Code versions 2.1.312 et 2.1.313 sur le Cursor Marketplace.
- Infrastructure de l'attaquant : Les commandes et les balises sont envoyées à l'adresse IP 134.209.82.225 sur les ports 22 et 8099.
- Mécanisme de persistance : Sur macOS, le malware crée un LaunchAgent nommé
com.apple.sysmond.plistdans~/Library/LaunchAgentspour survivre aux redémarrages. - Données de reconnaissance : La charge utile transmet des métadonnées sur l'hôte, y compris le nom d'hôte, le système d'exploitation et les noms des variables d'environnement correspondant à des motifs tels que
KEY,TOKENouAWS. - Bug macOS : Le script échoue à activer la connexion distante sur macOS s'il est exécuté sans privilèges administrateur en raison d'une gestion incorrecte des erreurs de la commande
systemsetup. - Défi de détection : Le malware modifie directement
authorized_keysvia les API de fichiers Node.js, contournant les règles de surveillance basées sur le shell qui recherchent des commandes commeechooutee.
Pourquoi c'est important
Pour les équipes d'ingénierie logicielle, cet incident souligne la vulnérabilité de la chaîne d'approvisionnement au sein des environnements de développement. Les extensions IDE sont des composants fiables qui nécessitent souvent des permissions étendues pour fonctionner efficacement. Lorsqu'un tel composant est compromis, il offre une voie directe vers les actifs les plus sensibles d'une organisation : le code source et les identifiants. La capacité du malware à exfiltrer les noms des variables d'environnement contenant des secrets permet aux attaquants de prioriser les cibles à haute valeur sans voler initialement les secrets eux-mêmes.
De plus, les mécanismes de persistance utilisés sont suffisamment sophistiqués pour survivre aux étapes typiques de remédiation. La simple désinstallation de l'extension ne supprime pas la porte dérobée, car le malware installe des services système indépendants et des tâches cron. Cela signifie que les actions standard de gestion de paquets sont insuffisantes pour le nettoyage. Les équipes de sécurité doivent comprendre que les outils de développement sont désormais un vecteur d'attaque primaire, nécessitant le même niveau d'examen que l'infrastructure de production.
Ce que vous pouvez faire
- Auditer les extensions installées : Vérifiez immédiatement toutes les machines de développement pour les versions 2.1.312 ou 2.1.313 de Claude Code for VS Code et désinstallez-les si elles sont trouvées.
- Rechercher les artefacts de persistance : Recherchez
~/.config/.smt,~/.config/.smtket~/Library/LaunchAgents/com.apple.sysmond.plistsur les systèmes macOS. - Examiner les configurations SSH : Inspectez
~/.ssh/authorized_keyspour détecter les clés publiques inconnues, spécifiquement celles avec le commentairesvc-telemetryou les clés Ed25519 non familières. - Surveiller le trafic réseau : Recherchez les connexions SSH sortantes vers 134.209.82.225 ou les requêtes HTTP POST vers le port 8099 sur cette même IP.
- Analyser les journaux de processus : Utilisez la télémétrie Endpoint Security Framework pour détecter les processus auxiliaires de l'IDE écrivant dans les fichiers de configuration SSH ou créant des LaunchAgents.
- Faire tourner les identifiants : Si des machines affectées sont identifiées, supposez une compromission et faites tourner tous les secrets, clés API et clés SSH stockés sur ces appareils.



