Offre Durée limitée : -10% sur tout le site* avec le code WELCOME10

Extension Claude Code pour VS Code piégée : une backdoor SSH a visé 5 000 développeurs

Publié le 30 octobre 2026 10 min de lecture 9 sections

Ce qui s'est passé le 29 octobre 2026

Le 29 octobre 2026 vers 09 h 27 UTC, une version piégée de l'extension Claude Code (un plugin d'assistance au développement) pour VS Code a été publiée sur le registre Open VSX et synchronisée automatiquement vers le Cursor Marketplace. Le package malveillant portait l'identifiant anthropic.claude-code@2.1.313 et pesait environ 3,7 Mo, soit environ 7 Ko de plus que le build légitime 2.1.312 publié deux jours plus tôt. L'extension piégée est restée disponible au téléchargement pendant environ 11 heures, jusqu'à sa suppression le 30 octobre vers 20 h 35 UTC (source : StepSecurity). Anthropic a confirmé que ses canaux de distribution officiels n'avaient pas été compromis : un acteur tiers a republié le plugin via un accès non autorisé au registre.

Jusqu'à 5 000 utilisateurs de Cursor ont pu installer cette version. Si vous êtes administrateur d'un VPS Linux ou d'un serveur dédié et que vous utilisez VS Code Remote-SSH ou Cursor pour administrer vos machines, votre poste desktop est potentiellement concerné : la backdoor s'exécute sur le poste de développement, pas sur le serveur distant, mais les clés SSH stockées dans vos répertoires locaux donnent un accès shell direct à tous vos serveurs.

Mécanisme de la backdoor

La version 2.1.313 embarquait trois composants malveillants qui s'activaient dès l'installation du plugin, sans action supplémentaire de l'utilisateur. Le code malveillant s'exécutait en Node.js pur, sans utiliser les API de VS Code, ce qui le rendait difficile à détecter par les mécanismes de sandbox habituels des plugins et extensions.

