Una sofisticada campaña de malware autopropagante ha afectado al ecosistema npm, comprometiendo el popular paquete Keyv y extendiéndose rápidamente a al menos 868 paquetes en más de 1380 versiones. Los investigadores de seguridad estiman que los paquetes afectados representan más de dos mil millones de instalaciones mensuales. El ataque comenzó cuando los ciberdelincuentes obtuvieron el control de la cuenta de GitHub perteneciente al mantenedor de Keyv (una biblioteca de almacenamiento de clave-valor ampliamente utilizada con aproximadamente 127 millones de descargas semanales). Utilizando la identidad comprometida, los atacantes inyectaron código malicioso directamente en la rama principal de varios repositorios bajo el control del mismo mantenedor, incluidos Keyv, cacheable, flat-cache y file-entry-cache. Luego publicaron nuevas versiones de paquetes a través de flujos de trabajo legítimos de GitHub Actions. Debido a que las compilaciones se originaron en las canalizaciones oficiales, las versiones maliciosas tenían certificados de procedencia válidos, lo que las hacía parecer completamente legítimas para las verificaciones automatizadas de la cadena de suministro.
Cada paquete comprometido recibió dos archivos nuevos — setup.mjs y Math_Symbol.js — junto con una entrada silenciosa "preinstall": "node setup.mjs" en package.json.
Cuando un desarrollador o un sistema de integración continua ejecuta `npm install` en una versión afectada, el gancho de preinstalación se ejecuta automáticamente. Este descarga el entorno de ejecución oficial de Bun JavaScript y lo utiliza para lanzar la carga útil de segunda etapa. El malware entonces:
Recopila credenciales en la nube (AWS, GCP, Azure)
Roba secretos de infraestructura, tokens de HashiCorp Vault y tokens de cuentas de servicio de Kubernetes.
Recopila tokens de autenticación de npm y GitHub.
Se dirige a archivos de configuración relacionados con la IA y monederos de criptomonedas.
Implementa mecanismos de persistencia en los directorios .vscode y .claude para que la carga útil pueda reactivarse cuando un desarrollador o un agente de codificación de IA abra el repositorio.
Una vez obtenidas las credenciales, el gusano las utiliza para republicarse en otros paquetes propiedad del mantenedor comprometido o de cuentas recién robadas, lo que permite un rápido movimiento lateral a través del registro. Investigadores de Aikido, Upwind, Wiz, Socket y otros han vinculado la campaña con la familia de gusanos Shai-Hulud (también conocida en algunos informes como ChainDrop).
Qué deben hacer de inmediato los desarrolladores y las organizaciones
Revisar los archivos de bloqueo para detectar las versiones maliciosas mencionadas anteriormente (y cualquier versión nueva que se haya reportado).
Fije versiones exactas que se sabe que funcionan; evite los rangos con acento circunflejo (^) o tilde (~).
Reconstruye los archivos de bloqueo y borra las cachés locales de npm.
Ejecute las futuras instalaciones con --ignore-scripts hasta que la situación se estabilice.
Rote todos los secretos potencialmente expuestos: tokens de npm, PAT de GitHub, credenciales en la nube, tokens de Vault, secretos de CI y cualquier credencial de agente de IA.
Analice las estaciones de trabajo de los desarrolladores y los ejecutores de CI en busca de la presencia de archivos setup.mjs, Math_Symbol.js o archivos inesperados en los directorios .vscode / .claude.
Considere como comprometida cualquier máquina que haya instalado una versión maliciosa, incluso si el paquete ya ha sido eliminado.
La versión maliciosa Keyv 6.0.0 estuvo activa solo unas horas antes de ser revertida, pero la capacidad del gusano para autopropagarse significa que el período de exposición fue significativamente mayor para las dependencias transitivas. Este incidente vuelve a poner de manifiesto la fragilidad de la cadena de suministro de código abierto. Incluso los paquetes con procedencia válida y millones de descargas semanales pueden convertirse en vectores cuando se ve comprometida la cuenta de un único mantenedor. Manténgase alerta, controle estrictamente sus dependencias y consulte los avisos oficiales de Aikido, Socket, Wiz, Upwind y el equipo de seguridad de npm para obtener las últimas actualizaciones.








