Ataque masivo compromete 20 paquetes de NPM y expone a millones de proyectos a malware financiero

El ecosistema de JavaScript vive uno de los incidentes de seguridad más graves de su historia reciente. Al menos 20 paquetes populares de NPM fueron comprometidos tras un ataque de phishing dirigido al mantenedor Josh Junon (alias Qix), figura clave en la comunidad open source. Estos módulos, descargados más de 2.000 millones de veces por semana, forman parte de la base de miles de aplicaciones, bibliotecas y frameworks en todo el mundo.

Un ataque de cadena de suministro sin precedentes

Los atacantes lograron acceder a la cuenta de Qix mediante un correo de phishing que simulaba ser una notificación oficial de NPM (“support@npmjs[.]help”). El mensaje instaba a actualizar las credenciales de autenticación de dos factores (2FA). Al introducir usuario, contraseña y token, los delincuentes capturaron las credenciales y publicaron versiones maliciosas de paquetes ampliamente usados.

Entre los más afectados se encuentran:

  • chalk (299,9 M descargas/semana)
  • debug (357,6 M)
  • ansi-styles (371,4 M)
  • supports-color (287,1 M)
  • strip-ansi (261,1 M)
  • wrap-ansi (197,9 M)
  • ansi-regex (243,6 M)

La lista completa incluye también backslash, chalk-template, supports-hyperlinks, has-ansi, simple-swizzle, color-string, error-ex, color-name, is-arrayish, slice-ansi y otros módulos ampliamente utilizados en el ecosistema.

Cómo funciona el malware

El código malicioso no afectaba directamente a los desarrolladores durante la instalación, sino a los usuarios finales que visitaban sitios con estos paquetes integrados. El malware interceptaba peticiones en el navegador y manipulaba interacciones con carteras de criptomonedas y aplicaciones Web3.

Su funcionamiento se puede resumir en varios pasos:

  1. Detección de direcciones de criptomonedas en datos transmitidos (Ethereum, Bitcoin, Litecoin, Bitcoin Cash, Solana, Tron).
  2. Sustitución de direcciones legítimas por direcciones controladas por los atacantes, usando algoritmos de similitud para no levantar sospechas.
  3. Intercepción de llamadas a fetch y XMLHttpRequest, modificando transacciones y respuestas de forma transparente.
  4. Manipulación en intercambios descentralizados (DEX) como Uniswap, PancakeSwap o SushiSwap, redirigiendo fondos en operaciones de compraventa.

El ataque era invisible para el usuario: las transacciones parecían haberse ejecutado correctamente, cuando en realidad los fondos habían sido desviados.

El impacto en el ecosistema

La magnitud es colosal: cientos de millones de proyectos dependen, de forma directa o indirecta, de estos paquetes. La contaminación de librerías tan básicas como chalk o ansi-regex multiplica el alcance del ataque, ya que se propaga a través de dependencias en cascada.

De hecho, expertos de la plataforma Socket.dev señalaron que el ataque parece haber sido altamente planificado para maximizar su alcance, eligiendo proyectos mantenidos en parte por Sindre Sorhus y Qix, dos de los autores más influyentes en NPM.

La cronología del ataque

Qué deben hacer los desarrolladores

  1. No actualizar a las versiones comprometidas listadas en los reportes de seguridad.
  2. Bloquear dependencias en releases anteriores confirmadas como seguras.
  3. Auditar instalaciones recientes para detectar cualquier posible inyección de código.
  4. Monitorear transacciones y conexiones de wallets en entornos de prueba y producción.

Este incidente pone en evidencia la fragilidad del ecosistema open source cuando pocos mantenedores concentran tanta responsabilidad sobre librerías críticas.

Una advertencia sobre la seguridad en open source

El ataque no solo demuestra la eficacia del phishing avanzado, incluso contra perfiles experimentados, sino también la necesidad de repensar la seguridad en la cadena de suministro de software.

Expertos coinciden en que las medidas actuales —autenticación multifactor y revisiones automatizadas— no bastan cuando un atacante logra acceder a la cuenta de un mantenedor de alto perfil. Se requieren mecanismos adicionales, como firmas digitales obligatorias y auditorías continuas de dependencias.


Preguntas frecuentes (FAQ)

¿Qué paquetes de NPM fueron comprometidos en este ataque?

Al menos 20 paquetes, incluyendo chalk, debug, ansi-regex, supports-color, strip-ansi y wrap-ansi, todos con cientos de millones de descargas semanales.

¿Cómo se produjo la brecha de seguridad?

Mediante un correo de phishing que engañó a un mantenedor clave (Qix), capturando su usuario, contraseña y token 2FA para publicar versiones maliciosas.

¿Qué hacía el malware incluido en los paquetes?

Interceptaba y modificaba transacciones de criptomonedas y operaciones Web3 en navegadores, reemplazando direcciones legítimas por otras bajo control de los atacantes.

¿Qué medidas deben tomar los desarrolladores ahora?

Evitar instalar las versiones comprometidas, auditar entornos de desarrollo y producción, y bloquear dependencias en releases confirmadas como seguras.

vía: socket.dev

Scroll al inicio