La extensión Claude Code para VS Code 2.1.313 traía una puerta trasera SSH: revisión y limpieza en 5 minutos para Cursor / VSCodium

Según OpenSourceMalware y Phorion, la extensión Claude Code 2.1.313 publicada en Open VSX tenía un cargador de 66 líneas al inicio de extension.js. En cuanto la extensión se carga, añade una clave del atacante a ~/.ssh/authorized_keys, intenta activar SSH, abre un túnel inverso a 134.209.82.225 e instala persistencia. Esta guía da 5 pasos de revisión para macOS, Linux y Windows, además de conservación de pruebas, limpieza y rotación de credenciales.

8 分钟阅读
La extensión Claude Code para VS Code 2.1.313 traía una puerta trasera SSH: revisión y limpieza en 5 minutos para Cursor / VSCodium

En resumen: según los análisis del 30 de octubre de OpenSourceMalware y Phorion, la extensión Claude Code for VS Code publicada en Open VSX como anthropic.claude-code@2.1.313 contenía una puerta trasera. Deja en tu máquina una clave SSH del atacante, un túnel inverso a 134.209.82.225 y persistencia al arrancar. Según Phorion, Anthropic retiró la 2.1.313 de Open VSX, npm y VS Code Marketplace; según Sesame Disk, la versión actual en Open VSX es la 2.1.314.

Desinstalar la extensión no elimina la puerta trasera. Si usas Cursor, VSCodium, Windsurf u otro editor que instala extensiones desde Open VSX, y hoy instalaste o actualizaste automáticamente la extensión de Claude Code, sigue los 5 pasos de abajo.

Ejecutamos todos los comandos de revisión en una máquina Linux: el conjunto terminó en menos de 1 segundo con salida normal. No instalamos la versión maliciosa en ninguna máquina.

Qué pasó

Según OpenSourceMalware:

  • La versión maliciosa se identifica como anthropic.claude-code 2.1.313. Al desempaquetarla es igual a la versión normal y trae el binario oficial. Solo cambia extension.js: una función autoejecutable de 66 líneas va delante del código real de la extensión.
  • No hace falta iniciar una conversación con Claude: basta con que el editor cargue el módulo. El paquete no tiene scripts install ni postinstall; se activa en tiempo de ejecución.
  • Casi todas las excepciones se silencian, así que la extensión sigue funcionando sin señales visibles.

Según RuntimeWire, el investigador Adnan Khan (@adnanthekhan) fue el primero en señalarlo públicamente en X. Ver también la publicación de @mattjay en X.

Qué hace la puerta trasera

Según OpenSourceMalware y Phorion, el cargador:

  1. Añade una clave: crea ~/.ssh y agrega a ~/.ssh/authorized_keys una clave pública Ed25519 con el comentario svc-telemetry y la huella SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk. Quien tenga la clave privada correspondiente puede entrar como tú.
  2. Intenta activar SSH: en Linux con systemctl y alternativas; en macOS con sudo -n systemsetup -setremotelogin on; en Windows instalando e iniciando OpenSSH Server con PowerShell.
  3. Túnel inverso: escribe una segunda clave privada incrustada (comentario svc-telemetry-tun) en un archivo .stk_* del directorio temporal y se conecta como usuario tunnel a 134.209.82.225:22 con -R '*:0:localhost:22', reintentando cada 60 segundos y usando autossh si existe.
  4. Persistencia: en macOS escribe ~/.config/.smt, ~/.config/.smtk y ~/Library/LaunchAgents/com.apple.sysmond.plist (parece de Apple, pero no lo es); en Linux, los mismos dos archivos y una línea @reboot en crontab; en Windows, .config\smt.cmd, .config\smtk, una tarea programada SysMon o, si falla, sysmon.cmd en la carpeta Inicio.
  5. Baliza: a los 1,5 segundos envía por HTTP sin cifrar a 134.209.82.225:8099/beacon el nombre del equipo, usuario, sistema, arquitectura, directorios, correo de Git y hasta 40 nombres de variables de entorno con KEY/TOKEN/SECRET/PASS/AWS/GCP. Según ambos análisis, se envían los nombres, no los valores.

