Un significativo ataque a la cadena de suministro de JavaScript dirigido a carteras de criptomonedas a través de paquetes npm comprometidos fue contenido en gran medida, resultando en solo $1,043 en criptomonedas robadas.
Resumen Ejecutivo
Un reciente y generalizado ataque a la cadena de suministro de JavaScript, identificado como el compromiso de npm más grande de la historia, tuvo como objetivo las carteras de criptomonedas a través de actualizaciones maliciosas de paquetes populares de GitHub. A pesar de su amplio alcance potencial, que afectó a paquetes utilizados por el 99% de los entornos de la nube y con código malicioso presente en el 10% de esos entornos, el ataque resultó en pérdidas financieras mínimas, totalizando solo $1,043 en criptomonedas robadas. Este impacto limitado se atribuye a la detección rápida en dos horas, una carga útil diseñada de forma limitada y una mayor conciencia de seguridad de los desarrolladores junto con las protecciones existentes.
El Evento en Detalle
El incidente, que se desarrolló el 8 de septiembre de 2025, involucró a actores de amenazas que tomaron el control de la cuenta npm del desarrollador Qix (Josh Junon) a través de una sofisticada campaña de phishing. El atacante utilizó un convincente correo electrónico de restablecimiento de autenticación de dos factores (2FA) de un dominio falso para adquirir las credenciales del mantenedor. Este acceso no autorizado permitió la publicación de versiones maliciosas de 18 paquetes populares de npm, incluidos debug
, chalk
, supports-hyperlinks
y strip-ansi
, que acumulan colectivamente miles de millones de descargas semanales. Las versiones maliciosas estuvieron activas en el registro de npm durante aproximadamente dos horas, desde las 13:16 UTC hasta alrededor de las 15:20 UTC, momento en que la comunidad identificó el código sospechoso y los mantenedores revirtieron a versiones limpias.
Mecanismos Financieros y Vectores de Ataque
El código malicioso inyectado no se dirigió a entornos de servidor, sino que se centró en interceptar transacciones criptográficas y llamadas a la API de Web3 dentro de los entornos de navegador. El ataque empleó dos mecanismos principales: Secuestro de Cartera y Manipulación de Respuesta de Red. El Secuestro de Cartera implicó engancharse a window.ethereum
para interceptar llamadas a carteras como MetaMask, redirigiendo silenciosamente las transacciones salientes a direcciones controladas por el atacante. La Manipulación de Respuesta de Red anuló fetch
y XMLHttpRequest
para escanear las respuestas de la API en busca de direcciones de blockchain, sustituyéndolas posteriormente por direcciones de atacantes visualmente similares utilizando un algoritmo de "coincidencia más cercana" de Levenshtein. El ataque admitió la segmentación de múltiples cadenas, incluidas Ethereum, Bitcoin, Litecoin, Tron, BCH y Solana. El impacto financiero mínimo de $1,043 se atribuye parcialmente a un error crítico en el código inyectado que causó el colapso de las tuberías de CI/CD, lo que llevó a una detección más temprana de lo anticipado.
Implicaciones Más Amplias y Postura de Seguridad
Este incidente subraya las vulnerabilidades inherentes a la cadena de suministro de software de código abierto, particularmente en lo que respecta a las dependencias transitivas y la seguridad de las cuentas de los mantenedores. La telemetría de Wiz indicó que el 99% de los entornos de la nube contenían al menos una instancia de los paquetes atacados por este incidente, y que el código malicioso llegó al 10% de esos entornos durante la ventana de compromiso. El ataque destaca una tendencia creciente de compromisos sofisticados de la cadena de suministro de software en el ecosistema criptográfico. Las implicaciones a largo plazo incluyen una mayor vigilancia y escrutinio de la seguridad de la cadena de suministro de software en toda la comunidad de desarrollo de Web3. Se espera que este evento acelere la adopción de prácticas de seguridad más sólidas, como la generación de Listas de Materiales de Software (SBOM), la implementación del marco SLSA, la auditoría regular de dependencias, el uso de archivos de bloqueo de paquetes y la consideración de registros npm privados para aplicaciones críticas. Estas medidas son cruciales para mitigar los riesgos asociados con que las dependencias de desarrollo confiables se conviertan en vectores para la distribución de malware financiero y para mejorar la postura de seguridad general de las finanzas descentralizadas.