Saltar al contenido de Notas de campo
Nota de campo 0217 min de lecturaLeer en inglés

Claude Code en Cursor: una actualización con puerta trasera

Durante unas once horas, el marketplace de Cursor ofreció copias manipuladas de la extensión de Claude Code. El código intentaba dejar acceso SSH persistente en las máquinas de quienes la instalaran o recibieran la actualización automática.

El incidente

Qué pasó en el marketplace de Cursor

El 29 de octubre de 2026, entre aproximadamente las 2:27 y las 13:35, hora del Pacífico, el marketplace de extensiones de Cursor ofreció copias manipuladas de Anthropic.claude-code, versiones 2.1.312 y 2.1.313, para macOS y Windows. Según el aviso de Cursor, intentaban instalar una puerta trasera SSH persistente. No habían sido desarrolladas por Anthropic.

No hacía falta instalar una extensión con un nombre sospechoso. El paquete aparecía en el canal de una herramienta conocida. Ars Technica recoge que las extensiones de Cursor se autoactualizan por defecto y atribuye a Cursor un alcance de «a lo sumo 5,000 usuarios». Es un límite reportado de usuarios afectados, no evidencia de que un atacante entrara en 5,000 máquinas.

Para revisar si un equipo estuvo expuesto hay que comprobar las versiones que ejecutó y cómo recibió las actualizaciones. La autoactualización permite que una extensión ya instalada cambie sin que alguien vuelva a revisar sus permisos.

Cómo funcionaba

Cómo funcionaba la puerta trasera

El análisis de Phorion describe código inyectado al principio de extension.js. Se ejecutaba al cargar el módulo, antes del callback normal de activación. No dependía de que una persona le pidiera al modelo una tarea peligrosa.

El implante intentaba añadir una llave del atacante a authorized_keys, habilitar el servicio SSH local y abrir un túnel inverso: una conexión saliente con la que el operador podría alcanzar el SSH de la máquina. También escribía mecanismos para mantener ese acceso después de cerrar el editor o reiniciar, como un LaunchAgent en macOS y una tarea programada con alternativa de inicio de sesión en Windows.

Además enviaba datos de reconocimiento: host, usuario, sistema operativo, directorios, correo de Git e IP pública. Phorion identificó la recolección de hasta 40 nombres de variables de entorno relacionados con credenciales, no sus valores. Un nombre como AWS_ACCESS_KEY_ID le indica al atacante qué buscar si consigue entrar después. El reconocimiento descrito no entregaba por sí solo esa llave.

Hubo errores en el malware. En macOS, la comprobación de Remote Login podía interpretar mal una respuesta de permisos y omitir la activación de SSH. Si el servicio estaba apagado, el túnel no bastaba para entrar. Si ya estaba encendido, el escenario era distinto. Cursor también señala límites de privilegios en macOS y Windows. Aunque fallara el acceso interactivo, podían quedar la llave añadida y la persistencia, además de haberse enviado los datos de reconocimiento.

Permisos del plugin

Qué puede ejecutar un plugin sin pasar por el modelo

La aprobación de una llamada de herramienta controla una acción que propone el agente. Una extensión que ejecuta código al cargarse puede actuar sin llegar a esa aprobación. Pedirle al modelo que «no lea secretos» no controla ese código.

La documentación de seguridad de plugins de Claude Code advierte que un plugin instalado puede ejecutar código arbitrario con los privilegios del usuario. Sus reglas de permisos y sandbox cubren las llamadas de herramientas de Claude, no todo el código que un plugin ejecuta por su cuenta. Hay que revisar también los hooks y los procesos de servidores.

Cada componente necesita una revisión distinta. Una skill de texto influye en las instrucciones; un hook ejecuta comandos; un servidor MCP local corre como proceso; uno remoto recibe los datos y credenciales que se le conceden. Conviene incluirlos en el mismo inventario, indicando qué permisos tiene cada uno, sin asumir que todos pueden leer el disco completo.