Según Phorion, hay un fallo en macOS: como usuario estándar, systemsetup -getremotelogin nunca devuelve Off, así que el script no activa el Inicio de sesión remoto. La clave y la persistencia se escriben igualmente, y la puerta trasera funciona en cuanto el Inicio de sesión remoto esté activo. Los usuarios de Mac también deben revisar.

Lo que aún no se sabe

  • Cómo se publicó la versión maliciosa: los informes públicos aún no lo han aclarado. Según OpenSourceMalware, la extensión de Open VSX pertenece a un empleado de Anthropic, pero si se comprometió su cuenta u otra parte del proceso de publicación, los informes públicos aún no lo han aclarado.
  • Si el VS Code Marketplace de Microsoft llegó a distribuir esta versión: los informes públicos aún no lo han aclarado. Según Sesame Disk, el historial público del Marketplace no muestra la 2.1.313; OpenSourceMalware abrió de todos modos un informe de amenaza por precaución.
  • Quién es el atacante y quién controla 134.209.82.225: los informes públicos aún no lo han aclarado.

Crear API Key y poner una clave nueva de Claude Code / Codex tras la revisión →

Paso 1: comprobar la versión y pasar a 2.1.314 o superior

Terminal en macOS / Linux:

bash
code   --list-extensions --show-versions | grep -i anthropic.claude-code
cursor --list-extensions --show-versions | grep -i anthropic.claude-code
codium --list-extensions --show-versions | grep -i anthropic.claude-code
ls -d ~/.vscode/extensions/anthropic.claude-code-* \
      ~/.cursor/extensions/anthropic.claude-code-* \
      ~/.vscode-oss/extensions/anthropic.claude-code-* \
      ~/.windsurf/extensions/anthropic.claude-code-* 2>/dev/null

Windows PowerShell:

powershell
Get-ChildItem "$env:USERPROFILE\.vscode\extensions","$env:USERPROFILE\.cursor\extensions","$env:USERPROFILE\.vscode-oss\extensions" -Filter "anthropic.claude-code-*" -ErrorAction SilentlyContinue | Select-Object Name

Si aparece anthropic.claude-code@2.1.313 o un directorio con 2.1.313 en el nombre, esa versión estuvo instalada. No te limites a borrarla: sigue los pasos 2 a 4 y luego el 5. Aunque no tengas la 2.1.313, fija la extensión en 2.1.314:

bash
code   --install-extension anthropic.claude-code@2.1.314 --force
cursor --install-extension anthropic.claude-code@2.1.314 --force
codium --install-extension anthropic.claude-code@2.1.314 --force
claude --version

La última línea muestra la versión de la CLI de Claude Code. Según Phorion, la 2.1.313 también se retiró de npm; si aparece, actualiza.

Paso 2: revisar authorized_keys por huella, no solo por comentario

bash
grep -n "svc-telemetry" ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys | grep "0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk"

La primera línea busca por comentario; la segunda y la tercera, por huella. Según Phorion, el malware solo comprueba si existe el comentario svc-telemetry, así que guíate por la huella: un comentario se cambia fácilmente. En un archivo de prueba pusimos una clave nuestra y la clave del atacante con el comentario cambiado a renamed: grep svc-telemetry no encontró nada, mientras que ssh-keygen -lf siguió mostrando la huella:

text
256 SHA256:fcpk2HR713pxnLll4jbnb7Bu9k5gvtf8n7UREAQe1dI me@laptop (ED25519)
256 SHA256:0Z6R+DF64Do2nwQic8a7kkfDLNNk4IiK+2U2Rci4htk renamed (ED25519)

Además de esa huella, deberías reconocer cada línea que muestra ssh-keygen -lf. Cualquier entrada desconocida es sospechosa. En Windows:

powershell
Select-String -Path "$env:USERPROFILE\.ssh\authorized_keys" -Pattern "svc-telemetry"
ssh-keygen -lf "$env:USERPROFILE\.ssh\authorized_keys"

Paso 3: buscar conexiones a 134.209.82.225 y procesos de túnel

bash
# macOS
lsof -nP -i @134.209.82.225
pgrep -fl 'localhost:22|\.smtk|\.stk_'
# Linux
ss -tnp | grep 134.209.82.225
pgrep -af 'localhost:22|\.smtk|\.stk_'

Windows:

powershell
Get-NetTCPConnection -RemoteAddress 134.209.82.225 -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'localhost:22|smtk' } | Select-Object ProcessId,CommandLine

Una conexión a 134.209.82.225, o un proceso ssh / autossh con localhost:22, .smtk o .stk_ en la línea de comandos, indica casi con seguridad que la máquina está afectada. Según Phorion, el túnel corre desacoplado: cerrar el editor no lo detiene.

Paso 4: revisar la persistencia y si se activó SSH

macOS:

bash
ls -la ~/Library/LaunchAgents/com.apple.sysmond.plist ~/.config/.smt ~/.config/.smtk "$TMPDIR"/.stk_* 2>/dev/null
launchctl list | grep sysmond
sudo systemsetup -getremotelogin

Linux:

bash
crontab -l | grep -n smt
ls -la ~/.config/.smt ~/.config/.smtk /tmp/.stk_* 2>/dev/null
systemctl is-enabled ssh sshd 2>/dev/null
systemctl is-active  ssh sshd 2>/dev/null

Windows:

powershell
Get-ScheduledTask -TaskName SysMon -ErrorAction SilentlyContinue
Test-Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd"
Get-ChildItem "$env:USERPROFILE\.config" -Force -ErrorAction SilentlyContinue | Where-Object Name -match 'smt'
Get-Service sshd -ErrorAction SilentlyContinue

Si existe com.apple.sysmond.plist, ~/.config/.smt, una línea @reboot con .smt, una tarea SysMon o sysmon.cmd en Inicio, trata la máquina como afectada. Revisa también SSH: si está activo y nunca lo activaste, también es sospechoso.

Paso 5: si te afectó

Siguiendo las recomendaciones de OpenSourceMalware y Phorion:

  1. Desconecta primero la máquina y bloquea 134.209.82.225 en los puertos 22 y 8099 en el cortafuegos o el router.
  2. Conserva las pruebas antes de limpiar:
bash
mkdir -p ~/ir-evidence
cp -p ~/.ssh/authorized_keys ~/ir-evidence/ 2>/dev/null
cp -p ~/.config/.smt ~/Library/LaunchAgents/com.apple.sysmond.plist ~/ir-evidence/ 2>/dev/null
crontab -l > ~/ir-evidence/crontab.txt 2>/dev/null
ps auxww > ~/ir-evidence/ps.txt
  1. Detén el túnel y elimina la persistencia y la clave (macOS / Linux):
bash
pkill -f '\.config/\.smt'
pkill -f 'localhost:22'
# macOS
launchctl unload -w ~/Library/LaunchAgents/com.apple.sysmond.plist
rm -f ~/Library/LaunchAgents/com.apple.sysmond.plist
# Linux
crontab -l | grep -v '\.smt' | crontab -
# macOS + Linux
rm -f ~/.config/.smt ~/.config/.smtk "${TMPDIR:-/tmp}"/.stk_*
sed -i.bak '/svc-telemetry/d' ~/.ssh/authorized_keys
ssh-keygen -lf ~/.ssh/authorized_keys

sed solo borra por comentario. Si el paso 2 encontró una línea renombrada por huella, abre ~/.ssh/authorized_keys y bórrala a mano. Windows:

powershell
Unregister-ScheduledTask -TaskName SysMon -Confirm:$false -ErrorAction SilentlyContinue
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\sysmon.cmd" -ErrorAction SilentlyContinue
Remove-Item "$env:USERPROFILE\.config\smt.cmd","$env:USERPROFILE\.config\smtk" -ErrorAction SilentlyContinue
  1. Rota todas las credenciales a las que llega esta máquina: claves SSH privadas, tokens de Git / GitHub, claves de AWS / GCP, tokens en archivos .env y las API Keys de Claude Code y Codex, desde otra máquina limpia. Según Phorion, si SSH llegó a estar activo o los registros SSH muestran accesos desde 127.0.0.1 / ::1 con la clave svc-telemetry, el atacante pudo haber entrado, y este paso es obligatorio.
  2. Desactiva la actualización automática de extensiones y plantéate reinstalar el sistema. Según OpenSourceMalware, si el atacante llegó a entrar, los archivos conocidos pueden no ser todo; reinstalar es más seguro.

Si usas una clave de este sitio, borra la antigua en la consola, crea una nueva y actualiza el valor en el archivo global ~/.claude/settings.json y en ~/.codex/config.toml.

Crear API Key para sustituir una clave que pudo quedar expuesta →

Cómo prevenirlo

  • Fija versiones de extensiones y desactiva la actualización automática en el settings.json del editor:
json
{
  "extensions.autoUpdate": false,
  "extensions.autoCheckUpdates": false
}

Cuando salga una versión nueva, espera uno o dos días y sigue a la comunidad de seguridad antes de actualizar.

  • Instala Claude Code preferentemente con la CLI oficial y depende menos de los mercados de extensiones:
bash
curl -fsSL https://claude.ai/install.sh | bash
claude --version

Instalación y API de terceros: guía de Claude Code con API de terceros.

Fuentes

相关文章

Claude API 413 request_too_large: el límite sube a 128 MB — límites de Bedrock y pasarelas de terceros, cómo enviar PDF grandes y capturas

Claude API 413 request_too_large: el límite sube a 128 MB — límites de Bedrock y pasarelas de terceros, cómo enviar PDF grandes y capturas

El límite de las peticiones Messages de la API de Claude pasa de 32 MB a 128 MB, pero Bedrock sigue en 20 MB, Vertex gestionado por Google en 30 MB y las pasarelas de terceros tienen sus propios topes. Cómo reconocer 413 request_too_large, tabla de límites por plataforma, comprimir y reducir imágenes, enviar PDF grandes con file_id de la Files API, recortar capturas antiguas en sesiones largas de computer use y Claude Code, y nuestra prueba de 10 MB a 130 MB.

Google Jules cierra (31 de diciembre): exporta tus datos y migra a los agentes en segundo plano de Claude Code / Codex

Google Jules cierra (31 de diciembre): exporta tus datos y migra a los agentes en segundo plano de Claude Code / Codex

Google cerrará Jules el 31 de diciembre de 2026 y el servicio pasa a solo lectura después del 11 de noviembre. Esta guía sigue la exportación oficial (ajustes, variables de entorno, tareas programadas, repositorios, memorias, scripts de setup, todas las sesiones y sus patches) y lleva cada pieza a Claude Code y Codex, con los tiempos medidos al ejecutar la misma exportación en ambos clientes (Claude Code unos 15 s, Codex unos 44 s).

¿Por qué Claude suspende cuentas? La teoría comunitaria del «sistema de puntos» y cómo usar Claude Code sin cambiar de cuenta

¿Por qué Claude suspende cuentas? La teoría comunitaria del «sistema de puntos» y cómo usar Claude Code sin cambiar de cuenta

Desde el 28 de octubre, dos publicaciones que afirman que «Claude suspende cuentas con un sistema de puntos» suman unas 770.000 visualizaciones en X. Separamos lo que dice la comunidad de lo que Anthropic publica oficialmente sobre suspensiones y apelaciones, y probamos Claude Code 2.1.310 con una API Key de nuestro sitio: las solicitudes simples respondieron en unos 1,4–1,7 segundos y una pequeña tarea de corregir un bug y escribir pruebas terminó en 8,5 segundos. Incluye la configuración de Codex y Cursor y cómo resolver 401/429.