Mini Shai-Hulud se apodera de 440 paquetes de npm que suman 2.000 millones de descargas

Mini Shai-Hulud se apodera de 440 paquetes de npm que suman 2.000 millones de descargas

Solo tuvieron que hackear una cuenta — luego el gusano hizo el resto.

image

Las cadenas de suministro en el ecosistema npm rara vez se rompen por un único punto de entrada, pero fue precisamente así como, el 4 de agosto de 2026, comenzó un ataque que fue detectado simultáneamente por cuatro equipos — Aikido, Socket, Datadog y OpenSourceMalware. En un día el gusano afectó a más de 440 paquetes con un total de dos mil millones de instalaciones por mes, entre ellos keyv, flat-cache y file-entry-cache — bibliotecas que, mediante cadenas de dependencias, están presentes en la mayoría de proyectos JavaScript.

Los atacantes comprometieron la cuenta de Jared Ray —el mantenedor de toda esta familia. Tras obtener acceso a GitHub, introdujeron directamente código malicioso en la rama principal y publicaron inmediatamente nuevas versiones mediante GitHub Actions. Los paquetes se publicaron con firmas criptográficas auténticas; no había indicios formales de manipulación.

El código malicioso se insertaba en el momento de la instalación. En package.json añadían un script «preinstall» que, antes de obtener cualquier código, ejecutaba el archivo setup.mjs. Ese archivo descargaba Bun —un runtime alternativo de JavaScript— y con él lanzaba la carga principal Math_Symbol.js. Utilizaron Bun intencionadamente: muchas herramientas de seguridad están orientadas a procesos de Node.js y podrían pasar por alto un runtime no estándar.

La carga principal buscaba tokens de npm y GitHub, claves de AWS, secretos de Kubernetes y Vault, claves SSH y archivos .env. En los servidores de GitHub Actions el código malicioso leía la memoria del proceso directamente; así obtenía secretos que nunca llegaban a archivos. Los datos recopilados se cifraban y se enviaban a una dirección obtenida mediante un contrato inteligente en la red Ethereum. Como canal alternativo se utilizaron repositorios públicos de GitHub con la descripción «Shai-Hulud: Here We Go Again» —Datadog contabilizó más de 1300.

Los tokens de npm robados se emplearon de inmediato: el código malicioso descargaba paquetes accesibles, les insertaba el mismo script, aumentaba la versión y los publicaba de nuevo en el registro. Así el ataque se convirtió en un gusano autorreplicante. Los analistas determinaron que en la base estaba el código de la familia Mini Shai-Hulud, publicado previamente en acceso público.

Los especialistas de Socket además detectaron un mecanismo de «mano muerta»: un script en segundo plano comprobaba cada 60 segundos el token de GitHub robado y, si este era revocado, ejecutaba un comando desde un servidor remoto.

Los analistas de Aikido registraron otro vector: el código malicioso modificó los archivos .claude/settings.json y .vscode/tasks.json en los repositorios. Tras eso, la carga se ejecutaba al abrir el proyecto en VS Code o en una sesión de Claude Code —sin instalaciones de npm.

Se recomienda a los desarrolladores localizar y eliminar primero los servicios en segundo plano gh-token-monitor, y solo después revocar los tokens; de lo contrario la revocación misma podría activar el manejador malicioso. A continuación conviene rotar todas las credenciales: npm, GitHub, AWS, Kubernetes y Vault. También se deben inspeccionar los repositorios en busca de commits inesperados y de archivos ajenos .claude y .vscode.