EN
en direct

Une extension Claude Code falsifiée sur le marketplace de Cursor a installé un backdoor SSH persistant

Le 29 octobre 2026, le marketplace d’extensions de Cursor a distribué pendant environ onze heures une version falsifiée d’Anthropic.claude-code (2.1.312 et 2.1.313) qui plantait une clé SSH et un tunnel persistant sur le poste du développeur. Jusqu’à 5 000 utilisateurs sont concernés, et la simple désinstallation ne suffit pas.

Un rack de serveurs entrouvert dans une allée de datacenter sombre, une diode ambre qui filtre par le panneau arrière.

29 octobre 2026. Le marketplace d’extensions de Cursor distribue, pendant environ onze heures (de 2 h 27 à 13 h 35, heure du Pacifique), une version falsifiée de l’extension Anthropic.claude-code — les builds 2.1.312 et 2.1.313 — que Anthropic n’a pas construite. 30 octobre 2026. La société de sécurité macOS Phorion publie l’analyse du paquet et révèle qu’il installait une clé SSH puis un tunnel de sortie persistant. 30 octobre 2026, encore. Cursor chiffre à « au plus 5 000 utilisateurs » l’exposition et publie des commandes de nettoyage. L’essentiel : un backdoor SSH a été poussé à des développeurs par un canal qu’ils considéraient comme sûr, et la désinstallation ne l’efface pas.

Pour un responsable plateforme qui a laissé ses équipes installer des extensions d’IA depuis un marketplace tiers, l’incident n’est pas une simple anecdote de supply chain. C’est la preuve que l’agent d’IA et la mise à jour automatique ont déplacé la frontière de confiance, sans que les contrôles aient suivi.

Ce que contenait la charge utile

L’analyse de Phorion, conduite par son CEO Calum Hall, montre que le fichier extension.js compromis commençait par une IIFE (expression de fonction immédiatement invoquée) préfixée au paquet minifié. Le reste du bundle ressemblait à l’extension légitime — chaînes Claude Code, exports activate et deactivate, code d’interface — ce qui rendait la falsification difficile à repérer à l’oeil nu.

Le préfixe injecté chargeait les modules Node.js standard (child_process, fs, os, path, http, crypto) et s’exécutait dès le chargement du fichier, avant même le callback activate normal de l’extension. Autrement dit, l’utilisateur n’avait pas besoin d’interagir avec l’extension pour que la charge utile se déclenche.

La séquence d’infection était ensuite automatique. La charge ajoutait la clé SSH de l’attaquant au fichier authorized_keys de l’utilisateur, sous le libellé svc-telemetry, ce qui permettait à l’opérateur d’ouvrir une session en tant que cet utilisateur. Elle ouvrait aussi une connexion SSH sortante vers le serveur de l’attaquant, créant un tunnel inversé, et réessayait la connexion toutes les 60 secondes environ. Le tunnel survivait à la fermeture de l’éditeur.

La persistance, plateforme par plateforme

La charge s’assurait de survivre au redémarrage sur chaque système. Sur macOS, elle installait un fichier de démarrage au nom de style Apple ; sur Linux, elle ajoutait une entrée cron exécutée au démarrage ; sur Windows, elle tentait de créer une tâche planifiée nommée SysMon et retombait sur le dossier Démarrage en cas d’échec.

La reconnaissance était elle aussi automatisée. L’extension renvoyait au serveur de l’attaquant le hostname, le nom d’utilisateur, le système d’exploitation, le répertoire personnel, le répertoire de travail, l’adresse e-mail Git et l’adresse IP publique. Elle envoyait surtout les noms de jusqu’à 40 variables d’environnement qui ressemblaient à des clés, des jetons, des mots de passe ou des identifiants AWS et GCP. Les valeurs restaient sur la machine, mais la liste donnait à l’opérateur un inventaire des postes à compromettre en priorité.

Une bizarrerie a limité l’impact sur macOS. La clé plantée ne fonctionnait que si le service SSH de la machine était actif, et l’étape censée l’activer échouait souvent : le script interrogeait le système sur l’état du Remote Login sans droits administrateur, recevait un message d’erreur, puis sautait l’activation. Hall prévient que ce défaut n’est pas une protection — sur un Mac où le Remote Login est déjà actif, ou activé plus tard, le backdoor redevient fonctionnel.

