Вредоносный npm-пакет Veltrix: цифровой шпион под видом AI-агента атаковал Windows-системы

information security

В середине апреля 2026 года в репозитории пакетов npm появилась тщательно замаскированная угроза, которая за 48 часов успела поразить несколько десятков систем. Злоумышленник опубликовал три пакета под видом полезных инструментов, но внутри каждого скрывался полноценный троян удалённого доступа Veltrix. Эта вредоносная программа способна полностью скомпрометировать компьютер за считанные минуты, украв все сохранённые пароли, сессионные данные мессенджеров, криптовалютные сид-фразы и даже получив доступ к веб-камере и микрофону.

Описание

Пакет ixpresso-core позиционировался как "персональный AI-агент для управления устройством через WhatsApp". В действительности никакой интеграции с WhatsApp не было. Вся кампания длилась с 14 по 16 апреля, когда служба безопасности npm удалила все три вредоносных пакета. Учётная запись loltestpad была создана 14 апреля 2026 года - в тот же день, когда появилась первая версия трояна. Адрес электронной почты fucktestpad[@]opemails[.]com использовал сервис временной почты, что указывает на осознанное стремление скрыть личность.

Как происходило заражение

Пакет ixpresso-core не содержал классического postinstall hook. Вместо этого он маскировался под инструмент разработчика, который жертва запускает самостоятельно. Механизм запуска ("bin/ixpresso.js") активировал основной вредоносный код с параметрами "detached: true" и "windowsHide: true", что делало процесс невидимым для пользователя. Терминал сообщал о завершении работы, но в системе уже закреплялся троян.

Сразу после запуска выполнялся PowerShell-код, закодированный в Base64. Этот код делал три вещи: добавлял правило брандмауэра "Windows Security Handler" для входящих соединений на порт 3000, блокировал переход компьютера в спящий режим с помощью вызова "SetThreadExecutionState" и прятал окно консоли через "ShowWindow". Такой подход позволял обойти антивирусные сигнатуры, которые обычно ищут строки в незакодированном виде.

Захват системы и кража данных

В отчёте независимых исследователей описывается, что уже через 35 секунд после запуска активировался модуль SessionHijacker. Он сканировал хранилища LevelDB всех установленных версий Discord (включая Canary и PTB), а также браузера Chrome. Программа извлекала как обычные токены в открытом виде, так и зашифрованные с помощью DPAPI. Для расшифровки последних использовалась функция ProtectedData.Unprotect через PowerShell, после чего маскированный ключ передавался злоумышленнику.

Следом запускался сбор криптовалютных активов. Модуль сканировал папки "Рабочий стол", "Документы" и "Загрузки" в поисках файлов с именами, содержащими слова wallet, seed, phrase, password, secret, crypto, backup, metamask или phantom. Найденные документы размером до двух мегабайт упаковывались в ZIP и отправлялись на сервер. Telegram-сессии постигла та же участь: папка tdata из каталога "%APPDATA%\Telegram Desktop" копировалась и эксфильтровалась. Этого одного набора файлов достаточно, чтобы получить полный доступ к аккаунту без ввода пароля.

На 45-й секунде активировался VaultScraper, который атаковал браузеры Chrome, Brave и Edge. Программа расшифровывала мастер-ключ DPAPI каждого браузера, затем обходила все профили и извлекала данные из баз SQLite: логины, пароли, куки, номера кредитных карт и автозаполнение. Вся информация сериализовалась в JSON и отправлялась на управляющий сервер.

Постоянное наблюдение

Ключевая особенность Veltrix - система непрерывного шпионажа в реальном времени. Модуль ScoutService регистрировал глобальный перехват нажатий клавиш через библиотеку uiohook-napi. Счётчик сбрасывался каждые десять нажатий или после секунды бездействия. К каждому фрагменту добавлялся заголовок активного окна, что позволяло злоумышленнику понимать контекст ввода. Весь поток данных дублировался через Discord webhook и MQTT-брокер.

Буфер обмена опрашивался каждые 15 секунд через команду Get-Clipboard. Если пользователь копировал что-то важное - пароль, адрес криптокошелька, URL - это сразу уходило злоумышленнику. Дополнительно работал так называемый "смотрельщик окон": каждые пять секунд проверялось, какое приложение находится на переднем плане. Если это был браузер (Chrome, Edge, Opera), окно банка, страница входа, Discord или Telegram, система делала автоматический скриншот.

Удалённое управление через Cloudflare

