Вредоносный пакет node-env-resolve на npm оказался трояном удалённого доступа, связанным с северокорейской кампанией Contagious Interview

security

Исследователи информационной безопасности обнаружили в реестре npm пакет node-env-resolve, который маскируется под легковесный конфигуратор окружения для Node.js. На самом деле он содержит полноценный троян удалённого доступа (RAT). Пакет распространялся через учётную запись user0001 и за восемь дней набрал почти 1300 загрузок. Анализ показал, что вредоносная полезная нагрузка совпадает с инструментарием OtterCookie, который используется в ходе кампании Contagious Interview, связываемой с хакерской группой Lazarus из Северной Кореи.

Описание

Пакет node-env-resolve публиковался с 25 апреля по 2 мая 2026 года. Всего вышло десять версий. Первые две версии 1.0.0 и 1.0.1 содержали заглушку с локальным адресом сервера управления (C2). Начиная с версии 1.0.2 адрес сменился на реальный: 152.67.0[.]53:8471. Именно этот узел, размещённый в облаке Oracle в Азиатско-Тихоокеанском регионе, становится центром управления атакованными машинами. С этим же аккаунтом связано ещё пять подозрительных пакетов: connector-agent, node-gyp-runtime, centralogger, node-fetch-lite и dom-utils-lite.

Описание пакета в файле package.json обещает "лёгкий конфигуратор окружения". Однако в исходном коде нет ни одной функции, относящейся к настройке среды. Вместо этого присутствуют модули для захвата экрана, записи звука, сбора истории браузера и управления вводом. Вредоносная логика запускается автоматически через скрипт postinstall.js, который срабатывает сразу после выполнения npm install.

Механизм закрепления в системе продуман до мелочей. Скрипт копирует все файлы агента в скрытую директорию. На Windows это папка %APPDATA%\node-gyp-cache, на macOS или Linux - ~/.node-gyp-cache. После копирования запускается установка зависимостей, а затем создаётся запись для автозапуска. На Windows троян пытается добавить себя в реестр через ключ Run, а при неудаче - размещает скрипт VBS в папке автозагрузки. На macOS создаётся файл plist в LaunchAgents, на Linux - файл .desktop в ~/.config/autostart. Все эти действия не требуют прав администратора, что делает заражение незаметным для большинства пользователей.

После установки агент подключается к серверу управления по протоколу Socket.IO. Он передаёт уникальный идентификатор на основе аппаратного серийного номера, а также информацию о системе: имя хоста, имя пользователя, версию ОС, IP-адрес, число ядер процессора, объём памяти и время работы. Сервер может отправлять агенту команды, позволяющие выполнить практически любые действия на заражённом устройстве.

Среди возможностей трояна - трансляция скриншотов с частотой до 4 кадров в секунду, полное управление мышью и клавиатурой, захват звука с микрофона или системного вывода. Отдельно реализован сбор истории браузера. Агент извлекает базы данных SQLite из профилей Chrome, Edge и Firefox, копируя их во временную папку, чтобы обойти блокировку файлов. Далее злоумышленник может просматривать, скачивать или записывать любые файлы из профиля пользователя, а также архивировать целые папки до 50 мегабайт.

Особое внимание уделено предотвращению перехода компьютера в спящий режим. На Windows запускается скрытый скрипт PowerShell, который каждые 30 секунд имитирует движение мыши. На macOS используется команда caffeinate, на Linux - systemd-inhibit. Это гарантирует беспрерывный доступ к экрану во время сессии удалённого управления.

Специалисты по безопасности из SafeDep в своём отчёте установили, что набор зависимостей node-env-resolve полностью совпадает с инструментарием OtterCookie. Этот троян ранее был задокументирован в рамках кампании Contagious Interview. Операция, приписываемая группировке Lazarus, нацелена на разработчиков через фиктивные собеседования на работу. Жертвам предлагают установить вредоносные пакеты якобы для выполнения тестового задания. В состав OtterCookie входят библиотеки socket.io-client, screenshot-desktop, sharp, @nut-tree-fork/nut-js, better-sqlite3 и node-machine-id. Все они присутствуют в node-env-resolve. Причём модуль nut-js, отвечающий за управление мышью и клавиатурой, появился в более новых версиях OtterCookie, что подтверждает активную разработку кампании.

Однако есть отличия. Ранее обнаруженные образы OtterCookie не имели модулей захвата микрофона и команды самоудаления. В node-env-resolve реализована команда agent:kill, которая удаляет все следы закрепления и завершает процесс. Это говорит о том, что злоумышленники продолжают совершенствовать своё оружие. Адрес C2 152.67.0[.]53 не встречался в известных списках индикаторов компрометации Contagious Interview. Ранее операторы использовали хостинг RouterHosting, сервисы Vercel и Pastebin. Поэтому нельзя исключать, что пакет мог быть создан не государственными хакерами, а киберпреступниками, скопировавшими открытый инструментарий. Тем не менее точное совпадение набора зависимостей позволяет с умеренной уверенностью приписать атаку северокорейской группировке.

В настоящее время пакет node-env-resolve и связанные с ним пакеты продолжают оставаться в реестре npm. Разработчикам следует немедленно проверить свои проекты на наличие этих зависимостей. Если пакет был установлен, необходимо удалить его вручную, очистить автозагрузку и проверить систему на признаки присутствия трояна. Особое внимание стоит уделить созданию учётных записей, копированию файлов и изменению реестра. Использование сетевых экранов и систем обнаружения вторжений (IDS) поможет предотвратить связь с подозрительными адресами. Ситуация в очередной раз напоминает, что пакеты из реестров с открытым исходным кодом нельзя устанавливать без проверки их содержимого, особенно если они приходят по ссылке от незнакомого собеседника.

Индикаторы компрометации

IPv4

  • 152.67.0.53

URLs

  • http://152.67.0.53:8471
Комментарии: 0