Mini Shai-Hulud golpea npm y PyPI: TanStack, Mistral AI, UiPath y OpenSearch, entre los afectados

Mini Shai-Hulud golpea paquetes npm y PyPI usados por devs y CI/CD.

Ana Ambriz imagen de perfil
por Ana Ambriz
Mini Shai-Hulud golpea npm y PyPI: TanStack, Mistral AI, UiPath y OpenSearch, entre los afectados
Photo by Lewis Kang'ethe Ngugi / Unsplash

TL;DR:

La campaña Mini Shai-Hulud comprometió paquetes npm y PyPI usados en entornos de desarrollo y CI/CD.
TanStack confirmó 84 versiones maliciosas en 42 paquetes @tanstack/*; otros reportes elevan el alcance a más de 170 paquetes.
Los equipos que instalaron versiones afectadas deben tratar sus secretos como comprometidos y auditar GitHub Actions, npm, cloud y Kubernetes.

La campaña Mini Shai-Hulud volvió a golpear la cadena de suministro de software con paquetes comprometidos en npm y PyPI, incluyendo artefactos ligados a TanStack, Mistral AI, UiPath, OpenSearch y Guardrails AI. El caso importa porque el malware no solo roba credenciales: también abusó de flujos legítimos de GitHub Actions, OIDC y provenance para publicar versiones maliciosas que podían verse auténticas para desarrolladores y empresas.

Mini Shai-Hulud es una campaña de malware de cadena de suministro que compromete paquetes open source para robar secretos de desarrolladores, runners de CI/CD y servicios cloud, y después intenta propagarse a otros paquetes bajo el control de los mismos mantenedores.

TanStack confirmó que, el 11 de mayo de 2026, entre 19:20 y 19:26 UTC, un atacante publicó 84 versiones maliciosas en 42 paquetes @tanstack/*, combinando tres fallas: el patrón riesgoso pull_request_target, envenenamiento de caché de GitHub Actions y extracción de un token OIDC desde la memoria del runner.

Esa frase de TanStack es clave: el incidente no dependió de un token npm clásico filtrado, sino de código atacante ejecutándose dentro de un flujo con permisos suficientes para obtener credenciales temporales y publicar directamente en el registro.

El punto más delicado es que algunos paquetes maliciosos cargaban provenance SLSA válida y firmas asociadas a infraestructura legítima. En la práctica, eso significa que una señal que muchos equipos usan como “tranquilizante” no bastaba para detectar el ataque.

multicolored codes
Photo by Markus Spiske / Unsplash

El payload: un archivo obfuscado, dependencias sospechosas y robo de secretos

Socket detectó que las versiones maliciosas de TanStack añadieron un archivo router_init.js de aproximadamente 2.3 MB, fuertemente obfuscado, con acceso a variables GITHUB*, staging en directorios temporales y operaciones de exfiltración remota. También apareció una dependencia opcional hacia @tanstack/setup, apuntando al commit 79ac49eedf774dd4b0cfa308722bc463cfe5885c en la red de forks de TanStack/router.

La alerta no se queda en TanStack. Investigadores de seguridad reportaron paquetes afectados en Mistral AI, UiPath, OpenSearch, Guardrails AI, Squawk, TallyUI y otros namespaces. Aikido reportó 373 entradas maliciosas en 169 nombres de paquetes npm, mientras que The Hacker News citó datos de OX Security con más de 170 paquetes entre npm y PyPI y más de 518 millones de descargas acumuladas. Los conteos siguen moviéndose conforme avanza la investigación.

Entre los artefactos señalados por los reportes están:

  • @tanstack/react-router en versiones 1.169.5 y 1.169.8.
  • @opensearch-project/opensearch en versiones 3.5.3, 3.6.2, 3.7.0 y 3.8.0.
  • mistralai en PyPI versión 2.4.6.
  • guardrails-ai en PyPI versión 0.10.1.
  • Paquetes de UiPath y varios artefactos @squawk/ relacionados con herramientas de aviación y datos técnicos.

El caso de [email protected] destaca porque el código malicioso se ejecutaba al importar el paquete: Socket reportó que revisaba sistemas Linux, descargaba transformers.pyz desde git-tanstack.com, lo escribía en /tmp/transformers.pyz y lo ejecutaba con python3 sin verificación de integridad.

Por qué este ataque preocupa más que un paquete infectado común

La alerta técnica no está solo en el número de paquetes. El problema es el tipo de confianza que el atacante logró explotar.

StepSecurity describió la campaña como un gusano capaz de robar secretos de CI/CD, revisar qué paquetes controla un mantenedor y publicar nuevas versiones infectadas. También observó conexiones salientes hacia git-tanstack.com y api.github.com durante una instalación de prueba de @opensearch-project/[email protected].

El malware buscaba credenciales de GitHub Actions, tokens de GitHub, claves SSH, tokens npm, credenciales de AWS, secretos de Kubernetes, Vault y otros datos sensibles. La advisory de GitHub para TanStack, clasificada como crítica, asignó el identificador CVE-2026-45321 y un puntaje CVSS 9.6.

Además, varios reportes describen mecanismos de persistencia en herramientas usadas por desarrolladores, como Claude Code y VS Code, y canales de exfiltración por infraestructura de Session/Oxen, incluyendo filev2.getsession.org.

Para equipos de ingeniería, la lectura es incómoda: una instalación aparentemente normal pudo ejecutar código malicioso antes de que el repositorio, el lockfile o la revisión manual levantaran sospechas.

Qué deben hacer los equipos afectados

Las acciones urgentes no empiezan con “actualizar y seguir”. Si una máquina de desarrollo o runner de CI instaló una versión afectada, hay que tratar el entorno como comprometido.

Medidas recomendadas por TanStack, Socket, Snyk y otros equipos de investigación:

  • Buscar router_init.js en el árbol de dependencias y comparar el hash SHA-256 ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c.
  • Revisar package.json en paquetes @tanstack/* para detectar la dependencia opcional @tanstack/setup apuntando al commit 79ac49eedf774dd4b0cfa308722bc463cfe5885c.
  • Rotar credenciales accesibles desde hosts afectados: npm, GitHub PATs, OIDC trusts, AWS, GCP, Vault, Kubernetes y llaves SSH.
  • Eliminar persistencia en .claude/, .vscode/, servicios gh-token-monitor y workflows sospechosos.
  • Revisar commits con autor [email protected] que no correspondan a actividad legítima.
  • Auditar workflows con pull_request_target, permisos id-token: write y acciones sin pin a SHA.
  • Reinstalar desde lockfiles limpios y fijar versiones conocidas como seguras.

TanStack informó que deprecó versiones afectadas, contactó a npm security para retirar tarballs, purgó cachés de GitHub Actions y aplicó cambios de hardening: reestructurar workflows, agregar validaciones del propietario del repositorio y fijar referencias de acciones de terceros.

La lección más dura de Mini Shai-Hulud es que la confianza en el ecosistema open source ya no puede descansar solo en firmas, badges o provenance. Cuando el atacante entra al flujo de CI/CD, la cadena de entrega completa puede convertirse en vehículo de distribución.

Fuentes: 1, 2, 3, 4, 5, 6, 7

Ana Ambriz imagen de perfil
por Ana Ambriz

Suscríbete GRATIS

Recibe las noticias más importantes de política, tecnología, negocios, deportes, entretenimiento y cultura directamente en tu correo.

¡Listo! Revisa tu correo

Para completar la suscripción, haz clic en el enlace de confirmación que enviamos a tu correo. Si no llega en 3 minutos, revisa tu carpeta de spam.

Ok, gracias

Leer más