Esta mañana, fuimos alertados de un ataque a gran escala contra npm. Parece ser obra de los mismos actores de amenazas detrás del ataque a Nx el 27 de agosto de 2025. Esto fue publicado originalmente por Socket y StepSecurity, quienes señalaron que 40 paquetes habían sido comprometidos; desde entonces, 147 paquetes adicionales han sido infectados con malware, incluyendo paquetes de CrowdStrike.
La escala, el alcance y el impacto de este ataque son significativos. Los atacantes están utilizando en gran parte la misma estrategia que en el ataque original, pero han intensificado su juego. Lo han convertido en un gusano completo, que realiza estas acciones automáticamente:
- Robar secretos y publicarlos en GitHub de forma pública
- Ejecutar trufflehog y consultar los puntos de conexión de metadatos de la nube para recopilar secretos
- Intentar crear una nueva acción de GitHub con un mecanismo de exfiltración de datos a través de webhook[.]site
- Iterar los repositorios en GitHub a los que un usuario tiene acceso y hacerlos públicos
Desde nuestra alerta inicial de esta mañana, hemos confirmado los siguientes comportamientos adicionales y detalles importantes. Para aquellos que no lo saben, Shai Hulud es el nombre del gusano en la franquicia Dune. Una clara indicación de la intención de los atacantes.

Para evitar ser comprometido por paquetes como este, ¡echa un vistazo a Aikido safe-chain!
Lo que hace el gusano
- Recopilación: escanea el host y el entorno de CI en busca de secretos — process.env, escaneo con TruffleHog y puntos de conexión de metadatos de la nube (AWS/GCP) que devuelven credenciales de instancia/servicio.
- Exfiltrar (1) — Repositorio de GitHub: crea un repositorio llamado Shai-Hulud bajo la cuenta comprometida y confirma un volcado JSON que contiene información del sistema, variables de entorno y secretos recopilados.
- Exfiltrar (2) — GitHub Actions → webhook: despliega un flujo de trabajo
.github/workflows/shai-hulud-workflow.ymlque serializa${{ toJSON(secrets) }}, los envía mediante POST a un atacantewebhook[.]siteURL y escribe una copia en doble base64 en los registros de Actions. - Propagar: utiliza cualquier token npm válido que encuentre para enumerar e intentar actualizar los paquetes que controla el mantenedor comprometido (propagación en la cadena de suministro).
- Amplificar: itera los repositorios accesibles de la víctima, haciéndolos públicos o añadiendo el flujo de trabajo/rama que desencadenará ejecuciones y filtraciones adicionales.
Filtración de secretos
Al igual que con el ataque Nx original, estamos viendo a los atacantes realizar un ataque de tipo 'golpe y fuga'. La carga útil maliciosa publica un repositorio "Shai-Hulud" con credenciales/tokens robados, y recorrerá una cuenta de GitHub para convertir repositorios privados en públicos:


Autopropagación a través de npm
Una de las características más llamativas de este ataque es que se comporta como un verdadero gusano. En lugar de depender de un único paquete infectado para propagarse, el código está diseñado para republicarse en otros paquetes npm propiedad del mantenedor comprometido.
Así es como funciona la lógica del gusano:
- Descargar un tarball objetivo – recupera una versión de paquete existente del registro de npm.
- Modificar
package.json– el gusano incrementa la versión de parche (p. ej.1.2.3 → 1.2.4) e inserta un nuevo hook de ciclo de vida (postinstall) - Copia su propio payload – el script en ejecución (
process.argv[1]) se escribe en el tarball comobundle.js. Esto asegura que cualquier código que haya infectado un paquete ahora resida dentro del siguiente. - Republica el paquete troyanizado – el tarball modificado se comprime con gzip y se vuelve a subir a npm utilizando las credenciales del mantenedor.
Este ciclo permite que el malware infecte continuamente cada paquete al que un mantenedor tiene acceso. Cada paquete publicado se convierte en un nuevo vector de distribución: tan pronto como alguien lo instala, el gusano se ejecuta, se replica y se propaga aún más en el ecosistema.
En resumen: el atacante no necesita atacar paquetes manualmente. Una vez que un único entorno se ve comprometido, el gusano automatiza la propagación aprovechando los propios derechos de publicación del mantenedor.
Para un análisis completo del malware, recomendamos revisar la publicación de getsafety
Paquetes afectados
Noticia en desarrollo…
Consejos de remediación
- Compruebe las versiones que está utilizando
- Limpie su caché de npm
- Reinstale todos los paquetes de su repositorio
- Asegúrese de utilizar un archivo de bloqueo de paquetes y versiones fijadas
Cómo saber si está afectado usando Aikido:
Si es usuario de Aikido, revise su feed central y filtre por problemas de malware. La vulnerabilidad aparecerá como un problema crítico de 100/100 en el feed. Consejo: Aikido vuelve a escanear sus repositorios cada noche, aunque recomendamos activar un reescaneo completo también.
Si aún no es usuario de Aikido, configure una cuenta y conecte sus repositorios. Nuestra cobertura de malware propietaria está incluida en el plan gratuito (sin tarjeta).
Para una protección futura, considere usar Aikido SafeChain (código abierto), un envoltorio seguro para npm, npx, yarn... Safechain se integra en sus flujos de trabajo actuales, funcionando al interceptar los comandos npm, npx, yarn, pnpm y pnpx, y verificando los paquetes en busca de malware antes de la instalación, contrastándolos con Aikido Intel - Open Sources Threat Intelligence. Detenga las amenazas antes de que lleguen a su máquina.

