Mini Shai-Hulud Ataca de Nuevo: Ataque a la Cadena de Suministro Comprometió Paquetes de TanStack, UiPath y Mistral AI
Un sofisticado ataque a la cadena de suministro, denominado 'Mini Shai-Hulud', ha comprometido numerosos paquetes de **npm** y **PyPI**, incluyendo los de **TanStack**, **UiPath**, **Mistral AI**, **OpenSearch** y **Guardrails AI**. El ataque, atribuido al actor de amenazas **TeamPCP**, aprovecha GitHub Actions y tokens OIDC secuestrados para distribuir malware y robar credenciales sensibles.

La última campaña de **TeamPCP**, denominada Mini Shai-Hulud, muestra una evolución en las tácticas de ataque a la cadena de suministro, impactando la integridad de los ecosistemas de desarrollo de software.
### Técnicas de Robo de Credenciales y Evasión
Los paquetes **npm** comprometidos han sido modificados para incluir un archivo JavaScript ofuscado ("router_init.js"). Este script malicioso perfila el entorno de ejecución y despliega un completo ladrón de credenciales. El ladrón apunta a proveedores de nube, billeteras de criptomonedas, herramientas de IA, aplicaciones de mensajería y sistemas CI como Github Actions. Informes de **Aikido Security**, **Endor Labs**, **SafeDep**, **Socket**, **StepSecurity** y **Snyk** detallan el ataque, señalando que los datos exfiltrados se envían a "filev2.getsession[.]org".
Los atacantes están utilizando infraestructura de Session Protocol, probablemente para evadir la detección mezclándose con el tráfico legítimo del servicio de mensajería centrado en la privacidad. Como respaldo, los datos cifrados también se envían a repositorios controlados por el atacante bajo el nombre de autor "[email protected]" a través de la API GraphQL de GitHub, utilizando tokens de GitHub robados.
### Persistencia y Movimiento Lateral
El malware demuestra persistencia al establecer ganchos en **Claude Code** y **Microsoft Visual Studio Code** (**VS Code**), asegurando que el ladrón se re-ejecute en cada inicio de los IDE. Se instala un servicio `gh-token-monitor` para monitorear y re-exfiltrar continuamente los tokens de GitHub. Además, se inyectan flujos de trabajo maliciosos de GitHub Actions para serializar los secretos del repositorio en un objeto JSON y cargar los datos a un servidor externo ("api.masscan[.]cloud").
### Vectores de Infección en Evolución
A diferencia de ataques anteriores dirigidos a paquetes **SAP**, esta campaña emplea una nueva estrategia. En lugar de ganchos de preinstalación, el archivo JavaScript malicioso se incluye dentro del tarball del paquete, junto con una dependencia opcional que apunta a un paquete alojado en GitHub. Esta dependencia de GitHub contiene un gancho de ciclo de vida `prepare` que ejecuta el payload JavaScript utilizando el runtime de **Bun**.
Para los paquetes de **Mistral AI**, el ataque revierte al enfoque anterior, reemplazando el contenido del archivo `package.json` con un gancho de preinstalación para invocar `node setup.mjs`, que descarga **Bun** y ejecuta el mismo malware JavaScript.
### CVE-2026-45321: Vulnerabilidad Crítica en TanStack
El compromiso de la cadena de suministro de **TanStack** se rastrea como **CVE-2026-45321**, con una puntuación CVSS crítica de 9.6 sobre 10.0. El incidente ha afectado a 42 paquetes y 84 versiones en todo el ecosistema de **TanStack**.
**TanStack** rastreó el compromiso hasta un ataque en cadena de GitHub Actions que involucraba el disparador `pull_request_target`, el envenenamiento de caché de GitHub Actions y la extracción de memoria en tiempo de ejecución de un token OIDC del proceso del runner de GitHub Actions. Según **TanStack**, no se robaron tokens **npm**, y el flujo de trabajo de publicación **npm** en sí mismo no fue comprometido directamente.

