
Хакер #311. Сетевые протоколы под микроскопом
В популярный пакет rand-user-agent, который загружают более 45 000 раз в неделю, внедрили обфусцированный код. Малварь активирует троян удаленного доступа (RAT) в системе пользователя.
Rand-user-agent — это инструмент, предназначенный для генерирования рандомизированных строк user-agent, что часто применяется для скраппинга, автоматизированного тестирования и исследований в области ИБ.
Как сообщают аналитики компании Aikido, злоумышленники воспользовались тем, что пакет является полузаброшенным, хотя все еще популярен. В итоге в rand-user-agent внедрили вредоносный код, который, вероятно, попал и в другие проекты.
Исследователи обнаружили компрометацию 5 мая 2025 года в новой версии rand-user-agent —1.0.110. При более глубоком анализе был обнаружен обфусцированный код, скрытый в файле dist/index.js. При этом код можно было заметить только при горизонтальной прокрутке в режиме просмотра исходного кода.
Как показало последующее расследование, последней легитимной версией rand-user-agent была 2.0.82, выпущенная семь месяцев назад. То есть версии 2.0.83, 2.0.84 и упомянутая 1.0.110, являлись вредоносными и отсутствовали в GitHub-репозитории проекта.
Вредоносный код, встроенный в зараженные версии, создавал скрытый каталог в домашней папке пользователя (~/.node_modules) и расширял module.paths таким образом, чтобы этот кастомный путь можно было использовать для загрузки зависимостей, а именно axios и socket.io-client.
Затем он открывал постоянное сокет-соединение со своим управляющим сервером, расположенным по адресу http://85.239.62[.]36:3306, и передавал операторам информацию о зараженной машине, включая имя хоста, имя пользователя, тип ОС и сгенерированный UUID. После активации RAT ожидал получения последующих команд.
В настоящее время вредоносные версии пакета уже удалены из npm, поэтому последняя доступная версия безопасна, и ее можно использовать.
Всем, кто устанавливал версии 2.0.83, 2.0.84 и 1.0.110, рекомендуется провести полное сканирование системы на предмет обнаружения признаков компрометации. Подчеркивается, что обновление пакета до безопасной версии не удаляет RAT из системы.
Как сообщает компания-разработчик rand-user-agent — WebScrapingAPI, произошедшее было классической атакой на цепочку поставок. Расследование еще продолжается, но уже известно, что злоумышленник сумел получить устаревший токен автоматизации, принадлежавший одному из сотрудников, и использовал его для публикации релизов в npm.
Так как токен не был защищен двухфакторной аутентификацией, это позволило атакующему публиковать версии, которых не существовало в GitHub, и увеличивать номера версий, чтобы все выглядело легитимно.
Отдельно разработчики подчеркнули, что инцидент ограничился только npm, не затронув корпоративную сеть и репозиторий с исходным кодом проекта.
«Мы приносим извинения всем разработчикам и организациям, которых затронул этот инцидент. Защита опенсорсной экосистемы — это обязанность, к которой мы относимся со всей серьезностью. Мы стремимся к полной прозрачности и устраняем все бреши, благодаря которым могла произойти эта атака», — заявили в WebScrapingAPI.