401 paquetes maliciosos en 5 horas: el ataque que está destruyendo la confianza en el código abierto

Código en pantalla con alertas de seguridad representando el ataque a la cadena de suministro open source
El ataque Mini Shai-Hulud comprometió 170+ paquetes open source usando el propio sistema de firma criptográfica de GitHub como arma.

Imagina que actualizas una librería y te roban todo

Sucede más seguido de lo que crees. El 14 de julio de 2026, un grupo de hackers conocido como TeamPCP publicó 401 versiones maliciosas de 170 paquetes en los registros de npm y PyPI en cuestión de horas. No era un ataque cualquiera: usaron el propio sistema de firma criptográfica de GitHub (SLSA provenance) para que los paquetes infectados parecieran legítimos.

El ataque, bautizado "Mini Shai-Hulud" (como el gusano de arena de Dune), representa la escalada más agresiva en la guerra contra la cadena de suministro del software. Y si trabajas con JavaScript, Python o cualquier stack moderno, te afecta directamente.

📊 Dato shockeante: En solo 5 horas, TeamPCP publicó más paquetes maliciosos que cualquier otro grupo en todo 2025. El ritmo fue de 1.3 paquetes por minuto.

¿Quién fue víctima del ataque Mini Shai-Hulud?

La lista de proyectos comprometidos lee como un quien es quién del desarrollo moderno:

Algunos de estos paquetes, como TanStack Router, se usan en aplicaciones de React, Vue y Solid en millones de proyectos alrededor del mundo. Cualquier desarrollador que haya hecho npm install entre el 11 y el 14 de julio pudo haber descargado una versión infectada sin saberlo.

3 vulnerabilidades encadenadas: así rompieron la cadena de confianza

Lo más aterrador del ataque no es el volumen sino la sofisticación técnica. Los atacantes encadenaron tres vulnerabilidades conocidas para lograr lo que parecía imposible: publicar paquetes maliciosos con firma válida de SLSA provenance.

  1. "Pwn Request" — Abusaron de pull_request_target en GitHub Actions para ejecutar código malicioso desde un fork
  2. Cache poisoning — Envenenaron la caché de GitHub Actions cruzando el límite fork↔base
  3. Extracción de token OIDC — Extrajeron el token de identidad de GitHub Actions directamente de la memoria del proceso runner

Con el token OIDC robado, los atacantes obtuvieron un certificado de firma de Sigstore que hacía que los paquetes maliciosos aparecieran como autenticados y verificados. SLSA provenance, el estándar diseñado para garantizar la integridad del software, fue completamente neutralizado.

"El gusano pudo producir certificados SLSA porque secuestró el pipeline de build legítimo" — Snyk

El payload: un gusano de 2.3 MB que lo roba todo

Dentro de cada paquete NPM comprometido viajaba un archivo llamado router_init.js de 2.3 MB ofuscados en una sola línea de JavaScript. Este archivo contenía un implant multicapas que:

En la variante Python (que afectó a Guardrails AI y Mistral AI), el payload tenía solo 13 líneas de código que descargaban y ejecutaban un módular credential stealer desde un servidor remoto. Cuando detectaba que el sistema estaba en Israel o Irán, reproducía un archivo MP3 al volumen máximo y borraba todos los archivos del sistema.

3 canales de exfiltración — uno imposible de cerrar

El gusano no se conformaba con robar credenciales. Las exfiltraba por tres vías simultáneas:

  1. git-tanstack[.]com — dominio dedicado controlado por los atacantes
  2. Repositorios GitHub con nombres temáticos de Dune, creados con tokens robados
  3. Session network — red descentralizada y resistente a bloqueos, significativamente más difícil de desmantelar que dominios o canales tradicionales

El uso de Session network como canal de exfiltración es una novedad que preocupa a los equipos de seguridad. "Descentralizado y resistente a derribo", explica Wiz, "es significativamente más difícil de interrumpir que dominios dedicados o la exfiltración basada en GitHub".

Autopropagación: cómo el gusano se replicaba solo

Una vez dentro de un entorno de CI/CD, el gusano no se quedaba quieto. Usaba el token OIDC de GitHub Actions para solicitar un token de publicación de npm con la identidad del mantenedor legítimo. Luego:

El daemon también verificaba el idioma del sistema para evitar infectar sistemas en ruso — un indicador clásico de ataques con origen en países de habla no rusa.

Más de 5,500 repositorios comprometidos: el panorama completo

El ataque Mini Shai-Hulud no fue un incidente aislado. Forma parte de una oleada masiva de ataques a la cadena de suministro que incluye:

En total, se estima que más de 10,000 repositorios han sido afectados por ataques de supply chain en las últimas dos semanas. La comunidad open source está en estado de alerta máxima.

Cómo protegerte: 5 acciones inmediatas

Si eres desarrollador o mantienes proyectos open source, esto es lo que debes hacer ahora mismo:

  1. Audita tus dependencias — Revisa si tienes versiones comprometidas de TanStack, Mistral AI, UiPath, Guardrails AI o Squawk en tu proyecto. Usa npm audit y pip audit con las últimas bases de datos.
  2. Rota todas tus credenciales — Si hiciste npm install o pip install en los últimos 7 días, asume que tus tokens, claves API y secrets de CI/CD están comprometidos. Rótalos inmediatamente.
  3. Revisa tus workflows de GitHub Actions — Busca configuraciones de pull_request_target que puedan ser vulnerables a cache poisoning. Implementa OIDC con restricciones estrictas.
  4. Activa la verificación de proveniencia — Usa npm audit signatures y herramientas como socket.dev o snyk para detectar paquetes con firmas sospechosas.
  5. Congela tus versiones — Hasta que pase la tormenta, considera usar lockfiles con versiones exactas y revisa manualmente cualquier actualización de dependencias.

La confianza en el open source está en juego

El ataque Mini Shai-Hulud expone una verdad incómoda: los mecanismos de confianza del código abierto están rotos. SLSA provenance, diseñado para garantizar que un paquete viene de una fuente confiable, fue utilizado como arma para hacer que paquetes maliciosos parecieran legítimos. GitHub Actions, la plataforma de CI/CD más usada del mundo, fue el vector de propagación.

No es un problema técnico menor. Es una crisis de confianza. Si cada vez que haces npm install o pip install corres el riesgo de descargar un gusano que roba tus credenciales y se propaga a tus repositorios, el modelo completo de desarrollo moderno necesita repensarse.

¿La solución? No la hay fácil. Pero por ahora, la precaución extrema es la única defensa. Y tal vez, como dijo un desarrollador en Hacker News tras el ataque: "Ya no voy a ejecutar npm install nunca más sin auditar cada línea."

Comparte esto con ese compañero que hace npm install --save sin mirar. Porque la próxima vez, el paquete que instale podría ser el que vacíe sus cuentas.

Fuentes: SecurityWeek, WIRED, TechCrunch, Snyk, Wiz, Socket, StepSecurity, The Register, Ars Technica, BleepingComputer.