En la máquina, eso significa comprobar qué archivos puede leer el proceso, qué variables hereda y qué sesiones o credenciales puede usar. El acceso depende del entorno y de los controles que se apliquen fuera del modelo.

Qué falta por saber

Lo que todavía no se sabe

The Register recoge la declaración de un miembro del equipo técnico de Anthropic: sus sistemas y laptops no fueron comprometidos; un actor utilizó acceso al marketplace de Cursor para publicar una copia que Anthropic no construyó ni publicó. Falta una explicación técnica pública completa de cómo obtuvo ese acceso. Con esa información, atribuir el incidente a un hackeo de Anthropic sería incorrecto.

La investigación EMBRACE de Forever Security aporta contexto, no otra etapa de ese ataque. Describe fallas distintas en navegadores integrados: ejecución de código en Cursor, suplantación de la dirección de una pestaña en GitHub Copilot y lecturas de archivos locales en Codex, VS Code y Claude Desktop. No afirma que los cinco compartan una vulnerabilidad ni el mismo impacto.

Ambas investigaciones nos llevan a revisar el software que acompaña al agente. No prueban que exista una campaña coordinada ni permiten calcular una tasa de compromiso del sector o concluir que cualquier plugin sea malicioso. Aquí trabajamos con fuentes públicas: no ejecutamos el malware, no reprodujimos EMBRACE ni auditamos las laptops de AE.

Revisión de equipos

Qué revisar en los equipos de desarrollo

Estas son las revisiones que proponemos a partir del incidente. No hemos comprobado su implantación en todos nuestros equipos ni constituyen una certificación de seguridad.

  1. Registrar las extensiones, plugins, skills, hooks y servidores MCP instalados. Para cada uno, anotar el origen real, la versión o commit, la máquina o repositorio, el responsable y cómo se actualiza. El nombre del publisher no basta para saber de dónde llegó el paquete.

  2. En entornos sensibles, desactivar la actualización desatendida donde sea posible e instalar versiones revisadas. Alguien debe encargarse de los parches urgentes y tener un plazo para aplicarlos; dejar una versión congelada indefinidamente también acumula riesgo. Fijar la versión no acredita su integridad si no se puede verificar su procedencia.

  3. Evitar ejecutar el editor como administrador y mantener las credenciales de producción fuera del entorno de trabajo del agente. Los límites de archivos, red e identidades deben aplicarse desde el entorno de ejecución, no depender de instrucciones al modelo.

  4. Usar credenciales temporales y específicas para la tarea. Un gestor de secretos ayuda si el proceso solo puede consultar lo que necesita. Mover un token de .env para inyectarlo globalmente al editor conserva buena parte del problema.

  5. Preparar la respuesta a un incidente: qué máquinas ejecutaron cada versión, qué evidencia conservar, quién puede aislarlas y cómo revocar sesiones y rotar credenciales desde un sistema confiable. La lista de instalaciones de hoy no reconstruye por sí sola lo que se ejecutó ayer.

Para registrar esa información se puede usar una tabla compartida:

CampoQué debe permitir responder
Componente, origen y versión¿Qué copia se ejecutó y de dónde vino?
Equipo y responsable¿Dónde buscar y quién decide?
Actualización y última revisión¿Puede cambiar sin que alguien lo revise?
Acceso efectivo¿Qué archivos, identidades y destinos alcanza?
Evidencia y respuesta¿Cómo detectar, detener y revocar su acceso?

Equipos afectados

Si instalaste una de las versiones afectadas

Consulta el aviso actualizado de Cursor y sus indicadores. El proveedor recomienda buscar evidencia en endpoints, red e instalaciones; aislar los hosts con señales de ejecución o puerta trasera; retirar llaves, persistencia y túneles; y evaluar si hay que reconstruir la máquina. Desinstalar la extensión o actualizarla no basta para retirar scripts independientes.