Une supply chain qui échappe aux contrôles classiques

L’incident a relancé un débat de fond. Ax Sharma, responsable de la recherche chez Manifold Security, a contesté les premières descriptions qui parlaient d’usurpation de l’éditeur : « il n’y avait pas d’usurpation à repérer », a-t-il noté. « C’était l’extension officielle Claude Code dans le propre marketplace de Cursor, et une liste empoisonnée a poussé un backdoor SSH à jusqu’à 5 000 utilisateurs. » La vérification du nom d’éditeur, ajoute-t-il, n’aide pas quand l’éditeur est authentique ; ce qui aide, c’est d’observer le comportement.

La remarque pointe le coeur du problème. Les extensions d’IA pour éditeurs sont installées et mises à jour par des agents et des mécanismes automatiques, pas par des humains qui relisent chaque listing. Une extension de codage qui plante une clé SSH aurait dû être détectée « en quelques secondes », selon Sharma — mais aucun contrôle n’observait ce comportement au moment de l’installation.

Cursor a réagi en retirant la version malveillante, en fermant son marketplace par précaution, en auditant les accès, en constatant qu’aucune autre extension n’avait été falsifiée, puis en reconstruisant le marketplace après rotation des clés. L’entreprise précise que la version malveillante « n’a pas été développée par Anthropic » et qu’elle contactera directement les utilisateurs concernés.

Ce qu’il faut faire maintenant

La désinstallation de l’extension ne suffit pas : la charge utile dépose des scripts autonomes qui continuent de tourner. Les recommandations convergent sur une séquence de vérification puis de remédiation. Pour chercher la clé plantée, une seule commande suffit :

bash
grep -i svc-telemetry ~/.ssh/authorized_keys
  • Chercher la clé svc-telemetry. Inspectez le fichier authorized_keys de chaque poste concerné pour y trouver l’entrée svc-telemetry.
  • Inspecter les journaux SSH. Recherchez des connexions depuis localhost utilisant la clé svc-telemetry pour déterminer si l’opérateur s’est connecté.
  • Isoler, reconstruire, pivoter. Cursor conseille d’isoler les machines concernées, d’envisager une reconstruction, et de faire pivoter depuis un système de confiance les identifiants et sessions que le poste pouvait atteindre.
  • Observer le comportement. Ajoutez une détection qui alerte lorsqu’une extension de codage modifie authorized_keys ou ouvre un tunnel sortant — le signal aurait arrêté l’incident en secondes.

La collecte de données limitée ne garantit pas que l’attaquant n’a pas, plus tard, exploité le tunnel pour accéder à des secrets. Le nettoyage doit donc être traité comme un incident, pas comme une désinstallation.

Verdict

L’incident n’invalide pas les outils de codage par IA ; il invalide l’idée qu’un marketplace tiers peut être consommé sans observabilité. Si vos équipes utilisent des extensions d’IA dans Cursor ou tout éditeur adossé à Open VSX, auditez immédiatement les machines, recherchez la clé svc-telemetry, et traitez toute présence comme une compromission à reconstruire. Si vous exploitez un parc d’agents de codage, ajoutez une règle qui surveille les modifications de authorized_keys et les tunnels sortants — car l’éditeur, désormais, installe plus vite que l’humain ne relit.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

Les CVE de Python triplent en un an et PyPI retire 60 % de malware en plus

Seth Larson, le Security Developer-in-Residence de la Python Software Foundation, chiffre la charge de sécurité de l’écosystème : les CVE de Python et de pip ont triplé en un an et PyPI retire 60 % de malware en plus. Les équipes devops doivent verrouiller leur chaîne de dépendances, car ce volume de signal ne va pas retomber.

Argo CD 3.6 bascule l’observabilité des déploiements GitOps dans le noyau du projet

Sortie le 3 novembre 2026, Argo CD 3.6 apporte des métriques de synchronisation progressive aux ApplicationSets, durcit le TLS de Dex et remplace des scripts Lua maison par des health checks natifs. Pour un opérateur, c’est moins de code de colle à maintenir et une signature SLSA de niveau 3 sur chaque artefact.

← Retour au fil

Tapez au moins deux caractères.

↑ ↓ naviguer ↵ ouvrir esc fermer