Оператор опубликовал в npm не менее 85 вредоносных пакетов @prime0
Один оператор опубликовал не менее 85 пакетов с ограниченной областью видимости в пространстве имён @prime0. Они имитировали названия популярных библиотек JavaScript и содержали код, который собирал сведения о системе и обеспечивал удалённое выполнение команд оболочки.
Поддельные пакеты и управление скомпрометированными узлами
Среди целевых библиотек были chalk, debug, semver, brace-expansion и commander, у каждой высокий объём загрузок. Названия пакетов меняли систематически: удаляли, заменяли или вставляли символы, а также переставляли их местами. При этом оператор избегал вариантов, уже зарегистрированных как пакеты без ограниченной области видимости. Поэтому пакет нельзя было установить, просто ошибившись при вводе команды, например набрав npm install fhalk, но он мог появиться в поиске npm и среди подсказок редактора.
Вредоносный код во всех пакетах был одинаковым, менялись только их названия. Скрипт postinstall.js собирал имя узла, платформу, архитектуру, имя пользователя, рабочую директорию, версию Node.js, идентификатор процесса, сетевые адреса, время работы системы и название пакета. Затем он отправлял эти данные в формате JSON HTTP-запросом POST на 69.48.229.140:8080/b.
В скрипте использовался жёстко заданный IP-адрес, а передача данных не была зашифрована и не требовала аутентификации. Ошибки игнорировались, установка пакета продолжалась и при недоступности сервера. При загрузке в Node.js файл index.js регистрировал хост как агента удалённого управления. Примерно каждые 30 секунд агент опрашивал тот же сервер, получал команды оболочки, выполнял их и отправлял обратно результаты.
Вредоносная программа не выбирала жертв и не проверяла окружение. Поэтому угроза могла затронуть любой компьютер, на котором устанавливали или загружали соответствующие пакеты. Все 84 изученных архивных образца совпадали побайтово, за исключением метаданных пакетов. При тестировании в песочнице каждый образец отправил сигнал установки.
Инфраструктура, атрибуция и обнаружение
На IP-адресе управления размещалась отдельная панель FastAPI/Uvicorn под названием VHX Harvester. Эта инфраструктура поддерживала операцию против маркетплейса GPU vast.ai. В её рамках перечисляли хосты, сканировали сервисы, собирали учётные записи, развёртывали агентов и предпринимали попытки майнинга криптовалюты. Агент npm не содержал функций, связанных с GPU или vast.ai. Имеющиеся данные подтверждают использование общей инфраструктуры и, вероятно, общего управления, но не подтверждают оперативную связь между кампаниями.
Издательский аккаунт использовал адрес prime@oss.one. Разведданные связывали этот адрес с zaibali0073@gmail.com и личностью Zaib Ali в Пакистане. Атрибуцию провели со средней степенью уверенности. npm не проверяет адреса электронной почты сопровождающих, и ни один артефакт кампании не связывает инфраструктуру напрямую с этим человеком.
Для обнаружения можно отслеживать установочные скрипты, которые подключаются к IP-адресам без доменных имён, периодические HTTP-запросы из Node.js, процессы оболочки, запущенные из node_modules, а также крупные наборы автоматически сгенерированных пакетов с ограниченной областью видимости, опубликованные одним аккаунтом.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



