En septiembre de 2025 apareció en el ecosistema npm un gusano que cambió las reglas del juego en seguridad de cadena de suministro: Shai-Hulud. Su mecanismo era tan simple como devastador — robar un token de publicación npm, enumerar todos los paquetes accesibles con ese token, inyectar código malicioso y republicarlos automáticamente. Sin intervención humana. Sin límite de propagación.

Lo que siguió fue una escalada continua. En noviembre y diciembre de 2025 llegó Shai-Hulud 2.0, con capacidad de borrado de datos. En marzo de 2026 el grupo TeamPCP backdooreó axios, la librería JavaScript con 100 millones de descargas semanales. En abril apareció Mini Shai-Hulud apuntando al ecosistema SAP. El 11 de mayo de 2026, Microsoft Security Research identificó una nueva oleada que comprometió más de 170 paquetes npm y 2 paquetes PyPI en 404 versiones maliciosas — la primera vez que un solo ataque coordinado abarcaba simultáneamente ambos registros.

Imagen del artículo

🔍 ¿Dudas de un mensaje recibido?

Analiza remitentes, enlaces o archivos en tiempo real con nuestro scanner.

Analizar ahora

Qué es Shai-Hulud y por qué el nombre

Shai-Hulud es el nombre de los gusanos de arena gigantes de la novela Dune de Frank Herbert — criaturas que se desplazan bajo la superficie, invisibles hasta que emergen para devorar todo a su paso. El paralelismo es preciso: el malware vive dentro de la infraestructura de desarrollo, invisible para los sistemas de defensa tradicionales, y se propaga bajo la superficie de los pipelines de CI/CD sin que nadie lo note hasta que el daño está hecho.

Técnicamente es un gusano de cadena de suministro: un malware diseñado específicamente para vivir y reproducirse dentro de los sistemas que los desarrolladores usan para construir software. No ataca ordenadores de usuarios finales — ataca las herramientas que construyen las aplicaciones que usan millones de personas.

Cómo funciona el ataque

El ciclo de infección de Mini Shai-Hulud (la variante de mayo de 2026) es más sofisticado que sus predecesores y no requiere un token robado como punto de entrada. En su lugar usa una cadena de tres técnicas:

1. Cache poisoning en GitHub Actions

El atacante envía una pull request aparentemente legítima al repositorio de un paquete popular. GitHub Actions ejecuta el pipeline de CI/CD para validarla. Durante esa ejecución, el gusano envenena la caché de Actions con código malicioso. La siguiente vez que el pipeline legítimo del mantenedor se ejecute, cargará la caché envenenada.

2. Robo del token OIDC

Los pipelines modernos de npm usan OIDC (OpenID Connect) para publicar paquetes sin almacenar tokens permanentes — es un mecanismo diseñado precisamente para ser más seguro. Mini Shai-Hulud extrae el token OIDC efímero directamente de la memoria del proceso (/proc) durante la ejecución del pipeline comprometido, antes de que expire.

3. Autopropagación

Con el token OIDC robado, el gusano se autentica en el registro npm como el mantenedor legítimo e identifica todos los paquetes a los que ese token tiene acceso de escritura. Inyecta el payload malicioso en cada uno y publica las versiones infectadas. El ataque sobre TanStack comprometió 84 artefactos en 6 minutos.

Qué hace el payload una vez instalado

Cuando un desarrollador ejecuta npm install con un paquete infectado, el payload se ejecuta en la fase preinstall — antes de que ningún test o escáner de seguridad pueda intervenir. Desde ahí:

Paquetes afectados — oleada de mayo 2026

La escala de la oleada del 11 de mayo fue sin precedentes. Entre los ecosistemas comprometidos:

En total, más de 170 paquetes npm y 2 paquetes PyPI en la oleada del 11 de mayo, más 323 paquetes adicionales del ecosistema @antv el 19 de mayo.

Por qué las defensas tradicionales no lo detectan

Mini Shai-Hulud introduce una novedad técnica que lo hace especialmente difícil de detectar: usa la infraestructura legítima de seguridad de npm para firmar código malicioso.

