Ir al contenido
SV Dev
← Volver al blog

Seguridad · Cadena de Suministro · Herramientas de IA

Backdoor en la extensión de Claude Code: el sello era real

La extensión oficial de Claude Code entregó un backdoor SSH con sello de publisher verificado. El marketplace de Cursor solo sirve una versión: la última.

Jeferson Guardezi
Aviso de seguridad de Cursor que nombra la extensión Anthropic.claude-code en su versión 2.1.313, la ventana de once horas del 29 de octubre de 2026 y la afirmación de que la versión no fue desarrollada por Anthropic.

Durante once horas del 29 de octubre, la extensión oficial de Claude Code instaló un backdoor SSH en máquinas de desarrollo — y todas las señales de confianza de la página decían la verdad. El publisher era Anthropic de verdad. El sello de verificado estaba verificado de verdad. La extensión era la que tu equipo quería instalar. Solo la versión estaba mal.

Esto no es typosquatting, el tipo de engaño que se puede entrenar a detectar. La versión 2.1.313 de Anthropic.claude-code se sirvió desde el marketplace de extensiones de Cursor entre las 2:27 y las 13:35 del Pacífico del 29 de octubre — 09:27 a 20:35 UTC. Cursor dice que llegó a 5.000 usuarios como máximo; esa cifra es de Cursor, y nadie fuera la ha medido.

Aviso de seguridad de Cursor que nombra el paquete Anthropic.claude-code, la versión 2.1.313, la ventana de once horas del 29 de octubre y la afirmación de que la versión no fue desarrollada por Anthropic.

Aviso de seguridad de Cursor, 29 de octubre de 2026. El paquete era real, el nombre del publisher era real — la versión no.

El costo está en el portátil, y desinstalar no lo paga

El portátil de un desarrollador es la máquina de la empresa con más acceso a producción y menos gobernanza. Credenciales de cloud, una clave de firma, un túnel a la base de datos, un .env que nadie inventarió. Y es la única donde instalar software es el trabajo.

Si tu equipo está distribuido o trabaja con contractors, el problema se multiplica: máquinas que la empresa no administra, sin MDM ni inventario de software. Estandarizar el equipo en Cursor es una decisión de diez minutos; averiguar quién ejecutó qué es un proyecto.

Lo que el payload hizo primero es lo que vale cotizar. Según tres análisis independientes, añadió una clave Ed25519 del atacante — comentada svc-telemetry, así que se lee como infraestructura en un archivo que nadie revisa dos veces — a ~/.ssh/authorized_keys, abrió un túnel SSH inverso hacia un host del atacante y emitió un beacon por HTTP.

Después corrió el reconocimiento, y no robó ningún secreto. Recopiló los nombres de las variables de entorno que coinciden con KEY, TOKEN, SECRET, PASS, AWS y GCP, con tope de cuarenta, junto al hostname, el usuario, el sistema, la arquitectura, los directorios home y de trabajo, el user.email global de git y la IP pública. Nombres, no valores.

Eso no es un robo. Es una lista de la compra — qué máquina vale el regreso, y qué está sosteniendo. El reloj de este incidente no se detuvo cuando se retiró la versión.

Y la remediación obvia es la equivocada. La persistencia se escribe fuera del directorio de la extensión en los tres sistemas, así que borrarla elimina lo que ejecutó el instalador y deja lo instalado.

Tabla de persistencia por sistema: un LaunchAgent llamado com.apple.sysmond.plist en macOS, una entrada @reboot en el crontab de Linux y una tarea programada SysMon con respaldo en la carpeta Startup en Windows.

Persistencia por sistema, de Phorion. Nada de esto vive en la carpeta que borrarías.

Así que el costo no es una tarde de parches. Es rotar credenciales en cada cuenta que alcanza un portátil de desarrollo, en máquinas que primero hay que identificar. Si tu respuesta a "cuáles ejecutaron esto en esa ventana" es un encogimiento de hombros, la remediación no tiene frontera — y sin frontera es la cara. Es lo que alcanza una máquina de desarrollo en tu cuenta de cloud, ahora con fecha.

Qué verificamos y qué es el relato de Cursor

Las dos mitades no tienen la misma fuerza, y deberías poder distinguirlas.

Consultamos las APIs públicas de los registries el 30 de octubre — Open VSX, la galería de Cursor, npm y el Visual Studio Marketplace. El espejado, la versión única, los recuentos, el estado de la verificación y los parches ausentes de más abajo son nuestros y se reconfirman en endpoints públicos.

Lo que atribuimos en lugar de confirmar: la cifra de 5.000 usuarios, la afirmación de que ninguna otra extensión fue alterada y la de que el servidor del atacante está fuera de servicio son aserciones de Cursor sobre su propio marketplace, sin auditoría independiente. No sondeamos el host del atacante ni lo haríamos. La forense del payload — la clave, el túnel, el beacon, la persistencia, el hash — viene de Phorion, StepSecurity y OX Security: un proveedor de EDR y dos de seguridad de cadena de suministro. Se corrobora entre los tres, y cada texto termina en un pitch de producto.

Dos cosas siguen genuinamente abiertas. Por dónde entró el build malicioso está en disputa entre los publishers: StepSecurity dice que la 2.1.313 se publicó en Open VSX y se espejó hacia Cursor; el aviso de Cursor lo enmarca como un incidente en su propio marketplace. Nuestro hallazgo de timestamps prueba que Cursor espeja Open VSX — evidencia sobre la ruta de distribución, no sobre el punto de intrusión, y no cierra la pregunta. Cómo obtuvo el atacante capacidad de publicación bajo la identidad legítima de Anthropic no se ha establecido. Ninguna fuente afirma saberlo.

El sello de verificado decía la verdad