Cursor informa que retiró los paquetes y que el proveedor de alojamiento desactivó el servidor del atacante. Eso interrumpe esa infraestructura; no sustituye revisar los equipos. Recomienda rotar credenciales y sesiones accesibles desde las máquinas afectadas desde un sistema confiable. Que el reconocimiento recolectara solo nombres de variables no descarta acceso posterior a sus valores.

No copies un comando aislado de esta nota como diagnóstico completo. La respuesta necesita el alcance actualizado del proveedor y la evidencia de tu entorno.

Primer inventario

Cómo hacer el primer inventario

Antes de sumar otro agente, elige un equipo y un repositorio representativos. Completa el inventario sin copiar valores de secretos. Separa lo confirmado de lo desconocido y asigna un responsable a cada dato pendiente. El primer hallazgo puede ser tan simple como una dependencia que se actualiza sola y que nadie sabe quién aprobó.

En Agentic Engineering proponemos incluir esa revisión al diseñar un flujo con agentes. Quien lo vaya a operar necesita saber qué puede ejecutar, con qué identidad y cómo retirar su acceso. En nuestra nota sobre contención de evaluaciones abordamos una comprobación relacionada: qué puede alcanzar un entorno que se describe como «aislado».

Lleva el inventario a la próxima revisión del equipo. Para cada componente sin origen, versión o responsable confirmado, acuerden quién lo va a comprobar y cuándo.

08 / Rastro de fuentes

Primarias, frescas, inspeccionables.

Los detalles de producto cambian rápido. Estas fuentes se verificaron para esta edición el 2 de noviembre de 2026. Vuelve a verificar antes de cambiar una política de producción.

  1. 01Aviso de seguridad · Anthropic.claude-code 2.1.312 y 2.1.313CursorFuente primaria del proveedor: ventana, paquetes para macOS y Windows, comportamiento, límites del acceso SSH y respuesta. Aviso del 29 de octubre, actualizado el 30; consultado el 2 de noviembre de 2026.
  2. 02Official Claude Code Extension Compromise: Security AdvisoryPhorion · Calum HallAnálisis técnico del implante: ejecución al cargar el módulo, persistencia, nombres de variables y errores al habilitar SSH. Actualizado el 31 de octubre; consultado el 2 de noviembre de 2026. No ejecutamos la muestra.
  3. 03Anthropic VS code extension on Cursor backdoored for nearly 12 hoursArs Technica · Dan GoodinCobertura secundaria: máximo de 5,000 usuarios atribuido a Cursor y autoactualización por defecto descrita por Phorion. No es un recuento de intrusiones exitosas. Consultado el 2 de noviembre de 2026.
  4. 04Anthropic: That Claude Code extension compromise… could not be usThe Register · Connor JonesRecoge la declaración de Felix Rieseberg, de Anthropic: niega compromiso de sus sistemas o laptops y atribuye la copia manipulada al acceso al marketplace de Cursor. Declaración leída a través del medio, no verificada directamente en X.
  5. 05Plugin security and trustClaude Code · AnthropicDocumentación de privilegios de plugins, hooks y servidores, y del alcance de permisos y sandbox. No describe el incidente de la extensión de Cursor. Consultada el 2 de noviembre de 2026.
  6. 06EMBRACE · Technical OverviewForever SecurityInvestigación sobre navegadores integrados en cinco asistentes, con mecanismos e impactos distintos. Es evidencia separada, no atribución al ataque de la extensión. No reprodujimos sus pruebas; consultada el 2 de noviembre de 2026.

Señal semanal · correo quincenal

Ideas probadas en campo. Sin producir contenido por producir.

Una nota sustancial cuando tenemos algo que vale la pena mostrar: sistemas, evidencia, instrucciones y lo que falló. Confirma por correo. Cancela tu suscripción cuando quieras.

El registro se habilitará cuando la clave de producción de Turnstile esté configurada.