
Escáner de solo lectura para la extensión Claude Code 2.1.313 con puerta trasera (marketplace de Cursor, oct. 2026): clave SSH, persistencia, túnel inverso. macOS + Linux.
Escáner de solo lectura y reglas de detección para la extensión troyanizada [email protected].
[!WARNING] El marketplace de Cursor sirvió una compilación no publicada por Anthropic el 2026-10-29, 09:27–20:35 UTC. Instala una clave SSH y persistencia, y luego abre un túnel inverso hacia
134.209.82[.]225. Actualizar a 2.1.314 elimina la extensión, no lo que esta instaló.
Herramienta comunitaria independiente de HappyHackingSpace. Sin afiliación con Anthropic ni Cursor.
Contenido: Inicio rápido · Qué comprueba · Reglas de detección · Si obtienes una detección · Bloquear el C2 · IOCs · Referencias
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 limpio · 1 indicadores encontrados · 2 error de uso.| Salida | Código de salida | Significado |
|---|---|---|
✖ COMPROMETIDO | 1 | Artefacto activo encontrado: clave, archivo depositado, persistencia, túnel, clave de host C2 o la compilación maliciosa |
! EXPUESTO | 1 | 2.1.313 estuvo instalado en algún momento, pero no se encontró nada activo |
✔ LIMPIO | 0 | Sin indicadores |
| # | Área | Busca |
|---|---|---|
| 1 | Extensiones | 2.1.313 en los directorios de Cursor / VS Code / Windsurf / VSCodium, el hash malicioso de extension.js, cadenas del cargador |
| 2 | Historial de instalación | 2.1.313 en extensions.json, .obsolete, la caché de VSIX, registros del editor |
| 3 | Claves SSH | clave svc-telemetry en authorized_keys |
| 4 | Archivos depositados | ~/.config/.smt, .smtk, archivos temporales .stk_* |
| 5 | Persistencia | macOS: LaunchAgents/Daemons · Linux: cron, systemd, autostart · ambos: archivos rc del shell |
| 6 | Procesos | el túnel inverso (ssh -R *:0:localhost:22 tunnel@…) y el ejecutor .smt |
| 7 | Red | conexiones C2 activas; el C2 en known_hosts |
| 8 | Servidor SSH | escucha en :22; con --deep, inicios de sesión sshd mediante la clave del atacante o 127.0.0.1 |
| 9 | Exposición | nombres de variables de entorno de credenciales y archivos de credenciales que rotar (los valores nunca se leen) |
[!NOTE]
com.apple.sysmondtambién es un daemon de sistema real de Apple. Solo la copia en el dominio de usuario (~/Library/LaunchAgents) es maliciosa.
Para pipelines de EDR/SIEM y búsqueda en toda la flota. A diferencia del resto de este README, los archivos de reglas contienen el C2 sin desofuscar, porque tienen que coincidir con él.
rules/sigma/)| Regla | Fuente de registro | Nivel |
|---|---|---|
| Túnel SSH inverso hacia C2 | process_creation | critical |
| Conexión hacia C2 | network_connection | critical |
| Script / clave de túnel depositado | file_event | high |
LaunchAgent falso com.apple.sysmond | file_event · macOS | high |
| Inicio de sesión remoto habilitado desde el árbol de procesos del editor | process_creation · macOS | high |
cron @reboot / ejecución de .smt | process_creation · Linux | high |
Tarea programada SysMon / instalación de OpenSSH desde el editor | process_creation · Windows | high |
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)| Regla | Coincidencias |
|---|---|
HHS_ClaudeCode_Backdoor_Loader | extension.js troyanizado (hash o cadenas del loader) |
HHS_ClaudeCode_Backdoor_TunnelScript | .smt / smt.cmd depositados |
HHS_ClaudeCode_Backdoor_Persistence | LaunchAgent, cron @reboot, tarea SysMon apuntando al script |
HHS_ClaudeCode_Backdoor_AuthorizedKey | authorized_keys con la clave svc-telemetry |
yara -r -s rules/yara/claude_code_backdoor.yar \
~/.cursor/extensions ~/.vscode/extensions ~/.config ~/.ssh ~/Library/LaunchAgents
[!TIP] Las reglas Sigma también cubren Windows (tarea programada, instalación de OpenSSH), algo que
check.shno hace.
[!CAUTION] La persistencia vuelve a abrir el túnel aproximadamente cada 60 segundos. Contén primero, luego limpia. Cursor también publica scripts oficiales de remediación: consulta su aviso de seguridad.
1. Contén. Desconecta la máquina de la red o bloquea el C2.
2. Preserva las evidencias antes de eliminar cualquier cosa:
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]
.smtkes la clave privada del túnel del atacante. Mantén la carpeta de evidencias privada.
3. Limpieza. Elimina la persistencia, mata el túnel, borra los artefactos:
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. Reemplaza la extensión. Elimina anthropic.claude-code-2.1.313* e instala ≥ 2.1.314.
5. Verifica. bash check.sh --deep debería salir con 0.
6. Rota las credenciales desde una máquina diferente y limpia: claves SSH, tokens de git, claves de la nube y de API, tokens de registro. Empieza por la lista bajo [9/9].
7. Reconstruye la máquina si el C2 está en known_hosts o si sshd aceptó la clave del atacante.
Ejecuta con --deep. Rota al menos los secretos listados bajo [9/9], porque sus nombres fueron beaconed. Mantén el C2 bloqueado.
El implante se conecta directamente a la IP, por lo que los filtros DNS (NextDNS, Pi-hole) nunca lo ven. Bloquéalo en el firewall: