Alerta por GlassWorm: malware se infiltra en repositorios de Python
Publicado el
Introducción
La campaña de malware GlassWorm ha cobrado fuerza al utilizar tokens robados de GitHub para insertar código malicioso en numerosos repositorios de Python. Este ataque se dirige a proyectos de Python, como aplicaciones de Django, código de investigación en Machine Learning, paneles de Streamlit y paquetes de PyPI.
Mecanismo del ataque
Según StepSecurity, el ataque inicia con la inyección de código ofuscado en archivos clave como `setup.py`, `main.py` y `app.py`. Cualquier usuario que ejecute `pip install` desde un repositorio comprometido o clone y ejecute dicho código activará el malware. El primer caso documentado de estas inyecciones se remonta al 8 de marzo de 2026.
Una vez que los atacantes acceden a las cuentas de desarrolladores, reescriben los commits legítimos en la rama por defecto de los repositorios afectados, añadiendo código malicioso, y realizan un force-push de los cambios, conservando el mensaje original del commit, autor y fecha.
Fases del ataque
El modus operandi de este ataque, conocido como ForceMemo, se desarrolla en cuatro pasos: 1. Compromiso de sistemas de desarrolladores a través de extensiones maliciosas de VS Code y Cursor. 2. Robo de secretos, como los tokens de GitHub, mediante componentes dedicados del malware. 3. Uso de credenciales robadas para realizar force-push de cambios maliciosos en todos los repositorios del cuenta de GitHub comprometida, añadiendo malware ofuscado a archivos de Python. 4. Descarga de cargas adicionales desde un servidor, incluyendo JavaScript encriptado diseñado para robar criptomonedas y datos.
Un detalle inquietante es que la carga útil, codificada en Base64, incluye un chequeo para determinar si la configuración regional del sistema es rusa, evitando su ejecución en esos casos. En otros escenarios, el malware consulta el campo de transacción de una cartera de Solana previamente vinculada a GlassWorm para extraer la URL de la carga útil.
Evolución del ataque
La actividad del atacante ha sido documentada desde el 27 de noviembre de 2025, con más de 50 transacciones en la dirección de control. La dirección ha sido actualizada frecuentemente, a veces varias veces al día.
Recientemente, Socket ha identificado una nueva iteración de GlassWorm que, aunque mantiene el mismo núcleo, mejora la supervivencia y evasión mediante el uso de `extensionPack` y `extensionDependencies` para entregar la carga maliciosa a través de un modelo de distribución transitiva. Aikido Security también ha atribuido al autor de GlassWorm una campaña masiva que comprometió más de 151 repositorios de GitHub, ocultando el código malicioso mediante caracteres Unicode invisibles.
Impacto en NPM y medidas de seguridad
Además, se han visto comprometidos dos paquetes de React Native — `react-native-international-phone-number` y `react-native-country-select` — que fueron utilizados para impulsar versiones maliciosas directamente en el registro, sin una correspondiente liberación en GitHub. Esta actividad se considera parte de la campaña ForceMemo.
Los ataques han afectado a más de 433 proyectos y paquetes a través de repositorios de Python y JavaScript en GitHub, extensiones de VS Code y bibliotecas de NPM. Todos estos ataques culminan en la ejecución de la misma carga final, un stealer de información escrito en JavaScript. Las medidas de seguridad deben centrarse en la verificación de la autenticidad de los paquetes y en el uso de prácticas seguras de desarrollo para mitigar el riesgo de compromisos futuros.