
Scanner en lecture seule pour l'extension Claude Code 2.1.313 porte dérobée (place de marché Cursor, oct. 2026) : clé SSH, persistance, tunnel inverse. macOS + Linux.
Scanner en lecture seule et règles de détection pour l'extension [email protected] trojanisée.
[!WARNING] La place de marché Cursor a servi une build non publiée par Anthropic le 2026-10-29, 09:27–20:35 UTC. Elle installe une clé SSH et un mécanisme de persistance, puis ouvre un tunnel inverse vers
134.209.82[.]225. La mise à jour vers 2.1.314 supprime l'extension, mais pas ce qu'elle a installé.
Outil communautaire indépendant par HappyHackingSpace. Non affilié à Anthropic ni à Cursor.
Sommaire : Démarrage rapide · Ce qu'il vérifie · Règles de détection · En cas de détection · Bloquer le C2 · IOCs · Références
git clone https://github.com/happyhackingspace/claude-code-backdoor-check.git
cd claude-code-backdoor-check
bash check.sh # fast scan
bash check.sh --deep # + sshd log analysis (slower on macOS)
0 propre · 1 indicateurs trouvés · 2 erreur d'utilisation.| Sortie | Code | Signification |
|---|---|---|
✖ COMPROMISED | 1 | Artefact actif trouvé : clé, fichier déposé, persistance, tunnel, clé d'hôte C2, ou la version compromise |
! EXPOSED | 1 | 2.1.313 a été installée à un moment donné, mais rien d'actif n'a été trouvé |
✔ CLEAN | 0 | Aucun indicateur |
| # | Zone | Recherche |
|---|---|---|
| 1 | Extensions | 2.1.313 dans les répertoires Cursor / VS Code / Windsurf / VSCodium, le hash du extension.js compromis, les chaînes du loader |
| 2 | Historique d'installation | 2.1.313 dans extensions.json, .obsolete, le cache VSIX, les journaux de l'éditeur |
| 3 | Clés SSH | clé svc-telemetry dans authorized_keys |
| 4 | Fichiers déposés | ~/.config/.smt, .smtk, fichiers temporaires .stk_* |
| 5 | Persistance | macOS : LaunchAgents/Daemons · Linux : cron, systemd, autostart · les deux : fichiers rc du shell |
| 6 | Processus | le tunnel inverse (ssh -R *:0:localhost:22 tunnel@…) et le lanceur .smt |
| 7 | Réseau | connexions C2 actives ; le C2 dans known_hosts |
| 8 | Serveur SSH | écoute sur :22 ; avec --deep, connexions sshd via la clé de l'attaquant ou 127.0.0.1 |
| 9 | Exposition | noms des variables d'environnement d'identifiants et fichiers d'identifiants à renouveler (les valeurs ne sont jamais lues) |
[!NOTE]
com.apple.sysmondest aussi un véritable démon système Apple. Seule la copie dans le domaine utilisateur (~/Library/LaunchAgents) est malveillante.
Pour les pipelines EDR/SIEM et la chasse à l'échelle du parc. Contrairement au reste de ce README, les fichiers de règles contiennent le C2 non désarmé, car ils doivent pouvoir le détecter.
rules/sigma/)| Règle | Source de logs | Niveau |
|---|---|---|
| Tunnel SSH inverse vers le C2 | process_creation | critique |
| Connexion au C2 | network_connection | critique |
| Script / clé de tunnel déposé | file_event | élevé |
Faux LaunchAgent com.apple.sysmond | file_event · macOS | élevé |
| Remote Login activé depuis l'arborescence de processus de l'éditeur | process_creation · macOS | élevé |
cron @reboot / exécution de .smt | process_creation · Linux | élevé |
Tâche planifiée SysMon / installation d'OpenSSH depuis l'éditeur | process_creation · Windows | élevé |
pip install sigma-cli
sigma plugin install splunk # or elasticsearch, microsoft365defender, …
sigma convert -t splunk --without-pipeline rules/sigma/
rules/yara/claude_code_backdoor.yar)| Règle | Correspondances |
|---|---|
HHS_ClaudeCode_Backdoor_Loader | extension.js trojanisé (hash ou chaînes du loader) |
HHS_ClaudeCode_Backdoor_TunnelScript | .smt / smt.cmd déposés |
HHS_ClaudeCode_Backdoor_Persistence | LaunchAgent, cron @reboot, tâche SysMon pointant vers le script |
HHS_ClaudeCode_Backdoor_AuthorizedKey | authorized_keys contenant la clé svc-telemetry |
yara -r -s rules/yara/claude_code_backdoor.yar \
~/.cursor/extensions ~/.vscode/extensions ~/.config ~/.ssh ~/Library/LaunchAgents
[!TIP] Les règles Sigma couvrent également Windows (tâche planifiée, installation d'OpenSSH), ce que
check.shne fait pas.
[!CAUTION] La persistance rouvre le tunnel environ toutes les 60 secondes. Confinez d'abord, puis nettoyez. Cursor fournit également des scripts de remédiation officiels : consultez son avis de sécurité.
1. Confinez. Mettez la machine hors ligne, ou bloquez le C2.
2. Préservez les preuves avant de supprimer quoi que ce soit :
mkdir -p ~/ioc-evidence && cd ~/ioc-evidence
bash /path/to/check.sh --deep --no-color > scan.txt
cp -p ~/.ssh/authorized_keys ~/.ssh/known_hosts ~/.config/.smt ~/.config/.smtk . 2>/dev/null
[!IMPORTANT]
.smtkest la clé de tunnel privée de l'attaquant. Gardez le dossier de preuves privé.
3. Nettoyage. Supprimez la persistance, tuez le tunnel, supprimez les artefacts :
C2="$(echo '134.209.82[.]225' | tr -d '[]')"
launchctl bootout gui/$(id -u)/com.apple.sysmond
rm -f ~/Library/LaunchAgents/com.apple.sysmond.plist
pkill -f "tunnel@$C2"; pkill -f 'autossh -M 0'; pkill -f '\.config/\.smt'
sed -i.bak '/svc-telemetry/d' ~/.ssh/authorized_keys
ssh-keygen -R "$C2"
rm -f ~/.config/.smt ~/.config/.smtk "$TMPDIR"/.stk_*
sudo systemsetup -setremotelogin off # if you don't use SSH
crontab -l | grep -vE '\.config/\.smt|tunnel@' | crontab -
# disable and remove any systemd/autostart entries check.sh reported
pkill -f "tunnel@$C2"; pkill -f 'autossh -M 0'; pkill -f '\.config/\.smt'
sed -i.bak '/svc-telemetry/d' ~/.ssh/authorized_keys
ssh-keygen -R "$C2"
rm -f ~/.config/.smt ~/.config/.smtk /tmp/.stk_* /var/tmp/.stk_*
sudo systemctl disable --now ssh # if you don't use SSH
4. Remplacez l'extension. Supprimez anthropic.claude-code-2.1.313* et installez ≥ 2.1.314.
5. Vérifiez. bash check.sh --deep doit se terminer avec le code 0.
6. Renouvelez les identifiants depuis une autre machine propre : clés SSH, jetons git, clés cloud et API, jetons de registre. Commencez par la liste sous [9/9].
7. Reconstruisez la machine si le C2 figure dans known_hosts ou si sshd a accepté la clé de l'attaquant.
Exécutez avec --deep. Renouvelez au moins les secrets listés sous [9/9], car leurs noms ont été transmis par beacon. Maintenez le C2 bloqué.
L'implant se connecte directement à l'IP, donc les filtres DNS (NextDNS, Pi-hole) ne le voient jamais. Bloquez-le au niveau du pare-feu :