
La campaña de malware GlassWorm se está utilizando para impulsar un ataque continuo que aprovecha tokens de GitHub robados para inyectar malware en cientos de repositorios de Python.
«Este ataque apunta a proyectos Python, incluidas aplicaciones Django, código de investigación de aprendizaje automático, paneles Streamlit y paquetes PyPI, agregando código ofuscado a archivos como setup.py, main.py y app.py», dijo StepSecurity. «Ejecutar pip install o clonar y ejecutar código desde un repositorio comprometido activará el malware».
La primera inyección se remonta al 8 de marzo de 2026, según la empresa de seguridad de la cadena de suministro de software. Una vez que el atacante obtiene acceso a la cuenta de desarrollador, utiliza código malicioso para cambiar la base de la última confirmación legítima en la rama predeterminada del repositorio de destino, lo que obliga a enviar los cambios manteniendo intactos el mensaje, el autor y la fecha del autor de la confirmación original.
Esta nueva rama de la campaña GlassWorm tiene el nombre en código ForceMemo. El ataque se realiza en cuatro pasos:
Comprometer los sistemas de los desarrolladores con el malware GlassWorm mediante extensiones maliciosas de VS Code y Cursor. Este malware incluye un componente dedicado a robar secretos como tokens de GitHub. Las credenciales robadas se utilizan para forzar la introducción de cambios maliciosos en todos los repositorios administrados por la cuenta de GitHub comprometida al reubicar el malware ofuscado en archivos Python llamados «setup.py», «main.py» y «app.py». La carga útil codificada en Base64 agregada al final del archivo Python tiene una verificación similar a GlassWorm para determinar si la configuración regional del sistema está configurada en ruso. Si está presente, se omitirá la ejecución. De lo contrario, el malware extrae la URL de la carga útil consultando el campo de nota de transacción asociado con la billetera Solana (“BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC”) que estaba previamente vinculada a GlassWorm. Descarga cargas útiles adicionales del servidor, incluido JavaScript cifrado diseñado para robar criptomonedas y datos.

«La transacción más antigua en la dirección C2 se remonta al 27 de noviembre de 2025, más de tres meses antes de la primera inyección del repositorio de GitHub el 8 de marzo de 2026», dijo StepSecurity. «Esta dirección tiene un total de 50 transacciones y el atacante actualiza la URL de la carga útil periódicamente, a veces varias veces al día».
Esta divulgación se produjo cuando Socket marcó una nueva versión de GlassWorm. Aunque técnicamente mantiene el mismo oficio principal, esta iteración aprovecha extensionPack y extensionDependency para mejorar la capacidad de supervivencia y la evasión mediante la entrega de cargas útiles maliciosas a través de un modelo de distribución transitivo.
Al mismo tiempo, Aikido Security identificó a los creadores de GlassWorm como responsables de una campaña a gran escala que comprometió más de 151 repositorios de GitHub con código malicioso oculto mediante caracteres Unicode invisibles. Curiosamente, la carga útil decodificada está configurada para obtener instrucciones C2 de la misma billetera Solana, lo que indica que los actores de amenazas están apuntando a los repositorios de GitHub en múltiples oleadas.
El uso de diferentes métodos de entrega y ofuscación de código, pero la misma infraestructura de Solana, sugiere que ForceMemo es un nuevo vector de entrega mantenido y operado por los actores de amenazas GlassWorm. Los atacantes GlassWorm ahora han pasado de comprometer las extensiones de VS Code a apoderarse de cuentas de GitHub de manera más amplia.
«Un atacante inyecta malware forzando la rama predeterminada de un repositorio comprometido», señala StepSecurity. «Esta técnica reescribe el historial de Git, conserva el mensaje de confirmación y el autor originales y no deja rastros de solicitudes de extracción o confirmaciones en la interfaz de usuario de GitHub. No hay otras campañas documentadas de la cadena de suministro que utilicen esta técnica».
Source link
