Ataques
GlassWorm: Desenmascarando el gusano autopropagable que utiliza código invisible en las extensiones de VS Code

Escritor y editor
Actualizado
24 oct 2025
8 min
A mediados de octubre de 2025, investigadores de seguridad de Koi Security revelaron un ataque a la cadena de suministro muy sofisticado y revolucionario llevado a cabo a través de un malware bautizado GlassWorm. Este descubrimiento supone un preocupante salto evolutivo en el diseño de código malicioso, que se centra específicamente en los entornos de desarrollo al comprometer extensiones del Open VSX Marketplace y del Microsoft VSCode Marketplace.
GlassWorm se ganó ese nombre por su sigilo y transparencia sin precedentes. Rápidamente se distinguió de amenazas anteriores, como el gusano Shai Hulud que afectó al ecosistema npm apenas un mes antes, al introducir una serie de técnicas de evasión avanzadas: Inyección de código verdaderamente invisible, una infraestructura de comando y control (C2) de triple capa imposible de eliminar que utiliza la blockchain Solana, y un troyano de acceso remoto (RAT) de espectro completo que convertía las máquinas infectadas de los desarrolladores en una red proxy criminal.
El ataque se observó por primera vez el 17 de octubre, cuando el motor de riesgo de Koi detectó cambios de comportamiento sospechosos en una extensión de OpenVSX llamada CodeJoy, versión 1.8.3. Aunque aparentemente se trataba de una herramienta legítima para la productividad de los desarrolladores, la extensión realizaba conexiones de red sospechosas e intentaba acceder sin autorización a las credenciales.
El análisis inicial reveló que siete extensiones OpenVSX se vieron comprometidas en la primera oleada, lo que supuso aproximadamente 36 mil descargas. Dado que las extensiones de VS Code se actualizan automáticamente de forma predeterminada, esta amenaza autopropagable provocó una infección silenciosa, generalizada e acelerada en la comunidad de desarrolladores.
El fantasma en el código: inyección de malware invisible
La primera característica de sofisticación de GlassWorm es su método de implementación de la carga útil inicial, una técnica que rompe con los métodos tradicionales de revisión y detección de código.
Eludir la revisión del código con selectores de variación Unicode
En lugar de recurrir a la ofuscación típica u ocultar el código en archivos minificados, los atacantes aprovecharon los caracteres Unicode invisibles, concretamente los selectores de variación Unicode y los caracteres del área de uso privado (PUA). Estos caracteres especiales forman parte de la especificación Unicode, pero están diseñados para no producir ningún resultado visual o mostrarse como simples espacios en blanco en los editores de código y entornos de desarrollo integrados (IDE) habituales.
Para un desarrollador que realiza una revisión manual de código, o para una herramienta como la vista de diferencias de GitHub, el código malicioso simplemente aparece como líneas vacías o espacios en blanco. Como señaló un investigador de Koi: El malware es invisible; no está ofuscado. No está oculto en un archivo minificado. Es realmente invisible para el ojo humano. El código parece legítimo, pero para el intérprete de JavaScript es código ejecutable y activo.
Este método engañó con éxito a los desarrolladores cuyas cuentas fueron comprometidas. Podrían haber revisado los archivos modificados, como aquel en el que el código malicioso creaba un "gran espacio" entre las líneas de código funcional, y no haber visto nada extraño, aprobando y distribuyendo sin querer el malware a cientos de usuarios.
Resistencia de triple capa: la infraestructura C2 indestructible
Tras su ejecución, la carga útil invisible inicia la siguiente fase conectándose a sus servidores de comando y control (C2). El C2 de GlassWorm es quizás su característica más resistente, ya que emplea un sistema de redundancia multicapa en tres mecanismos diferentes, lo que lo hace casi imposible de desmantelar.
Blockchain Solana: el C2 primario inmutable
El canal C2 primario utiliza la blockchain pública Solana. El malware está codificado con la dirección de la cartera del atacante y busca en la red Solana transacciones que se originen en esa dirección. Cuando se encuentra una transacción, el malware extrae un objeto JSON que contiene un enlace codificado en Base64 del campo de notas de la transacción, un espacio para adjuntar texto arbitrario a las transacciones de la blockchain. Este enlace apunta a la carga útil de la siguiente etapa.
El uso de una blockchain pública y descentralizada ofrece a los atacantes ventajas significativas:
Inmutabilidad y resiliencia: Una vez que una transacción se registra en la blockchain, no se puede modificar ni eliminar. Esto significa que las instrucciones C2 son permanentes y no se pueden eliminar mediante solicitudes legales o técnicas estándar.
Anonimato y resistencia a la censura: Las billeteras criptográficas son seudónimas, lo que dificulta su atribución. Además, no existe un proveedor de alojamiento central, un registrador de dominios ni una única infraestructura que pueda cerrarse.
Tráfico legítimo: Las conexiones a los nodos RPC (remote procedure call) de Solana, los servidores utilizados para interactuar con la blockchain, parecen normales y es poco probable que sean detectadas por las herramientas de supervisión de seguridad estándar.
Bajo costo y actualizaciones dinámicas: El atacante puede actualizar la ubicación de su carga útil simplemente publicando una nueva transacción de bajo costo, lo que le permite rotar rápidamente la infraestructura y eludir los bloqueos contra las URL de carga útil anteriores.
Google Calendar: el C2 de respaldo legítimo
Como mecanismo de respaldo altamente eficaz, GlassWorm utiliza Google Calendar. El malware está configurado para consultar una URL específica y de acceso público de un evento de Google Calendar. Oculta dentro del título del evento hay otra URL codificada en Base64, la cual también apunta a la siguiente etapa de la carga útil.
Este método elude los controles de seguridad utilizando un servicio legítimo, altamente fiable y ampliamente utilizado. Ninguna organización bloquea el tráfico a Google Calendar, lo que proporciona una pieza de infraestructura "indestructible" que el atacante puede actualizar en cualquier momento simplemente editando el título del evento.
Descifrado de la carga útil y gestión de claves
Los canales C2 apuntan en última instancia a direcciones IP controladas directamente por los atacantes, como 217.69.3.218 o 199.247.10.166. La carga útil obtenida de estos servidores no se puede utilizar de inmediato, ya que está muy ofuscada, codificada en Base64 y protegida adicionalmente con cifrado AES-256-CBC.
Los atacantes implementaron una ingeniosa defensa contra la interceptación: La clave de descifrado no se almacena en el propio malware, sino que se genera dinámicamente por solicitud y se transmite en encabezados de respuesta HTTP personalizados. Esto significa que, incluso si un equipo de seguridad intercepta la carga útil cifrada, no puede descifrarla sin realizar una nueva solicitud en tiempo real para capturar las claves únicas actuales.
ZOMBI: el troyano de acceso remoto de espectro completo
La etapa final descifrada de GlassWorm es una enorme carga útil de JavaScript denominada módulo ZOMBI, una escalofriante referencia a la infraestructura de zombie botnet que crea. Este módulo transforma cada estación de trabajo de desarrollador infectada en un nodo completo dentro de la red criminal del atacante.
Fase uno: recopilación de datos y robo financiero
Las funciones principales del módulo ZOMBI son el robo masivo de datos y la obtención de beneficios económicos:
Robo de credenciales para propagación: Recopila de forma agresiva tokens de autenticación de NPM, tokens de GitHub y credenciales de Open VSX y Git. Estas son las claves fundamentales necesarias para el ciclo de autopropagación del gusano.
Drenaje de billeteras de criptomonedas: El malware se dirige específicamente a 49 extensiones de billeteras de criptomonedas diferentes, entre las que se incluyen algunas muy populares como Coinbase Wallet, MetaMask y Phantom, y drena sus fondos.
Reconocimiento de la red: El módulo realiza un reconocimiento y mapea las redes corporativas internas a las que puede acceder la estación de trabajo infectada. Todos los datos robados se filtran a puntos finales específicos controlados por el atacante (p. ej., 140.82.52.31).
Fase dos: convertir el host infectado en un arma
Más allá del robo de datos, el módulo ZOMBI proporciona a los atacantes un control completo y persistente sobre el equipo de la víctima:
Implementación de proxy SOCKS: El malware instala un servidor proxy SOCKS en el equipo infectado. Esta funcionalidad es muy valiosa para los atacantes, ya que:
Anonimiza los ataques: Los atacantes dirigen su tráfico a través de la dirección IP de la víctima, ocultando su propio origen.
Elude los firewalls: Permite a los atacantes externos acceder a los sistemas de red internos a los que puede llegar la máquina de la víctima, convirtiendo la estación de trabajo del desarrollador en un punto de acceso interno constante a la red.
Proporciona infraestructura gratuita: El grupo criminal obtiene una red distribuida de servidores proxy ya preparada sin incurrir en gastos.
Computación en red virtual oculta (HVNC): HVNC da al atacante acceso completo y gráfico al escritorio remoto de la máquina, pero es completamente invisible para el usuario.
HVNC se ejecuta en un escritorio virtual oculto que no aparece en el Administrador de Tareas y no muestra ninguna ventana en la pantalla de la víctima. El atacante puede operar silenciosamente en segundo plano, utilizando el navegador de la víctima con todas las sesiones iniciadas (p. ej., correo electrónico y herramientas internas), leyendo código fuente confidencial, robando credenciales adicionales y pasando a otros sistemas dentro de la red corporativa, haciendo literalmente todo lo que la víctima podría hacer, pero sin que esta lo sepa.
Canales de control descentralizados: GlassWorm garantiza que su estructura de comando esté lo más distribuida posible:
Implementa módulos WebRTC para establecer canales de comunicación entre pares, los cuales utilizan NAT transversal para eludir los firewalls tradicionales y permitir un control directo y en tiempo real sin necesidad de un servidor central.
Los comandos se distribuyen utilizando la red BitTorrent Distributed Hash Table (DHT). Este sistema descentralizado, que hace que el seguimiento de torrents sea casi imposible de cerrar, permite que los comandos se propaguen a través de millones de nodos, lo que garantiza que no haya un único servidor central que pueda desconectarse.
El ciclo de autopropagación: un cambio fundamental
El objetivo principal del hurto de credenciales de NPM, GitHub y OpenVSX no es solo el robo, sino la propagación automatizada.
Este es el ciclo de autorreplicación:
Infección inicial: Una cuenta de desarrollador comprometida envía el código malicioso invisible a una extensión legítima.
Recopilación de credenciales: La carga útil invisible se ejecuta y roba nuevas credenciales de los desarrolladores víctimas.
Propagación automatizada: Las credenciales robadas se utilizan para comprometer paquetes y extensiones adicionales en los mercados.
Crecimiento exponencial: Cada nueva máquina de desarrollador infectada se convierte en un punto de lanzamiento, un "vector de infección", lo que conduce a un crecimiento exponencial en todo el ecosistema de desarrollo de software.
Este mecanismo pone de relieve un cambio fundamental y preocupante en el panorama de las amenazas. Los atacantes ya no se conforman con compromisos puntuales, sino que están creando malware autónomo y autosostenible que puede propagarse rápidamente. Su naturaleza autopropagable, combinada con código invisible, blockchain C2 y capacidades RAT completas, convierte a GlassWorm en un nuevo referente en cuanto a atacantes a la cadena de suministro.
Indicadores de compromiso (IoC) y recomendaciones
El ataque de GlassWorm ya era una amenaza activa y continua desde antes de su descubrimiento. Los usuarios que habían instalado extensiones infectadas se vieron comprometidos de inmediato.
Extensiones comprometidas conocidas
La primera oleada de extensiones comprometidas se dirigió principalmente al Open VSX Marketplace, con un caso detectado en el VS Code Marketplace de Microsoft (posteriormente eliminado):
Marketplace | Nombre de la extensión | Versiones afectadas |
Open VSX | codejoy.codejoy-vscode-extension | 1.8.3, 1.8.4 |
Open VSX | l-igh-t.vscode-theme-seti-folder | 1.2.3 |
Open VSX | kleinesfilmroellchen.serenity-dsl-syntaxhighlight | 0.3.2 |
Open VSX | JScearcy.rust-doc-viewer | 4.2.1 |
Open VSX | SIRILMP.dark-theme-sm | 3.11.4 |
Open VSX | CodeInKlingon.git-worktree-menu | 1.0.9, 1.0.91 |
Open VSX | ginfuru.better-nunjucks | 0.3.2 |
Open VSX | ellacrity.recoil | 0.7.4 |
Open VSX | grrrck.positron-plus-1-e | 0.0.71 |
Open VSX | jeronimoekerdt.color-picker-universal | 2.8.91 |
Open VSX | srcery-colors.srcery-colors | 0.3.9 |
Open VSX | sissel.shopify-liquid | 4.0.1 |
Open VSX | TretinV3.forts-api-extention | 0.3.1 |
MS VS Code | cline-ai-main.cline-ai-agent | 3.1.3 |
Infraestructura e IoCs persistentes
Direcciones IP C2 principales: 217.69.3.218, 199.247.10.166
Puntos finales de exfiltración: 140.82.52.31:80/wall, 199.247.13.106:80/wall
Billetera Solana (atacante): 28PKnu7RzizxBzFPoLp69HLXp9bJL3JFtT2s5QzHsEA2
Enlace C2 de Google Calendar: https://calendar.app.google/M2ZCvM8ULL56PD1d6
Mecanismos de persistencia (registro de Windows): Claves establecidas en HKCU\Software\Microsoft\Windows\CurrentVersion\Run y HKLM\Software\Microsoft\Windows\CurrentVersion\Run para garantizar el reinicio automático en caso de fallo.
Acciones recomendadas
Cualquier organización o desarrollador que identifique estos IoC en su infraestructura debe asumir inmediatamente que ha sido comprometida.
Para sistemas infectados (medidas inmediatas):
Poner en cuarentena y reformatear: La medida más segura es asumir que la máquina está totalmente comprometida y aislarla inmediatamente, y luego formatearla para garantizar la eliminación del módulo ZOMBI.
Rotar todos los secretos: Rota todas las credenciales y secretos utilizados en la máquina infectada, incluyendo:
Tokens de NPM
Credenciales de GitHub y Git
Tokens de Open VSX y VS Code
Todas las contraseñas y claves API almacenadas
Supervisar la actividad financiera: Audita y supervisa de cerca toda la actividad de las billeteras de criptomonedas para detectar transacciones no autorizadas.
Para todos los desarrolladores (medidas preventivas):
Auditoría vigilante de extensiones: Audita periódicamente todas las extensiones de VS Code instaladas comparándolas con listas de extensiones comprometidas conocidas y comprueba si hay actividad anómala (p. ej., conexiones de red sospechosas, uso extraño de API).
Desactivar las actualizaciones automáticas: Considera la posibilidad de desactivar la función de actualización automática predeterminada para las extensiones en favor de un proceso de revisión manual.
Evaluar las extensiones: Antes de instalarlas, evalúa minuciosamente las extensiones comprobando la reputación del editor, el historial de revisiones y la frecuencia de actualización, y asegúrate de instalar solo aquellas que sean absolutamente necesarias.
Control centralizado: En el caso de las empresas, considera la posibilidad de implementar una lista blanca centralizada para las extensiones de VS Code con el fin de minimizar la superficie de ataque.
La aparición de GlassWorm indica que el campo de batalla para la seguridad de la cadena de suministro sigue cambiando radicalmente. La amenaza ya no se limita a los registros de código comprometidos, sino que ahora incluye gusanos autónomos diseñados para propagarse exponencialmente por todo el ecosistema de desarrollo, utilizando técnicas que son invisibles al ojo humano y altamente resistentes al derribo de la infraestructura. La vigilancia y las prácticas de seguridad robustas son ahora más críticas que nunca.
Si tienes alguna pregunta, no dudes en contactarnos a help@fluidattacks.com. Te invitamos a que accedas a la prueba gratuita de nuestro plan Essential de Hacking Continuo durante 21 días.
Empieza ya con el PTaaS de Fluid Attacks
Suscríbete a nuestro boletín
Mantente al día sobre nuestros próximos eventos y los últimos blog posts, advisories y otros recursos interesantes.
Otros posts
