Самая опасная функция трояна - полноценная панель удалённого управления. После запуска модуля Cloudflare туннель локальный сервер на порту 3000 становился доступным через общедоступный домен вида "*.trycloudflare.com". Ссылку злоумышленник получал сразу на свой Discord-канал. Панель требовала пароль, но, как выяснили исследователи, по умолчанию использовался пароль admin123. Более того, в браузерной истории автозаполнения самого злоумышленника этот пароль сохранился в открытом виде.

Панель управления давала полный контроль над заражённой машиной: прямой рабочий стол через FFmpeg-стриминг, внедрение нажатий клавиш и движений мыши, доступ к веб-камере и микрофону, а также произвольное выполнение PowerShell-команд. Через HTTP API можно было просматривать, скачивать, загружать и удалять любые файлы, завершать процессы, запускать повторный сбор учётных данных и даже выполнить самоуничтожение - команда "POST /api/elite/purge" удаляла весь вредоносный код и отправляла прощальное сообщение на Discord.

Тактика закрепления в системе

Модуль PersistenceManager копировал исполняемый файл Node.js в каталог "%APPDATA%\Microsoft\Windows\Protect\" под именем WebSecureSystem.exe. Это дириктория, которую Windows использует для защиты учётных данных через DPAPI - злоумышленники рассчитывали, что антивирусы не будут проверять эту папку. Затем создавалась запланированная задача WindowsHealthMonitor, которая запускала вредонос при каждом входе пользователя в систему.

В коде также нашёлся механизм для работы через реестр (ключ WindowsSecuritySync), но в версии 1.0.2 он не использовался. Исследователи полагают, что это подготовка для будущих обновлений.

Самонадеянность злоумышленника

Анализ показал, что разработчик тестировал Veltrix на собственном компьютере перед публикацией. В составе пакета обнаружилось 64 скриншота PNG из тестовых сессий, датированных периодом с 30 марта по 14 апреля 2026 года. На одном из скриншотов видна панель VAULT с результатами кражи: 118 паролей, 125 кук и частичные значения кук Google. Автозаполнение адресной строки раскрыло пароль admin123 в URL к панели управления. Имя хоста злоумышленника - LAPTOP-TQQFE0GQ - также было зафиксировано.

Самое ироничное - злоумышленник случайно сохранил скриншот собственной панели, на которой отображались украденные данные из его же браузера. В частности, были видны куки с доменов google.com и youtube.com, что указывает на реальные аккаунты разработчика.

Каналы управления и связь

Основным каналом для краденых данных служил Discord webhook, жёстко прописанный в коде. Подтверждалась его активность: канал "#system" на сервере Discord с идентификатором 1480992515933868257 всё ещё принимал сообщения на момент публикации отчёта. Бот назывался Captain Hook. На том же сервере обнаружился канал "#apk", что указывает на разработку или развёртывание Android-версии инструментария.

Параллельно использовался MQTT-брокер HiveMQ с публичным доступом. Каждое заражённое устройство отправляло сигнал на топик "veltrix/signals/VELTRIX-SIGNAL-KEY-SET/<machineId>". Поскольку HiveMQ - общедоступная инфраструктура, любой, кто знает строку топика, мог наблюдать трафик от всех жертв этой кампании. Злоумышленник мог отправить команду "stopassholeshit" на устройство-топик, чтобы остановить вредонос.

Защита и рекомендации

npm удалил все три пакета - ixpresso-core (версии 1.0.0-1.0.2), godsplan (версии 1.0.2-1.0.8) и eyevox (версии 2.1.4-2.1.11) - в течение 48 часов с момента публикации. Любую систему, где эти пакеты были установлены, следует считать скомпрометированной. Специалисты рекомендуют немедленно сменить все сохранённые в браузере пароли, отозвать токены Discord и Telegram, а также проверить Планировщик заданий на наличие задачи WindowsHealthMonitor и каталог "%APPDATA%\Microsoft\Windows\Protect\" на присутствие файла WebSecureSystem.exe.

Ситуация с каналом "#apk" говорит о том, что угроза не исчерпана. Android-версия инструмента может появиться в других каналах распространения, а не только в npm. Администраторам стоит включить проверку новых пакетов от недавно зарегистрированных авторов в свои процессы безопасности, чтобы предотвратить подобные инциденты в будущем.

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

Packages

  • ixpresso-core v1.0.0–v1.0.2

Domain Port Combinations

  • broker.hivemq.com:1883

URLs

  • https://discord.com/api/webhooks/1486877933300617247/9vbGvM1GGELD5AgRHxOq1n5WwJZejtgy8jSZcOqM61AnPpXiSwjjggXrXArdEUgygxQ_

Emails

  • fucktestpad@opemails.com
Комментарии: 0