ChainDrop: el ataque npm que comprometió 1.300 paquetes y afectó a 2 mil millones de descargas mensuales
ChainDrop: ataque a la cadena de suministro npm que infectó 1.300 paquetes y afectó 2 mil millones de descargas mensuales. Detalles del mecanismo.
Imagen ilustrativa generada con IA
El 4 de agosto de 2026 se hizo pública la campaña ChainDrop, un ataque a la cadena de suministro auto-propagante que ha infectado más de 1.300 paquetes npm y alcanzó un volumen de descargas mensuales estimado en unos 2 mil millones. La operación, aún en curso, partió de la compromisión de la cuenta de GitHub del mantenedor de Keyv y se propagó en cascada a través de dependencias compartidas. Investigadores de Aikido, Wiz, StepSecurity, Socket y Ox Security están monitorizando su expansión y publicando indicadores de compromiso.
El desencadenante: la cuenta de GitHub de Keyv y la cadena de caché
El atacante tomó el control de la cuenta de GitHub del mantenedor de Keyv, un popular módulo para la gestión de almacenes clave-valor. Desde allí inyectó código malicioso directamente en las ramas principales de Keyv y de los paquetes que dependen de él: Cacheable, flat-cache y file-entry-cache. Para que las nuevas versiones resultaran creíbles, el agresor utilizó los mismos GitHub Actions legítimos configurados en los repositorios. El resultado es que cada versión infectada publicada en npm conserva una atestación de procedencia válida, eludiendo los controles de muchas herramientas de verificación de la cadena de suministro.
El mecanismo de infección: preinstall, Bun y el payload ofuscado
Cada paquete comprometido incluye un archivo setup.mjs invocado desde la clave preinstall en el package.json. Este script se ejecuta automáticamente cuando alguien lanza npm install. El dropper descarga el runtime Bun y lo utiliza para ejecutar un segundo archivo, Math_Symbol.js (o math_init.js), ofuscado y que contiene un infostealer con capacidad de auto-propagación.
El gusano no requiere interacción: basta con instalar una dependencia infectada para que se active toda la cadena. La ejecución ocurre en el runner que realiza la instalación, ya sea una estación de trabajo de desarrollo, un entorno CI/CD o un contenedor temporal.
Qué roba y cómo se propaga
El infostealer recolecta de forma agresiva cualquier credencial accesible desde el entorno de ejecución:
- tokens de GitHub (
ghp_,gho_,ghs_), tokens npm (npm_) y secretos de GitHub Actions; - credenciales de AWS, incluidos valores obtenidos de SSM con
WithDecryption: truey secretos de Secrets Manager; - secretos de Kubernetes, tokens de HashiCorp Vault, cadenas de conexión de bases de datos;
- claves de Stripe, Slack, Twilio, Azure, GCP y todo el entorno de proceso.
Todos los datos robados se cifran y se envían a un repositorio público de GitHub controlado por el atacante. Según Wiz también está activo el dominio npm-cache[.]com para la exfiltración. El gusano no se limita a robar: por cada token obtenido ejecuta una llamada a registry.npmjs[.]org/-/whoami y, si el token resulta válido, lo usa para infectar nuevos paquetes del mantenedor correspondiente. La propagación se autoalimenta, ampliando el alcance en cada instalación.
Impacto: compromiso total de entornos de desarrollo y CI/CD
Cualquier máquina que haya ejecutado npm install sobre una versión infectada debe considerarse completamente comprometida, incluso si el paquete se elimina posteriormente. El robo de credenciales de nube, secretos de CI/CD y claves privadas abre la puerta a movimiento lateral, exfiltración masiva y modificación no autorizada de código en repositorios de empresas como Deliveroo, Ornikar, OneReach, Picsart, Qlik y ServiceTitan, ya afectadas por la campaña.
La presencia de una atestación de procedencia válida hace que el ataque sea particularmente insidioso: muchas herramientas de control, basadas en la correspondencia entre atestaciones y fuentes, no detectaron anomalías hasta que los primeros análisis forenses revelaron el mecanismo.
Cómo defenderse y reiniciar
Las empresas de seguridad implicadas han difundido listas de hashes y dominios maliciosos, pero la prioridad para las organizaciones potencialmente expuestas es la reacción inmediata:
- Reconstruir desde cero los entornos comprometidos o restaurar copias de seguridad no infectadas.
- Rotar todos los tokens y credenciales accesibles desde el entorno afectado (GitHub PAT, tokens npm, claves AWS/GCP/Azure, secretos Vault, credenciales de bases de datos y de servicios externos).
- Examinar cuidadosamente los registros del sistema y los commits en los repositorios para detectar accesos anómalos o modificaciones no autorizadas.
- Aplicar listas permitidas de dependencias y revisar las políticas de ejecución de scripts de
preinstall. - Monitorizar en tiempo real los indicadores de compromiso compartidos por Aikido, Wiz, StepSecurity, Socket y Ox Security.
La campaña ChainDrop sigue activa y el número de paquetes infectados continúa aumentando. Quienes gestionen entornos npm deben esperar nuevas actualizaciones y prepararse para verificar la integridad de sus dependencias incluso más allá de las primeras listas de IoC.
Fuentes
Este artículo es una reelaboración original basada en las siguientes fuentes.




