La historia de la eliminación de tres paquetes maliciosos del repositorio de NPM, que copiaban el código de la biblioteca UAParser.js, ha tenido un desarrollo inesperado: atacantes desconocidos han tomado el control de la cuenta del autor del proyecto UAParser.js y han lanzado actualizaciones que contenían código para robar contraseñas y minería de criptomonedas.
El problema radica en que la biblioteca UAParser.js, que ofrece funciones para analizar el encabezado HTTP User-Agent, cuenta con alrededor de 8 millones de descargas por semana y se utiliza como dependencia en más de 1200 proyectos. Se ha afirmado que UAParser.js se utiliza en proyectos de empresas como Microsoft, Amazon, Facebook, Slack, Discord, Mozilla, Apple, ProtonMail, Autodesk, Reddit, Vimeo, Uber, Dell, IBM, Siemens, Oracle, HP y Verison.
El ataque se llevó a cabo a través de la piratería de la cuenta de un desarrollador del proyecto, quien notó que algo no estaba bien después de una inusual ola de spam que inundó su bandeja de entrada. No se informa cómo se comprometió la cuenta del desarrollador. Los atacantes generaron lanzamientos 0.7.29, 0.8.0 y 1.0.0, introduciendo código malicioso en ellos. En pocas horas, los desarrolladores recuperaron el control del proyecto y generaron actualizaciones 0.7.30, 0.8.1 y 1.0.1 para solucionar el problema. Las versiones maliciosas se publicaron solo como paquetes en el repositorio de NPM. El repositorio Git del proyecto en GitHub no se vio afectado. A todos los usuarios que hayan instalado las versiones problemáticas, se les recomienda considerar su sistema comprometido al encontrar en Linux/macOS el archivo jsextension, y en Windows los archivos jsextension.exe y create.dll.
Los cambios maliciosos añadidos eran similares a los cambios anteriormente propuestos en clones de UAParser.js, que, al parecer, fueron lanzados para probar la funcionalidad antes de llevar a cabo un ataque a gran escala en el proyecto principal. Un archivo ejecutable jsextension se cargaba y ejecutaba en el sistema del usuario desde un host externo, el cual se seleccionaba según la plataforma del usuario y era compatible con Linux, macOS y Windows. Para la plataforma Windows, además del software de minería de criptomonedas Monero (que utilizaba el minero XMRig), los atacantes también implementaron la biblioteca create.dll para interceptar contraseñas y enviarlas a un host externo.
El código para la carga fue añadido al archivo preinstall.sh, donde se incluyó la inserción IP=$(curl -k https://freegeoip.app/xml/ | grep 'RU|UA|BY|KZ') if [ -z "$IP" ] ... carga y ejecución del archivo ejecutable fi
Como se puede ver en el código, el script primero verificó la dirección IP en el servicio freegeoip.app y no ejecutó la aplicación maliciosa para usuarios de Rusia, Ucrania, Bielorrusia y Kazajistán.
Fuente: opennet.ru