El investigador de **StepSecurity**, Ashish Kurmi, destacó que las versiones maliciosas se publicaron a través del pipeline de lanzamiento de GitHub Actions del propio proyecto utilizando tokens OIDC secuestrados. Notablemente, los paquetes comprometidos llevan las debidas atestaciones de procedencia SLSA Build Level 3, lo que lo convierte en el primer gusano npm documentado en producir paquetes maliciosos debidamente atestados. El gusano se ha propagado desde **TanStack** a paquetes de **UiPath**, DraftLab y otros mantenedores.
### Abuso de Publicación Confiable y Tokens OIDC
El ataque aprovecha la publicación confiable, permitiendo que el código controlado por el atacante que se ejecuta dentro de un flujo de trabajo utilice sus permisos OIDC para acuñar un token de publicación de corta duración durante la compilación y usarlo para publicar los paquetes sin necesidad de robar un token **npm**. El gusano se propaga localizando un token **npm** publicable con `bypass_2fa` establecido en true, enumerando los paquetes publicados por el mismo mantenedor e intercambiando un token OIDC de GitHub por un token de publicación por paquete.
El investigador de **Endor Labs**, Peyton Kennedy, explicó que el commit huérfano activó una ejecución de flujo de trabajo de GitHub Actions contra la superficie legítima del flujo de trabajo de **TanStack/router**. Debido a que la configuración del editor de confianza OIDC del repositorio otorgaba confianza a nivel de repositorio en lugar de estar limitada a una rama protegida específica y un archivo de flujo de trabajo, la ejecución del flujo de trabajo activada por ese commit pudo solicitar un token de publicación **npm** válido de corta duración.
### Dead-Man's Switch y Payload Destructivo
Una nueva táctica introducida en el malware JavaScript ofuscado es la instalación de un "dead-man's switch" (interruptor del hombre muerto). Este interruptor utiliza un script de shell para verificar periódicamente si un token **npm** creado por el malware es revocado, consultando el endpoint `api.github.com/user` cada 60 segundos. El token se describe como "IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner" (Si revocas este token, borrará la computadora del propietario).
Si el desarrollador revoca el token de su panel de **npm**, el script activa una rutina destructiva que ejecuta `rm -rf ~/` en la máquina infectada, convirtiéndola efectivamente en malware wiper. Se aconseja a los desarrolladores que no revoquen los tokens **npm** antes de aislar e imaginar el sistema.
### Implicaciones Más Amplias y Estrategias de Defensa
La líder de investigación de seguridad de **Upwind**, Avital Harel, enfatizó que esta campaña refleja un cambio en los ataques a la cadena de suministro hacia la propagación impulsada por la identidad a través de infraestructura CI/CD confiable. Con los atacantes obteniendo acceso a los flujos de trabajo de publicación y las identidades de las canalizaciones, el proceso de entrega de software se convierte en el mecanismo de distribución. La defensa contra esto requiere una visibilidad conductual mejorada durante las instalaciones y compilaciones.
### Paquetes Afectados
Además de **TanStack**, la campaña Mini Shai-Hulud se ha propagado a los siguientes paquetes:
* [email protected] (PyPI)
* [email protected] (PyPI)
* @opensearch-project/[email protected], 3.6.2, 3.7.0 y 3.8.0
* @squawk/[email protected]
* @squawk/[email protected]
* @squawk/[email protected]
* @tallyui/[email protected], 1.0.2 y 1.0.3
* @tallyui/[email protected], 1.0.2 y 1.0.3
**OX Security** informa que el incidente ha afectado a más de 170 paquetes que abarcan los registros **npm** y **PyPI**, con más de 518 millones de descargas acumuladas. Se han creado más de 400 repositorios con credenciales robadas como parte de la ola de ataques, todos conteniendo la cadena "Shai-Hulud: Here We Go Again".
**Wiz**, propiedad de **Google**, informó que el payload también exfiltra credenciales robadas a través de un tercer canal redundante.