En Open VSX, el namespace Anthropic lleva verified: true y 63.028.452 descargas. En el Visual Studio Marketplace, el publisher anthropic tiene dominio verificado contra anthropic.com desde junio de 2025. El listado también dice, en texto plano, "Published by igorkofman" — una cuenta personal de GitHub, que publicó tanto el release anterior al incidente como el reemplazo limpio posterior.

Listado de Claude Code for VS Code en Open VSX mostrando el sello de publisher verificado junto a Anthropic, la línea "Published by igorkofman" y 63 millones de descargas.

El listado el 30 de octubre: publisher verificado, una cuenta personal de GitHub, 63 millones de descargas.

El sello nunca dejó de ser cierto. Ahí está la lección. La verificación certifica quién tiene la cuenta de publicación. Nunca afirmó nada sobre lo que hay dentro de un paquete — y la interfaz incentiva leerlo como si lo hiciera.

Tampoco hubo un momento en que alguien pudiera negarse. Los análisis publicados describen el payload como una función autoinvocada antepuesta al bundle minificado: se ejecutó al cargar el módulo, antes de activate(), sin prompt y sin script de postinstall que una revisión pudiera inspeccionar.

No había versión anterior a la que fijarse

Este es el mecanismo que nadie más ha escrito, y es por lo que falló el consejo estándar.

Los ocho builds de plataforma del release limpio 2.1.314 llevan timestamps de publicación idénticos al microsegundo en Open VSX y en el marketplace de Cursor. También los lleva una extensión sin relación alguna: esbenp.prettier-vscode 12.4.0. El marketplace de Cursor no es un índice de Open VSX; es una republicación literal de sus registros.

Y expone exactamente una versión de cualquier cosa. Pide a su galería todas las versiones de Anthropic.claude-code y llegan nueve entradas, todas 2.1.314; ms-python.python devuelve diez, todas 2025.6.1; esbenp.prettier-vscode devuelve una.

CanalVersiones de claude-code disponibles
Marketplace de Cursor1 (la última)
Open VSX324
Visual Studio Marketplace375

En las once horas en que la 2.1.313 fue la última, no había versión anterior en ese canal a la que fijarse, ni rollback, ni manera de salirse. "Fija el último release bueno conocido" es lo primero que ordena todo playbook de cadena de suministro, y en el canal donde está la mayoría de usuarios de IDE con IA no es una operación disponible.

El consejo que sigue es más débil de lo que parece. "Comprueba si tienes la 2.1.313" asume que un número de versión ausente significa algo. No: faltan 45 números de parche en la secuencia 2.1.x de npm y 68 en la del Visual Studio Marketplace. Un hueco ahí es rutina.

Pasos de remediación de Cursor: el marketplace de extensiones se cerró por completo, se rotaron las claves y se reconstruyó el marketplace.

El radio de alcance de un espejo es el espejo: cierre total, rotación de claves, reconstrucción.

Qué decidir esta semana

  1. ¿Puedes responder "cuáles de nuestras máquinas ejecutaron esto entre las 09:27 y las 20:35 UTC del 29 de octubre" con la telemetría que ya tienes? No con una encuesta al equipo. Si no puedes, ese es el hallazgo, más grande que esta extensión.
  2. ¿El IDE que estandarizaste tiene allowlist de extensiones y camino de rollback? Si la respuesta honesta es "usamos el marketplace", has añadido un salto de distribución a tu cadena de suministro que nadie evaluó — una dependencia sin lockfile, sin pin, sin control de revisión.
  3. ¿Qué se alcanza desde un portátil de desarrollo dentro de tu cuenta de cloud, antes de que alguien rote nada? Eso decide si un incidente así es una tarde o un trimestre. Es lo primero que mapeamos al llevar software hecho con IA a producción.

La parte incómoda es que aquí nadie fue descuidado. El sello era real, el publisher era real, la extensión era la correcta y el canal funcionó como fue diseñado. No hay capacitación que resuelva eso. Lo gobiernas en la frontera — qué extensiones, qué versiones, qué alcanza un portátil — o lo aceptas, a sabiendas, como un riesgo que alguien eligió.

Puntos clave

  • Un build malicioso de la extensión oficial Anthropic.claude-code se sirvió desde el marketplace de Cursor durante unas once horas el 29 de octubre de 2026, bajo la identidad genuina y verificada de Anthropic. La estimación de Cursor es de 5.000 afectados como máximo, sin confirmación de nadie más.
  • La verificación de publisher certifica quién controla la cuenta, nunca el contenido de un paquete. Todas las señales del listado siguieron correctas durante el incidente.
  • El marketplace de Cursor es un espejo literal de Open VSX y expone solo la versión actual — 1, frente a 324 en Open VSX y 375 en el Visual Studio Marketplace — así que "fija la versión anterior" no era una acción disponible.
  • El reconocimiento recopiló nombres de variables de entorno que coinciden con KEY|TOKEN|SECRET|PASS|AWS|GCP, no sus valores: selección de objetivo, no robo, y la exposición sobrevive a la retirada de la versión.
  • Desinstalar no remedia: la persistencia se escribe fuera del directorio de la extensión en macOS, Linux y Windows. Por dónde entró el build y cómo obtuvo el atacante derechos de publicación siguen sin establecerse.
Trabajamos con founders en cualquier lugar del mundo que tienen un producto funcional construido con IA — y el buen juicio de querer ojos sénior sobre él antes de que lleguen los usuarios reales.

Recibir revisión

¿Listo para lanzar con confianza?

30 minutos con un ingeniero sénior. Te decimos exactamente qué separa tu producto de la producción.

Obtén una revisión de tu producto

30 minutos, sin pitch, sin presión. Si tu producto ya está listo para lanzar como está, también te lo diremos.