Saltar al contenido
ES EN
Tema: automático

Shai-Hulud: el gusano de npm que obligó a rehacer la seguridad de la publicación

Actualizado el

El gusano Shai-Hulud comprometió más de 500 paquetes de npm en septiembre de 2025 y GitHub respondió endureciendo la publicación.

En septiembre de 2025 el ecosistema npm vivió uno de sus peores ataques a la cadena de suministro: un gusano llamado Shai-Hulud que se copiaba solo de paquete en paquete. CISA confirmó más de 500 paquetes comprometidos. Con el tiempo de por medio, merece la pena repasar cómo funcionaba y qué cambió después.

La primera cronología fue confusa. The Hacker News empezó hablando de unos 40 paquetes, entre ellos @ctrl/tinycolor, y la cifra se disparó por encima de 500 conforme el gusano avanzaba. El paquete identificado como paciente cero, rxnt-authentication, se había publicado el 14 de septiembre.

La clave está en cómo se propagaba. El bundle.js malicioso descargaba el tarball de un paquete, modificaba su package.json, inyectaba un script local, lo reempaquetaba y lo republicaba. Para conseguir credenciales ejecutaba el escáner legítimo TruffleHog en busca de tokens de GitHub, tokens de npm y claves de AWS. Con un token de npm válido, el gusano podía publicar versiones nuevas de todo lo que ese mantenedor controlaba.

Esquema de un gusano que roba un token de npm y publica versiones infectadas de otros paquetes del mismo mantenedor
Un token robado se convierte en la llave para infectar todos los paquetes de su dueño.

Lo más incómodo era la persistencia. Según los análisis, las credenciales robadas servían para crear flujos de trabajo de GitHub Actions que seguían exfiltrando datos aunque el equipo original se limpiara. Y, según CISA, los secretos iban a un endpoint del atacante y también a un repositorio público llamado Shai-Hulud, creado a través de la API de GitHub en las propias cuentas de las víctimas. La guía de CISA pedía fijar dependencias a versiones anteriores al 16 de septiembre, rotar todas las credenciales y exigir MFA resistente al phishing.

La respuesta de GitHub llegó pronto. Retiró los más de 500 paquetes y, el 22 de septiembre, presentó su plan de endurecimiento: limitar la publicación a tres vías (publicación local con 2FA obligatorio, tokens granulares de siete días como máximo y publicación de confianza) y sustituir el 2FA basado en TOTP por autenticación FIDO. El mismo plan anunciaba que los tokens clásicos heredados quedarían obsoletos.

Lo que vino después demostró que el aviso era necesario. En noviembre apareció Shai-Hulud 2.0, con más de 25.000 repositorios maliciosos creados a través de unos 350 usuarios. Esta variante se ejecutaba en la fase preinstall, así que actuaba en máquinas de desarrollo y en CI/CD sin intervención humana, y si no lograba robar credenciales intentaba borrar el directorio personal de la víctima.

El 9 de diciembre de 2025, según el registro de cambios de GitHub, npm revocó todos los tokens clásicos existentes, que ya no pueden autenticar ni volver a crearse.

Nuestra lectura: el gusano avanzaba con credenciales robadas que seguían siendo válidas, y eso es justo lo que atacan las medidas posteriores. Quien aún tenga flujos de publicación apoyados en tokens heredados ya los habrá tenido que rehacer; el resto haría bien en revisar qué secretos sobreviven en sus pipelines.

Fuente original: The Hacker News

Elaborado con apoyo de IA y revisado por la redacción

Kernel

· Dirección de tecnología · España

«Un token robado que caduca en horas hace mucho menos daño que uno eterno; esa es la lección de Shai-Hulud.»