Una campaña de infostealer comprometió 10 paquetes npm que fueron actualizados de manera maliciosa para robar variables de entorno y otros datos sensibles de los sistemas de los desarrolladores.
La campaña afectó principalmente a paquetes relacionados con criptomonedas, entre ellos el popular country-currency-map, que se descargaba miles de veces a la semana.
¿Cómo Funciona el Malware en los Paquetes npm?
El malware fue detectado por el investigador de Sonatype, Ali ElShakankiry, quien descubrió dos scripts ofuscados llamados launch.js y diagnostic-report.js que se ejecutaban cuando los paquetes se instalaban.
Estos scripts estaban diseñados para robar las variables de entorno del dispositivo infectado y enviarlas a un servidor remoto: eoi2ectd5a5tn1h.m.pipedream(.)net.
Las variables de entorno son a menudo un objetivo principal de los atacantes, ya que pueden contener claves API, credenciales de bases de datos, credenciales de servicios en la nube y claves de cifrado, lo que les permite realizar ataques adicionales o tomar control de sistemas y servicios.
Paquetes npm Comprometidos
Los paquetes npm afectados incluyen:
- country-currency-map: versión 2.1.8 (288 descargas)
- @keepkey/device-protocol: versión 7.13.3 (56 descargas)
- bnb-javascript-sdk-nobroadcast: versión 2.16.16 (61 descargas)
- @bithighlander/bitcoin-cash-js-lib: versión 5.2.2 (61 descargas)
- eslint-config-travix: versión 6.3.1 (0 descargas)
- babel-preset-travix: versión 1.2.1 (0 descargas)
- @travix/ui-themes: versión 1.1.5 (0 descargas)
- @veniceswap/uikit: versión 0.65.34 (0 descargas)
- @crosswise-finance1/sdk-v2: versión 0.1.21 (0 descargas)
- @veniceswap/eslint-config-pancake: versión 1.6.2 (0 descargas)
De estos paquetes, solo country-currency-map tuvo un número significativo de descargas maliciosas (288).
El resto aún está disponible en npm lo que significa que si se descargan, los proyectos estarán infectados con el malware que roba información.
Hipótesis del Ataque y Causa Probable
Sonatype sugiere que el ataque podría haber sido causado por un compromiso de cuentas de mantenedores de npm, posiblemente mediante credential stuffing (ataques de relleno de credenciales) o toma de dominio expirado.
Estos son escenarios comunes descritos en la documentación de npm. La hipótesis más probable es que los atacantes obtuvieron acceso a cuentas antiguas de mantenedores de paquetes a través de credenciales filtradas de otros incidentes.
La investigación también señala que, a pesar de que npm ha hecho obligatoria la autenticación en dos pasos (2FA) para proyectos populares, algunos de los paquetes comprometidos son antiguos y no han sido actualizados en años.
Esto sugiere que los mantenedores pueden haber dejado de estar activos y que las medidas de seguridad no se mantenían actualizadas.
Acción del Mantenedor y Soluciones ️
El mantenedor de country-currency-map ha descontinuado la versión maliciosa (2.1.8) y recomendó a los desarrolladores utilizar la versión 2.1.7 que es segura.
Aunque los otros paquetes comprometidos siguen disponibles en npm con las versiones maliciosas, por lo que los desarrolladores deben tener mucho cuidado al descargarlos.
Conclusión
Este incidente subraya la importancia de mantener la seguridad de las cuentas de npm y monitorear regularmente los paquetes utilizados en los proyectos de desarrollo.
Los desarrolladores deben asegurarse de actualizar sus dependencias y verificar las versiones de los paquetes para evitar compromisos similares en el futuro.
La autenticación de dos factores (2FA) y el uso de gestores de contraseñas seguros pueden ayudar a mitigar este tipo de riesgos.