Malware GlassWorm

Una nueva oleada de la campaña de malware GlassWorm está atacando activamente las cadenas de suministro de software mediante la explotación de tokens robados de GitHub para inyectar código malicioso en cientos de repositorios. Esta operación se centra principalmente en proyectos basados en Python, incluyendo aplicaciones Django, código de investigación de aprendizaje automático, paneles de control de Streamlit y paquetes de PyPI.

El vector de ataque es engañosamente simple pero altamente efectivo: se añade malware ofuscado a archivos de uso común como setup.py, main.py y app.py. Cualquier desarrollador que instale dependencias mediante pip install o ejecute código clonado de un repositorio comprometido activa, sin saberlo, la carga maliciosa.

Tomas de control silenciosas de repositorios: La técnica ForceMemo

Esta evolución de la campaña, ahora conocida como ForceMemo, introduce un método sigiloso para comprometer los repositorios. Los ciberdelincuentes acceden a las cuentas de los desarrolladores y manipulan los repositorios sin dejar rastros convencionales.

Al modificar confirmaciones legítimas con código malicioso y forzar su envío a la rama principal, los atacantes conservan los metadatos originales de las confirmaciones, como el mensaje, el autor y la marca de tiempo, enmascarando así la intrusión. Este método elimina indicadores visibles como las solicitudes de extracción o los historiales de confirmaciones sospechosas, lo que dificulta considerablemente su detección.

Cadena de ejecución de ataques: desde el robo de credenciales hasta la entrega de la carga útil.

La campaña ForceMemo sigue un proceso de intrusión estructurado y en varias etapas:

  • Los entornos de desarrollo se ven comprometidos inicialmente mediante extensiones maliciosas de Visual Studio Code y Cursor que contienen componentes GlassWorm diseñados para obtener credenciales confidenciales, incluidos los tokens de GitHub.
  • Posteriormente, las credenciales robadas se utilizan para inyectar cargas útiles ofuscadas codificadas en Base64 en archivos Python de todos los repositorios asociados a la cuenta comprometida.
  • El malware integrado realiza comprobaciones del entorno, evitando en particular su ejecución en sistemas configurados con la configuración regional rusa. A continuación, consulta una billetera de la cadena de bloques Solana para obtener dinámicamente la URL de entrega de la carga útil.
  • Se descargan cargas útiles adicionales, incluido código JavaScript cifrado diseñado para el robo de criptomonedas y la exfiltración de datos.

Sistema de mando y control basado en blockchain: una infraestructura resiliente

Una característica distintiva de esta campaña es su dependencia de la cadena de bloques Solana como mecanismo de comando y control (C2). En lugar de servidores tradicionales, los atacantes almacenan las URL de la carga útil dentro de los campos de notas de las transacciones, vinculados a direcciones de billetera específicas.

El análisis revela que la actividad vinculada a la billetera principal comenzó ya el 27 de noviembre de 2025, meses antes de que se detectaran las vulnerabilidades en el repositorio. La billetera procesó docenas de transacciones, y la ubicación de los datos se actualizó con frecuencia, a veces varias veces al día. Este enfoque descentralizado aumenta la resiliencia y dificulta los intentos de desmantelamiento.

Ampliando la superficie de ataque: npm e infecciones entre ecosistemas

La campaña se ha extendido más allá de los ecosistemas de Python, llegando a las cadenas de suministro de JavaScript. Dos paquetes npm de React Native, react-native-international-phone-number (versión 0.11.8) y react-native-country-select (versión 0.3.91), se vieron comprometidos temporalmente y se distribuyeron con malware incrustado.

Estas versiones maliciosas introdujeron ganchos de preinstalación que ejecutan JavaScript ofuscado, lo que inicia una cadena de infección similar. El malware, una vez más, evita los sistemas rusos, obtiene las instrucciones de la carga útil a través de una billetera Solana y despliega amenazas específicas para cada plataforma.

La ejecución se realiza completamente en memoria mediante técnicas de tiempo de ejecución como `eval()` o el aislamiento de procesos (sandboxing) de Node.js, lo que minimiza la cantidad de rastros forenses. Además, un mecanismo de persistencia evita la reinfección en un plazo de 48 horas almacenando localmente una marca de tiempo.

Tácticas avanzadas de evasión y distribución

Las versiones recientes de GlassWorm demuestran una mayor sofisticación en la distribución y ocultación. Aprovechando los mecanismos extensionPack y extensionDependencies, los atacantes distribuyen cargas útiles maliciosas de forma transitiva a través de ecosistemas de extensiones de confianza.

Campañas anteriores vinculadas al mismo actor malicioso comprometieron más de 151 repositorios de GitHub utilizando caracteres Unicode invisibles para ocultar código malicioso. A pesar de las diversas estrategias de ofuscación y distribución, todas las campañas se basan consistentemente en la misma infraestructura Solana, lo que confirma un marco operativo unificado.

Extensiones IDE maliciosas: Dirigidas a entornos de desarrollo

La campaña también se ha infiltrado en las herramientas de desarrollo mediante una extensión maliciosa identificada como reditorsupporter.r-vscode-2.8.8-universal, dirigida al IDE Windsurf. Disfrazada de complemento de soporte para el lenguaje R, implementa un programa malicioso basado en Node.js para robar información.

Una vez instalada, la extensión recupera las cargas útiles cifradas de las transacciones de la cadena de bloques, las ejecuta en memoria y despliega componentes compilados para extraer datos confidenciales de los navegadores basados en Chromium. La persistencia se logra mediante tareas programadas y modificaciones del Registro de Windows, lo que garantiza su ejecución al iniciar el sistema.

Este malware ataca específicamente los entornos de desarrollo, excluyendo los sistemas rusos, reflejando el comportamiento observado en otras variantes de GlassWorm.

Indicadores de escala e impacto

Los análisis de seguridad indican que la campaña ha comprometido una parte sustancial del ecosistema de código abierto, afectando a más de 433 proyectos en múltiples plataformas. Estos incluyen repositorios de GitHub (Python y JavaScript), extensiones de VS Code y bibliotecas npm.

Todas las vías de infección convergen finalmente en el despliegue de un programa de robo de información basado en JavaScript, lo que pone de manifiesto un objetivo final constante: la obtención de credenciales y la exfiltración de datos.

  • Más de 433 proyectos y paquetes comprometidos confirmados
  • Múltiples canales de entrega, incluyendo GitHub, npm y extensiones de IDE.
  • Uso constante de la infraestructura blockchain de Solana para la entrega de carga útil.
  • Exclusión reiterada de sistemas rusos en todas las variantes.

Evaluación estratégica: Una nueva era de ataques a la cadena de suministro

La campaña ForceMemo representa una escalada significativa en las amenazas a la cadena de suministro de software. Su combinación de manipulación sigilosa del historial de Git, infraestructura C2 basada en blockchain y vectores de infección multiplataforma demuestra un alto nivel de madurez operativa.

La reutilización de la infraestructura, junto con la evolución de los mecanismos de entrega, indica la existencia de un adversario adaptable capaz de escalar los ataques manteniendo la persistencia y la evasión. Este cambio, desde ataques aislados hasta intrusiones coordinadas en múltiples ecosistemas, subraya el creciente riesgo al que se enfrentan los entornos de desarrollo modernos y las comunidades de código abierto.

Tendencias

Mas Visto

Cargando...