ComposantRôle
Clé SSH svc-telemetryUne clé publique SSH est ajoutée dans le fichier ~/.ssh/authorized_keys avec le commentaire svc-telemetry. L'attaquant peut ensuite obtenir un accès shell au poste compromis sans mot de passe, sous le nom d'utilisateur courant.
Tunnel inverse SSHUn tunnel SSH inverse (ssh -N -R '*:0:localhost:22') est établi vers le serveur de commande et contrôle (C2) à l'adresse 134.209.82.225:22. Ce tunnel permet à l'attaquant d'accéder au poste même derrière un NAT ou un pare-feu, sans port entrant ouvert.
Beacon HTTP et exfiltrationUn beacon envoie les métadonnées du poste (nom d'hôte, nom d'utilisateur, système d'exploitation) vers l'URL http://134.209.82.225:8099/beacon en HTTP non chiffré. Le script collecte également les noms des variables d'environnement correspondant aux motifs KEY, TOKEN, SECRET, PASS, AWS et GCP, révélant quels credentials sont présents sur le poste.

Le malware installe aussi un mécanisme de persistance adapté au système d'exploitation :

SystèmeMécanisme de persistanceFichiers déposés
macOSLaunchAgent com.apple.sysmond.plist~/.config/.smt, ~/.config/.smtk, $TMPDIR/.stk_<hex>
Linux (Ubuntu, Debian, etc.)Entrée cron @reboot~/.config/.smt, ~/.config/.smtk
WindowsTâche planifiée SysMon (SYSTEM, au démarrage) et script Startup\sysmon.cmd%USERPROFILE%\.config\smt.cmd, %TEMP%\.stk_<hex>

Cette persistance survit à la désinstallation du plugin : supprimer Claude Code de VS Code ou Cursor ne suffit pas à nettoyer le poste. Il faut supprimer manuellement les fichiers de persistance, la clé SSH et redémarrer les services concernés.

Le risque pour les administrateurs de serveurs

L'extension VS Code Remote-SSH est l'un des outils les plus utilisés pour administrer un serveur virtuel ou un serveur dédié depuis un poste desktop. Les administrateurs système qui gèrent des VPS Linux (Ubuntu, Debian ou autre distribution Unix), des VPS Windows ou des serveurs de virtualisation depuis VS Code ou Cursor sont les premiers concernés. Si votre poste a installé la version 2.1.313, l'attaquant disposait potentiellement de vos clés privées SSH et pouvait :

  • Se connecter en shell à tous les serveurs listés dans votre fichier ~/.ssh/config (y compris les alias SSH) ou accessibles via vos clés ;
  • Exécuter des commandes avec sudo sous votre nom d'utilisateur admin (souvent root sur un VPS) ;
  • Déposer des scripts malveillants, des web shells PHP ou des cryptomineurs sur vos serveurs web ;
  • Exfiltrer les fichiers de configuration, les bases de données et les secrets stockés sur le serveur (tokens API, credentials SMTP, mots de passe SQL).

La compromission d'un seul poste de développement desktop peut entraîner la compromission de toute votre infrastructure serveur. Que vous soyez hébergeur, administrateur de serveurs de jeu ou admin d'une plateforme web, la sécurité de la chaîne d'approvisionnement logicielle (supply chain) est un enjeu critique.

Quels services vérifier sur vos serveurs

Si votre poste desktop est compromis, partez du principe que l'attaquant a pu se connecter à chaque serveur accessible depuis vos clés SSH. Voici les services et répertoires à vérifier sur chaque serveur virtuel ou dédié concerné.

ServiceQue vérifier
Serveur web (Apache, Nginx)Cherchez des fichiers PHP suspects dans les répertoires web (/var/www) : web shells contenant eval, system ou base64_decode. Vérifiez les virtual hosts et les alias de configuration.
CMS (WordPress, etc.)Inspectez les plugins et thèmes récemment modifiés. Comparez les fichiers avec une installation propre. Cherchez du code PHP obfusqué dans les répertoires wp-content/plugins et wp-content/uploads.
Bases de données (MySQL, PostgreSQL, SQL Server)Changez tous les mots de passe des comptes de base de données. Vérifiez les noms d'utilisateur et les privilèges : l'attaquant a pu créer des comptes admin avec accès complet.
DNS et noms de domaineVérifiez que vos enregistrements DNS n'ont pas été modifiés (redirections vers des URL malveillantes). Contrôlez l'accès à votre registrar et à vos zones DNS.
FTP / SFTPDésactivez les comptes FTP inutilisés et changez les mots de passe des comptes actifs. Si votre serveur web utilise ProFTPD ou vsftpd, vérifiez les fichiers de configuration dans /etc.
Messagerie (SMTP)Vérifiez que votre relais SMTP (Postfix, Exim) n'a pas été reconfiguré pour envoyer du spam. Contrôlez les files d'attente avec mailq.
Scripts et tâches automatiséesParcourez les crontabs de chaque nom d'utilisateur avec sudo crontab -l -u <user>. Vérifiez les scripts dans /etc/cron.d, /etc/cron.daily et les timers systemd. Un script Python ou shell inconnu dans ces répertoires est un indicateur de compromission.
Sauvegardes (backup)Vérifiez l'intégrité de vos sauvegardes. Si un backup automatique a capturé l'état compromis du serveur, ne le restaurez pas en l'état. Restaurez une sauvegarde antérieure à la date d'exposition.

Vérifier si vous êtes concerné

Connectez-vous à votre poste de développement desktop (celui sur lequel VS Code ou Cursor est installé) et exécutez les vérifications suivantes. Les commandes ci-dessous fonctionnent sur tout système Unix (Ubuntu, Debian et autres distributions Linux) et sur macOS.

1. Vérifier la clé SSH malveillante

Cherchez la clé svc-telemetry dans votre fichier authorized_keys :

grep "svc-telemetry" ~/.ssh/authorized_keys 2>/dev/null

Si cette commande renvoie une ligne, votre poste a été compromis.

2. Vérifier les fichiers de persistance

Cherchez les fichiers déposés par le malware dans vos répertoires de configuration :

# Linux et macOS
ls -la ~/.config/.smt 2>/dev/null
ls -la ~/.config/.smtk 2>/dev/null
ls -la $TMPDIR/.stk_* 2>/dev/null

# macOS : LaunchAgent
ls ~/Library/LaunchAgents/com.apple.sysmond.plist 2>/dev/null

# Linux : crontab
crontab -l 2>/dev/null | grep -iE "smt|stk"

3. Vérifier sous Windows avec PowerShell

Sur un poste Windows, ouvrez PowerShell en tant qu'administrateur et exécutez :

# Chercher la clé malveillante
Select-String -Path "$env:USERPROFILE\.ssh\authorized_keys" -Pattern "svc-telemetry"

# Chercher la tâche planifiée SysMon
Get-ScheduledTask | Where-Object { $_.TaskName -eq "SysMon" }

# Chercher le script de démarrage
Test-Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"

# Chercher les fichiers de configuration du malware
Test-Path "$env:USERPROFILE\.config\smt.cmd"
Test-Path "$env:TEMP\.stk_*"

4. Vérifier les connexions réseau vers le C2

Recherchez des connexions actives vers l'adresse IP du serveur de commande et contrôle :

# Linux
ss -tnp | grep "134.209.82.225"

# macOS
lsof -i @134.209.82.225

# Windows (PowerShell)
Get-NetTCPConnection | Where-Object { $_.RemoteAddress -eq "134.209.82.225" }

Si l'une de ces vérifications est positive, passez immédiatement aux étapes de nettoyage ci-dessous. Vérifiez ensuite chacun de vos serveurs accessibles depuis ce poste en suivant nos tutoriels sécuriser SSH sur VPS Linux et auditer l'activité d'un serveur avec auditd.

Nettoyer un poste compromis

Si les vérifications précédentes révèlent une compromission, procédez dans cet ordre.

1. Supprimer la clé SSH malveillante

Sur Linux, macOS ou dans un shell Unix :

sed -i.bak '/svc-telemetry/d' ~/.ssh/authorized_keys

Sous Windows, dans PowerShell :

$akFile = "$env:USERPROFILE\.ssh\authorized_keys"
(Get-Content $akFile) | Where-Object { $_ -notmatch "svc-telemetry" } | Set-Content $akFile

Vérifiez que la ligne a bien disparu :

grep "svc-telemetry" ~/.ssh/authorized_keys

2. Tuer le tunnel inverse et supprimer la persistance

Sur Linux et macOS :

# Tuer les processus SSH vers le C2
pkill -f "134.209.82.225"

# Supprimer les fichiers de persistance
rm -f ~/.config/.smt ~/.config/.smtk ~/.config/smt.cmd
rm -f $TMPDIR/.stk_* ~/.ssh/.stk_*

# Linux : nettoyer le cron
crontab -l 2>/dev/null | grep -vE "smt|stk" | crontab -

# macOS : supprimer le LaunchAgent
launchctl unload ~/Library/LaunchAgents/com.apple.sysmond.plist 2>/dev/null
rm -f ~/Library/LaunchAgents/com.apple.sysmond.plist

Sous Windows, dans PowerShell (en tant qu'administrateur) :

# Supprimer la tâche planifiée
Unregister-ScheduledTask -TaskName "SysMon" -Confirm:$false

# Supprimer le script de démarrage
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd" -Force

# Supprimer les fichiers de configuration
Remove-Item "$env:USERPROFILE\.config\smt.cmd" -Force -ErrorAction SilentlyContinue
Remove-Item "$env:TEMP\.stk_*" -Force -ErrorAction SilentlyContinue

Après la suppression, redémarrez votre poste pour vérifier que la persistance ne se réactive pas.

3. Migrer vos clés SSH

Partez du principe que vos clés SSH privées sont compromises. La migration vers de nouvelles clés est indispensable. Générez une nouvelle paire et déployez la clé publique sur chacun de vos serveurs virtuels :

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C "votre-email"

Consultez notre tutoriel configurer une clé SSH sur VPS Linux sans perdre l'accès pour la procédure complète de migration. Supprimez l'ancienne clé de tous les fichiers authorized_keys de vos VPS et serveurs dédiés.

4. Changer tous les credentials accessibles

Si le tunnel inverse a été actif, l'attaquant a pu accéder à tout ce qui était accessible depuis votre poste. Renouvelez :

  • Les mots de passe des bases de données (MySQL, PostgreSQL, SQL Server, Redis) ;
  • Les tokens API (GitHub, GitLab, services cloud comme AWS et GCP) ;
  • Les credentials FTP et SMTP de vos serveurs web ;
  • Les jetons de session et cookies admin de vos applications et CMS ;
  • Les tokens CI/CD et les secrets stockés dans les variables d'environnement.

Vérifiez aussi vos sauvegardes : si un backup automatique a capturé l'état compromis d'un serveur, ne le restaurez pas en l'état.

Leçons de sécurité supply chain pour les administrateurs

Cet incident illustre un vecteur d'attaque en pleine expansion : la compromission de la chaîne d'approvisionnement logicielle. Les plugins d'éditeurs de code, les packages npm, les modules PyPI (Python) et les images Docker sont autant de points d'entrée potentiels. Voici les bonnes pratiques pour limiter le risque :

  • Installer les extensions depuis les canaux officiels. Pour Claude Code, le canal officiel est le VS Code Marketplace. Les registres tiers comme Open VSX sont des miroirs sur lesquels n'importe qui peut publier un package portant le même nom.
  • Vérifier l'éditeur avant installation. VS Code affiche l'éditeur vérifié (badge bleu) sur le Marketplace officiel. Un plugin sans badge ou avec un éditeur différent de celui attendu doit être traité avec méfiance.
  • Épingler les versions des extensions. Désactivez les mises à jour automatiques pour les plugins critiques. Préférez une mise à jour manuelle après vérification du changelog et de l'URL de publication.
  • Isoler le poste d'administration. Si possible, administrez vos serveurs depuis un poste desktop dédié qui n'installe que le strict minimum. Utilisez un agent SSH avec confirmation pour chaque connexion plutôt que des clés sans passphrase.
  • Auditer régulièrement authorized_keys. Sur chaque VPS et serveur dédié, vérifiez périodiquement le contenu de ~/.ssh/authorized_keys pour chaque nom d'utilisateur. Automatisez cette vérification avec un script shell exécuté par cron ou un outil de monitoring (sécuriser un VPS Ubuntu).
  • Activer les mises à jour de sécurité automatiques sur vos serveurs Linux (Ubuntu, Debian) pour que les correctifs critiques soient appliqués sans délai (automatiser les mises à jour de sécurité sur VPS Ubuntu).

Chronologie de l'incident

Date et heure (UTC)Événement
27 octobre, 20 h 26Publication de la version légitime 2.1.312 sur Open VSX
29 octobre, ~09 h 27Publication de la version piégée 2.1.313 sur Open VSX, synchronisation vers le Cursor Marketplace
30 octobre, ~01 h 07Publication de la version saine 2.1.314 par Anthropic
30 octobre, ~20 h 35Retrait de la version 2.1.313 des registres

Le hash SHA-256 du fichier malveillant est ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15. Ce hash permet de vérifier si une copie locale de l'extension correspond au build compromis.

Questions fréquentes

FAQ

L'extension Claude Code officielle sur le VS Code Marketplace est-elle concernée ?

Non. Anthropic a confirmé que ses canaux de distribution officiels n'ont pas été compromis. Seule la version 2.1.313 publiée sur le registre Open VSX (et synchronisée vers le Cursor Marketplace) contenait le code malveillant. Si vous avez installé Claude Code exclusivement depuis le VS Code Marketplace officiel de Microsoft, vous n'êtes pas concerné.

Comment savoir si mon poste a été touché ?

Exécutez la commande grep "svc-telemetry" ~/.ssh/authorized_keys. Si elle renvoie une ligne, votre poste a été compromis. Vérifiez aussi la présence des fichiers ~/.config/.smt et ~/.ssh/.stk_* et recherchez des connexions réseau vers l'adresse 134.209.82.225.

Mes serveurs distants sont-ils compromis si mon poste l'est ?

Potentiellement oui. Si le tunnel inverse SSH a été actif, l'attaquant a pu accéder à votre poste et utiliser vos clés SSH pour se connecter à tous les serveurs configurés dans votre fichier ~/.ssh/config. Vérifiez les fichiers authorized_keys et les journaux d'authentification (auth.log) sur chacun de vos serveurs.

Suffit-il de désinstaller l'extension pour être protégé ?

Non. Le malware installe un mécanisme de persistance indépendant de l'extension (LaunchAgent sur macOS, tâche planifiée sur Windows, cron sur Linux). Vous devez supprimer manuellement la clé SSH svc-telemetry, les fichiers de persistance et renouveler vos clés SSH.

Comment éviter ce type d'attaque à l'avenir ?

Installez les extensions uniquement depuis les canaux officiels de l'éditeur (VS Code Marketplace pour Claude Code). Vérifiez le badge d'éditeur vérifié. Désactivez les mises à jour automatiques pour les extensions sensibles. Utilisez un agent SSH avec confirmation plutôt que des clés sans passphrase. Auditez régulièrement le contenu des fichiers authorized_keys sur vos serveurs.

L'attaque vise-t-elle spécifiquement les administrateurs de serveurs ?

L'attaque vise tous les utilisateurs de l'extension, mais les administrateurs de VPS et de serveurs dédiés sont les plus exposés : leurs postes contiennent des clés SSH donnant un accès root à des machines en production. Un développeur qui n'administre aucun serveur en SSH est aussi touché, mais le périmètre de la compromission est plus limité.

Dois-je vérifier mes serveurs virtuels gérés via Plesk ou un autre panneau d'administration ?

Oui. Si votre poste desktop compromis disposait d'un accès SSH à un serveur géré par un panneau comme Plesk, l'attaquant a pu accéder aux configurations des sites web, des comptes FTP, des zones DNS et des bases de données depuis l'interface d'administration. Changez le mot de passe admin du panneau, auditez les comptes créés récemment et vérifiez les répertoires web à la recherche de scripts inconnus.

Faut-il réinstaller le système ou le nettoyage décrit dans ce tutoriel suffit-il ?

Si les seuls indicateurs trouvés sont la clé svc-telemetry, les fichiers .smt et le mécanisme de persistance (cron sous Linux, LaunchAgent sous macOS, tâche planifiée SysMon sous Windows), le nettoyage décrit dans cet article et la migration des clés SSH suffisent. En revanche, si vous découvrez des processus inconnus consommant du CPU ou de la RAM, des scripts shell ou Python non autorisés, ou des modifications de fichiers système, la réinstallation complète du système d'exploitation est recommandée.

Les packages Python (pip) ou npm installés sur mon poste sont-ils compromis ?

L'extension piégée ne modifiait pas directement les packages Python ou npm. Cependant, si l'attaquant a obtenu un accès shell via le tunnel inverse, il a pu installer des packages malveillants ou modifier des scripts existants. Vérifiez l'intégrité de vos projets avec git diff et contrôlez les dépendances installées récemment avec pip list et npm ls.