TL;DR Si usas la extensión de Claude Code en Cursor o en otro editor que instala desde Open VSX, ejecuta
grep svc-telemetry ~/.ssh/authorized_keys. Si devuelve una línea, tu máquina instaló la 2.1.313 troyanizada: ejecuta el script de limpieza de Cursor y rota tus credenciales desde otro ordenador. Que hoy veas la 2.1.314 no prueba nada.
La versión 2.1.313 de anthropic.claude-code, publicada el 29 de octubre, traía un cargador malicioso dentro de su extension.js. Basta con que el editor cargue la extensión, sin escribir ningún prompt. Añade una clave SSH del atacante a tu authorized_keys, instala un arranque automático propio y envía datos de tu máquina a un servidor externo. Ese arranque vive fuera de la carpeta de la extensión, así que actualizar a la 2.1.314, o desinstalarla, no lo borra.
No la publicó Anthropic: el paquete reempaquetaba la extensión oficial bajo el nombre legítimo del publisher, y cómo llegó al registro aún no se ha aclarado.
Quién pudo recibirla
Estuvo disponible unas once horas, de 10:27 a 21:35 hora peninsular del 29 de octubre (de 2:27 a 13:35 PT). Según el canal por el que instalas la extensión:
| Dónde instalas la extensión | ¿Recibió la 2.1.313? |
|---|---|
| Cursor (su marketplace replica Open VSX) | Sí. Cursor calcula como máximo 5.000 usuarios |
| VSCodium, Windsurf, Gitpod y otros editores con Open VSX | Sí, si actualizaron en esa ventana |
| VS Code con el marketplace de Microsoft | Sin pruebas de que la sirviera; hoy lista la 2.1.312 y salta a la 2.1.314 |
La CLI (claude en la terminal) |
No: la CLI nunca tuvo una 2.1.313, el changelog salta de la 2.1.312 a la 2.1.314 |
La extensión se actualiza sola, así que lo que veas hoy en la lista de extensiones no sirve de prueba. Lo que importa es lo que el payload dejó en disco.
Qué deja en tu máquina
Analizado por StepSecurity y Cursor en los paquetes de macOS (Apple Silicon) y Windows x64; el código también trae una rama para Linux:
| Sistema | Qué deja |
|---|---|
| Todos | Una clave ssh-ed25519 ... svc-telemetry al final de ~/.ssh/authorized_keys, y una clave privada en $TMPDIR/.stk_ seguido de 10 caracteres hexadecimales |
| macOS | ~/.config/.smt, ~/.config/.smtk y el LaunchAgent ~/Library/LaunchAgents/com.apple.sysmond.plist, con un nombre que imita uno de Apple |
| Windows | %USERPROFILE%\.config\smt.cmd, la tarea programada SysMon o, si no puede crearla, sysmon.cmd en la carpeta Inicio |
| Linux | Una línea @reboot en tu crontab que ejecuta ~/.config/.smt |
Además intenta activar el servidor SSH local y abrir un túnel inverso hacia 134.209.82.225, reintentando cada 60 segundos. Activar el SSH local necesita permisos de administrador, que la extensión no tiene en la mayoría de los Mac y PC, así que en esos equipos el túnel falla. La clave, el arranque automático y el envío de datos funcionan igual. El servidor del atacante ya está fuera de línea.
Compruébalo en un minuto
En macOS o Linux, copia este bloque en una terminal. Cada línea busca una de las huellas de la tabla y no imprime nada si no la encuentra:
ls -d ~/.*/extensions/anthropic.claude-code-2.1.313-* 2>/dev/null
grep -lF svc-telemetry ~/.*/extensions/anthropic.claude-code-*/extension.js 2>/dev/null
grep -nF svc-telemetry ~/.ssh/authorized_keys 2>/dev/null
ls ~/.config/.smt ~/.config/.smtk ~/Library/LaunchAgents/com.apple.sysmond.plist "${TMPDIR:-/tmp}"/.stk_* 2>/dev/null
crontab -l 2>/dev/null | grep -F .smt
pgrep -fl '\.stk_|\.config/\.smt'
En una máquina limpia no sale nada. Esta es la salida en un home de prueba con las huellas recreadas como ficheros vacíos y una clave de ejemplo, ejecutado en Linux:
/Users/dev/.cursor/extensions/anthropic.claude-code-2.1.313-darwin-arm64
/Users/dev/.cursor/extensions/anthropic.claude-code-2.1.313-darwin-arm64/extension.js
1:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEXAMPLEonlyEXAMPLEonlyEXAMPLEonlyEXAMPLE dev@laptopssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDdvylCEJ/k2TpezcTfedrkHyFSK9IZ3vmP6vhY4Ss0P svc-telemetry
/Users/dev/.config/.smt
/Users/dev/.config/.smtk
/Users/dev/Library/LaunchAgents/com.apple.sysmond.plist
/var/folders/x7/T/.stk_3f9a1c07be
Fíjate en la tercera línea. El payload añade su clave sin un salto de línea delante, así que puede quedar pegada a tu última clave legítima en la misma línea. Si la limpias a mano, borra solo el tramo que termina en svc-telemetry, no la línea entera.
En Windows, la comprobación de Cursor en PowerShell:
$files = "$HOME\.ssh\authorized_keys", "C:\ProgramData\ssh\administrators_authorized_keys" | Where-Object { Test-Path $_ }
if ($files -and (Select-String svc-telemetry $files)) { "svc-telemetry key found" } else { "No key found; machine not impacted" }
Si aparece algo
1. Ejecuta el script de limpieza de tu sistema
Cursor publica remediate-macos.sh y remediate-windows.ps1. Quitan las carpetas de la extensión infectada (las busca por contenido, no por versión), el arranque automático, los ficheros, los procesos del túnel y la clave, y terminan con error si algo sigue ahí.
# macOS: como tu usuario, no con sudo
bash remediate-macos.sh
# Windows: cierra antes todos los editores; PowerShell como administrador
powershell -ExecutionPolicy Bypass -File .\remediate-windows.ps1
En macOS, si al terminar imprime note: something listens on localhost:22, tenías el SSH local activo (por ejemplo, Remote Login), y el túnel sí pudo exponer tu máquina. En Linux no hay script: borra la línea del crontab con crontab -e, los ficheros de la tabla y el tramo de la clave, y mata los procesos que listó pgrep.
2. Rota tus credenciales desde otro ordenador
El payload envió los nombres de tus variables de entorno que contienen KEY, TOKEN, SECRET, PASS, AWS o GCP, tu email de git y tu IP pública. No los valores, pero sí el mapa de qué buscar. Rota los tokens de GitHub, CI, nube, registros de paquetes y claves SSH que se usan desde esa máquina, desde un equipo que sepas limpio. Si el túnel llegó a conectarse, StepSecurity recomienda reinstalar el equipo.
3. Vuelve a comprobar
Vuelve a ejecutar el bloque de comprobación: tiene que terminar sin una sola línea. Si usas la extensión en VS Code, el tip del panel nativo explica en qué se diferencia de la CLI que tienes en la terminal, que no se vio afectada.
Fuentes: Aviso de seguridad de Cursor · Análisis de StepSecurity
Documentación oficial: Usar Claude Code en VS Code