Microsoft Threat Intelligence reveló detalles de un ataque generalizado contra la cadena de suministro de npm que afectó a más de 400 paquetes vinculados a publicadores aparentemente no relacionados, incluidos paquetes de ecosistemas de software empresariales como keyv, flat-cache y cache-manager. Las versiones maliciosas incluían una variante del gusano Mini Shai-Hulud, una carga útil de JavaScript basada en Bun y altamente ofuscada, diseñada para robar credenciales y propagarse automáticamente mediante la republicación de actualizaciones maliciosas.
Este ataque es especialmente relevante por su funcionamiento: el malware no se limita a robar tokens de un dispositivo de desarrollador o de un entorno de compilación, sino que aprovecha esos tokens para acceder a npm, GitHub, Amazon Web Services, Kubernetes y HashiCorp Vault, y después inspecciona los recursos y secretos permitidos por las identidades robadas. Según el análisis de Microsoft publicado el 4 de agosto de 2026, cualquier estación de trabajo o agente de compilación que haya importado un paquete afectado, con los scripts del ciclo de vida de npm habilitados, debe considerarse comprometido.
Ejecución temprana en entornos de desarrollo
Las versiones afectadas normalmente incluían un script preinstall que ejecutaba un archivo llamado setup.mjs antes de que finalizara la instalación del paquete. El archivo inicia una gran carga útil de Bun ofuscada, lo que permite ejecutar el malware en los dispositivos de los desarrolladores y en los nodos de compilación antes de que comiencen las pruebas de la aplicación o de que algunas comprobaciones de seguridad tradicionales lleguen a esta etapa.
El gusano inspecciona primero el entorno para determinar si se ejecuta en una estación de trabajo de desarrollador o dentro de una tarea de CI/CD. En los dispositivos de desarrolladores, se desacopla para continuar ejecutándose en segundo plano después de finalizar la instalación, mientras que en los entornos CI/CD permanece vinculado a la tarea para aprovechar los secretos del flujo de trabajo, las credenciales del agente y los permisos de publicación mediante OpenID Connect. También comprueba que no se esté ejecutando otra instancia y se detiene en sistemas configurados con el idioma ruso, según observó Microsoft.
Robo de credenciales y conversión en propagación
La carga útil comienza recopilando los archivos de credenciales disponibles localmente, las variables de entorno, el historial de comandos, las claves SSH y las herramientas en la nube, además de datos de la memoria de los agentes de GitHub Actions. Entre otras cosas, intenta obtener un token de GitHub CLI. Después utiliza las credenciales extraídas para invocar las API de npm, GitHub, AWS, Kubernetes y HashiCorp Vault, comprobar los permisos y recopilar secretos adicionales.
Los resultados se cifran como JSON comprimido mediante AES-256-GCM, con la clave AES cifrada mediante RSA-OAEP-SHA256, y luego se envían a un endpoint HTTPS controlado por el atacante. GitHub se utiliza como canal alternativo de extracción de datos cuando el canal principal no está disponible. Microsoft señaló que la infraestructura activa en el momento del análisis resolvía en el dominio npm-cache[.]com, mientras que anteriormente aparecieron candidatos como pypi-get[.]com y js-mirror[.]com.
En cuanto al mecanismo principal de propagación, el gusano examina los tokens de npm para determinar si permiten escribir en los paquetes o eludir la autenticación de dos factores; después descarga el archivo tarball más reciente de cada paquete disponible para la identidad comprometida. El gusano se copia a sí mismo en el archivo, añade el cargador de configuración y el script del ciclo de vida, incrementa el número de versión de parche y vuelve a publicar el paquete. Esto explica la aparición de versiones maliciosas que parecen actualizaciones patch normales, sin un commit, una solicitud de incorporación de cambios ni una etiqueta de versión correspondiente en el repositorio de origen.
Vías adicionales a través de GitHub
La carga útil comprueba los ámbitos de los tokens de GitHub, contabiliza los repositorios con permisos de escritura y busca repositorios en los que los flujos de trabajo puedan revelar otros secretos. También incluye una ruta dirigida a paquetes de npm publicados mediante GitHub Actions como publicadores de confianza, lo que puede otorgar a las versiones publicadas una procedencia válida, ya que la publicación procede de una identidad legítima de flujo de trabajo.
El gusano también puede inyectar archivos de configuración en ramas de los repositorios, incluidas rutas relacionadas con Claude y Visual Studio Code como .claude/settings.json, .claude/setup.mjs, .vscode/tasks.json y .vscode/setup.mjs. Estas modificaciones proporcionan una vía secundaria de infección que puede volver a ejecutar la carga útil mientras se utiliza Claude o Visual Studio Code, incluso después de que finalice la instalación del paquete original. Microsoft indicó que una de las rutas de respaldo de GitHub también intenta instalar un componente para supervisar tokens, con un controlador destructivo condicional cuando se revoca el token supervisado.
¿Qué recomienda Microsoft?
Microsoft recomienda actualizar npm CLI a la versión 12 y utilizar la función min-release-age, así como revisar los árboles de dependencias, los archivos de bloqueo, los repositorios de artefactos y las cachés de CI en busca de las cinco versiones afectadas, incluidas las referencias indirectas. También se deben fijar versiones conocidas como seguras y limpiar las cachés de npm y yarn en los dispositivos de los desarrolladores y los hosts de compilación, especialmente cuando los archivos comprometidos hayan entrado en una caché de CI compartida.
Si un sistema de compilación o una estación de trabajo importó una versión afectada, se deben rotar las credenciales y los secretos desde un dispositivo limpio, ya que la ejecución de la segunda etapa puede exponer los tokens y afectar a la integridad del proceso de compilación. Las recomendaciones también incluyen habilitar la protección en la nube de Microsoft Defender Antivirus, las mediciones de Microsoft Defender for Endpoint y Microsoft Defender for Containers, así como el flujo de trabajo de investigación de Microsoft Defender XDR en los activos de desarrollo y CI.
La respuesta no debe limitarse al análisis de los dispositivos. Las entidades que producen artefactos de software deben revisar el endurecimiento del proceso de publicación, los ámbitos de los tokens, las aprobaciones de los flujos de trabajo, los entornos protegidos, la procedencia de las versiones y los mecanismos para detectar publicaciones automatizadas inusuales, ya que el incidente es coherente con el abuso de canalizaciones CI/CD mediante permisos OIDC de GitHub Actions. Después de la remediación, se deben reconstruir los proyectos desde una línea base confiable, confirmar la ausencia de indicadores comprometidos en las cachés y los repositorios de artefactos, y revisar la telemetría en busca de restos de Node.js como Math_Symbol.js y Math_init.js, o archivos con nombres similares a math_<guid>.js, además de reconstruir las imágenes base y los agentes de compilación modulares.