El estándar SLSA (Supply-chain Levels for Software Artifacts) permite verificar que un paquete fue construido por un pipeline legítimo mediante provenance attestations firmadas con Sigstore. Mini Shai-Hulud roba los tokens OIDC que ese pipeline usa para firmar, y con ellos produce attestations válidas de nivel Build Level 3 para las versiones maliciosas. El comando npm audit signatures devuelve firma válida para código comprometido.

En palabras de StepSecurity: "valid provenance does not guarantee safety" — la provenance válida no garantiza seguridad si el pipeline que la generó estaba comprometido.

Línea de tiempo del gusano

Fecha Evento
Septiembre 2025 Aparece Shai-Hulud original en npm. Roba tokens y autopropaga.
Noviembre–diciembre 2025 Shai-Hulud 2.0 — ejecución en preinstall, capacidad de borrado de datos.
31 marzo 2026 TeamPCP backdoorea axios (~100M descargas semanales).
Abril 2026 Mini Shai-Hulud — ataca ecosistema SAP (@cap-js, mbt). Bitwarden CLI comprometido.
11 mayo 2026 Nueva oleada: TanStack, Mistral AI, UiPath, OpenSearch. 170+ paquetes npm + 2 PyPI. Cache poisoning + OIDC.
19 mayo 2026 Oleada @antv: 323 paquetes, ~16M descargas semanales. 22 minutos de ejecución automatizada.

Cómo saber si te ha afectado

Si tu proyecto instaló alguno de los paquetes comprometidos durante las ventanas de ataque, asume exposición. Pasos inmediatos:

  1. Auditar ejecuciones de GitHub Actions posteriores al 11 de mayo de 2026 a las 19:20 UTC. Busca eventos npm publish inesperados y conexiones salientes a filev2.getsession.org o api.masscan.cloud.
  2. Revisar tokens npm: ejecuta npm token list y revoca cualquier token que no reconozcas.
  3. Rotar todos los secretos del pipeline: tokens de GitHub, claves cloud (AWS, Azure, GCP), variables de entorno de CI/CD.
  4. Comprobar propagación descendente: si tu pipeline publicó paquetes durante una ejecución que instaló versiones comprometidas, esas versiones publicadas pueden estar infectadas.
  5. Buscar el daemon gh-token-monitor: en macOS revisa LaunchAgents (~/Library/LaunchAgents/), en Linux revisa servicios systemd del usuario.
  6. Verificar repositorios públicos creados automáticamente bajo tu cuenta de GitHub con nombres sospechosos — el gusano crea repositorios para exfiltrar secretos.

Por qué esto importa más allá de npm

Shai-Hulud representa un cambio de paradigma en los ataques a la cadena de suministro. Los ataques anteriores requerían que el atacante comprometiera manualmente un paquete concreto. Shai-Hulud automatiza completamente la propagación: un solo punto de entrada se convierte en decenas o cientos de paquetes comprometidos en minutos, usando las propias credenciales de los mantenedores legítimos y la infraestructura de firma oficial del ecosistema.

Como señala Unit 42 de Palo Alto Networks, el incidente de septiembre de 2025 "marcó el fin de la era de los ataques de 'molestia' en npm y el inicio de un escenario de alto impacto". La pregunta ya no es si la cadena de suministro de software puede ser armada a gran escala — la respuesta es sí. La pregunta es cuánto tarda tu organización en detectarlo.

Conclusión

La cadena de suministro de software es hoy uno de los vectores de ataque más eficientes disponibles para un actor amenaza sofisticado. Un paquete comprometido con millones de descargas semanales es un vector de distribución de malware que ningún sistema de phishing convencional puede igualar en escala.

Si desarrollas software con npm o PyPI, este es el momento de revisar tu pipeline: qué permisos tienen tus tokens de publicación, si tienes monitorización de comportamiento anómalo en CI/CD, y si tus dependencias están fijadas a hashes verificados en lugar de a rangos de versión.

La confianza en un paquete no puede basarse solo en quién lo firma hoy — tiene que basarse en si el proceso que lo construyó estaba bajo control en el momento de la firma.


Fuentes: Microsoft Security Blog · Akamai Security Research · Snyk · StepSecurity · Unit 42 (Palo Alto Networks) · Picus Security · NHS England Digital · mayo 2026.

Análisis forense: Oscar Orts · Perito Informático Judicial · ORTSLAB.ES