В NPM-пакет UAParser.js, насчитывающий 8 млн загрузок в неделю, внедрено вредоносное ПО

История с удалением из репозитория NPM трёх вредоносных пакетов, копировавших код библиотеки UAParser.js, получила неожиданное продолжение – неизвестные злоумышленники захватили контроль над учётной записью автора проекта UAParser.js и выпустили обновления, содержащие код для кражи паролей и майнинга криптовалют.

Проблема в том, что библиотека UAParser.js, которая предлагает функции для разбора HTTP-заголовка User-Agent, насчитывает около 8 млн загрузок в неделю и используется в качестве зависимости в более чем 1200 проектах. Заявлено, что UAParser.js применяется в проектах таких компаний, как Microsoft, Amazon, Facebook, Slack, Discord, Mozilla, Apple, ProtonMail, Autodesk, Reddit, Vimeo, Uber, Dell, IBM, Siemens, Oracle, HP и Verison.

Атака была совершена через взлом учётной записи разработчика проекта, который понял что-то не так после необычной волны спама, свалившейся в его почтовый ящик. Как именно была взломана учётная запись разработчика не сообщается. Атакующие сформировали выпуски 0.7.29, 0.8.0 и 1.0.0, внедрив в них вредоносный код. В течение нескольких часов разработчики вернули контроль над проектом и сформировали обновления 0.7.30, 0.8.1 и 1.0.1 c устранением проблемы. Вредоносные версии были опубликованы только в виде пакетов в NPM-репозитории. Git-репозиторий проекта на GitHub не пострадал. Всем пользователям, установившим проблемные версии, при обнаружении в Linux/macOS файла jsextension, а в Windows файлов jsextension.exe и create.dll, рекомендуется считать систему скомпрометированной и поменять на ней пароли, ключи и сертификаты безопасности.

Добавленные вредоносные изменения напоминали изменения, ранее предложенные в клонах UAParser.js, которые, судя по всему, были выпущены для тестирования функциональности перед совершением широкомасштабной атаки на основной проект. На систему пользователя с внешнего хоста загружался и запускался исполняемый файл jsextension, который выбирался в зависимости от платформы пользователя и был подготовлен в вариантах для Linux, macOS и Windows. Для платформы Windows помимо программы для майнинга криптовалюты Monero (использовался майнер XMRig) злоумышленниками также было организовано внедрение библиотеки create.dll для перехвата паролей и их отправки на внешний хост.

Код для загрузки вредоносных компонентов в файл preinstall.sh NPM-пакета был добавлен код

IP=$(curl -k https://freegeoip.app/xml/ | grep ‘RU|UA|BY|KZ’) if [ -z “$IP” ] … загрузка и запуск исполняемого файла fi

Как видно из кода, скрипт вначале проверял IP-адрес в сервисе freegeoip.app и не запускал вредоносное приложение для пользователей из России, Украины, Беларуси и Казахстана.

Release. Ссылка here.