Este lunes, investigadores de seguridad descubrieron el mayor ataque a la cadena de suministros en la historia de npm, comprometiendo 18 paquetes fundamentales de JavaScript, como chalk, debug y ansi-styles, que representan más de 2,6 mil millones de descargas semanales. Josh Junon (qix), mantenedor de estos paquetes críticos del ecosistema JavaScript, tuvo su cuenta de npm comprometida a través de un ataque de phishing sofisticado.
El ataque comenzó cuando Junon recibió un correo electrónico fraudulento que amenazaba con bloquear las cuentas de los mantenedores el 10 de septiembre, solicitando la actualización de las credenciales 2FA para inducir el clic en el enlace malicioso. El propio Junon confirmó haber caído en la estafa en una publicación en el foro HackerNews.
Los atacantes inyectaron código malicioso altamente ofuscado en los paquetes, creando un interceptor basado en navegador diseñado para robar criptomonedas. El malware intercepta transacciones de billeteras digitales como MetaMask y Phantom, alterando datos antes de la firma por parte de los usuarios. Modifica funciones como fetch, XMLHttpRequest y APIs de billeteras, sustituyendo direcciones legítimas por otras controladas por los atacantes y redirigiendo fondos sin conocimiento del usuario.
Paquetes comprometidos: ansi-styles (371 millones descargas semanales), debug (357 millones), chalk (300 millones) y supports-color (287 millones). Estos componentes sirven como dependencias para miles de aplicaciones, desde startups hasta empresas Fortune 500, pudiendo exponer a los usuarios al robo de criptomonedas.
La detección rápida fue crucial para limitar los daños: el ataque fue identificado en 5 minutos y divulgado en 1 hora por Aikido Security. Npm inició la eliminación de versiones maliciosas, aunque algunos paquetes permanecían comprometidos al momento de la divulgación. El incidente expone la fragilidad de la cadena de suministros de código abierto, donde una cuenta comprometida puede afectar miles de millones de instalaciones globalmente.
Recomendaciones:
• Evaluar inmediatamente la presencia de versiones comprometidas de los paquetes afectados en sus proyectos, investigando registros de instalación recientes y realizando una auditoría completa del entorno.
• Implementar verificación continua de dependencias con herramientas como npm audit, Snyk o Socket.dev para detección proactiva en tiempo real.
• Establecer políticas de enfriamiento de al menos 48 horas antes de actualizar dependencias críticas.
• Revisar y fortalecer procesos internos de aprobación para actualizaciones de librerías, tratando cambios en package-lock.json con el mismo rigor que el código de la aplicación.
• Investigar todas las credenciales, claves y actividades en billeteras digitales en entornos web3 e implementar monitoreo reforzado de transacciones sospechosas.
• Reforzar controles de autenticación y concienciación sobre phishing, orientando a los equipos a verificar la legitimidad de correos antes de hacer clic en enlaces sospechosos.
• Adoptar servicios de monitoreo gestionado de la cadena de suministros como los ofrecidos por SEK, incluyendo detección proactiva y respuesta especializada a incidentes.
SEK permanece monitoreando la situación y está disponible para auxiliar en la implementación de controles de seguridad, evaluación de exposición y respuesta a comprometimientos de dependencias.