Безопасность · npm

MALFEX: кампания в npm прячет Overlord RAT внутри обычных PNG-файлов

Исследователи Checkmarx раскрыли долгоживущую кампанию MALFEX: восемь npm-пакетов с 40 767 загрузками доставляют на Windows троян удалённого доступа Overlord и Node.js-стилер, маскируя исполняемый код под безобидные PNG-картинки.

10 октября 2026 Редакция Loadfile ~7 мин
Файл PNG трескается, из него вырывается вредоносный код на фоне кубиков npm-пакетов
Содержание
  1. Что такое MALFEX
  2. Как вредонос прячется в PNG
  3. Цепочка заражения
  4. Что похищает Overlord и movinlike
  5. Кто под ударом
  6. Как защититься разработчику
  7. Источники

Коротко: кампания MALFEX, описанная Checkmarx 8 октября 2026 года, работает в npm с августа 2023 года. Восемь пакетов — function-flag, function-color, cdn-img-fetch, img-to-native, native-runner, tlxbnhd, tldriver и mxdriver — набрали 40 767 загрузок. Установочные скрипты скачивают с внешних серверов файлы под видом PNG-изображений, из которых извлекается троян Overlord RAT и Node.js-стилер movinlike, ворующий токены Discord, куки браузеров, сессии Telegram и крипто-кошельки.

Что такое MALFEX

MALFEX — кодовое имя кампании, которую приписывают одному оператору: в описании заражённых пакетов встречается подпись «Malfex team, owner Murizada» на португальском языке. Компания Checkmarx опубликовала техническое исследование 8 октября 2026 года, проследив активность с августа 2023 года — атака существовала больше двух лет, прежде чем попала в публичные advisory-базы.

В npm-реестре были выявлены восемь вредоносных пакетов: function-flag, function-color, cdn-img-fetch, img-to-native, native-runner, tlxbnhd, tldriver и mxdriver. По данным Checkmarx, к 1 октября 2026 года их суммарно скачали 40 767 раз — в основном за счёт пакета function-flag.

Как вредонос прячется в PNG

Главная особенность MALFEX — доставка полезной нагрузки под видом графического файла. Исследователи зафиксировали два разных приёма маскировки под PNG:

  • Первый способ. Файл выдаётся сервером как image/png, но на деле это архив Microsoft IExpress. Внутри архива подписанный интерпретатор AutoIt запускает зашифрованный скрипт.
  • Второй способ. Берётся настоящий, валидный PNG-файл, а после маркера конца данных изображения дописываются дополнительные байты. Загрузчик находит этот «хвост», расшифровывает его через AES и получает исполняемый код.

Оба метода рассчитаны на то, что сканеры и фильтры трафика по умолчанию доверяют расширению и MIME-типу файла, не проверяя его структуру побайтово. С похожей логикой — спрятать код в пикселях легитимного изображения — ранее работала кампания TerminalFix, но там код записывался прямо в значения RGBA-каналов. MALFEX пошёл другим путём: PNG здесь либо полноценный вредоносный архив под чужой личиной, либо контейнер с дозаписанными данными после конца файла.

Цепочка заражения

По техническому разбору Checkmarx, атака на Windows-разработчика проходит несколько стадий:

  1. Установка пакета. Жертва ставит один из восьми npm-пакетов — вручную или как транзитивную зависимость. Обфусцированные скрипты preinstall.js/postinstall.js запускаются автоматически при каждом npm install.
  2. Скачивание «картинки». Скрипт обращается к серверу api.imghippo.com и получает файл, оформленный как PNG, а на деле — IExpress-архив с Overlord RAT.
  3. Сохранение и запуск. Payload сохраняется на диск под именами gldriver_pre_core.exe и gldriver_pre_asset.exe, запускается, после чего установочные скрипты самоудаляются, подчищая следы.
  4. Process hollowing. Overlord внедряется в подписанный системный процесс TapiUnattend.exe, подменяя родительский процесс на explorer.exe — так вредонос выглядит легитимным для систем мониторинга.
  5. Закрепление в системе. Создаётся задача планировщика с именем \Maiden, которая запускает AutoIt3.exe со скриптом h.a3x каждые 5 минут без ограничения по времени. Дата старта задачи намеренно указана задним числом — 1 января 2020 года, — чтобы не привлекать внимание при проверке недавно созданных задач.
!
Важно

Ни один из восьми пакетов не эксплуатирует уязвимость в npm или Node.js — заражение происходит исключительно через установочные скрипты (postinstall), которые npm выполняет автоматически, если их не отключить явно.

Что похищает Overlord и movinlike

Помимо RAT-функциональности, часть цепочки MALFEX устанавливает Node.js-стилер, которому исследователи дали имя movinlike. Он собирает:

💬

Discord-токены

Позволяют захватить аккаунт жертвы без пароля — через похищенный токен сессии.

🌐

Куки и пароли браузера

Сохранённые логины и cookie-сессии из установленных на машине браузеров.

✈️

Сессии Telegram

Файлы сессии Telegram-клиента дают доступ к переписке без повторного входа.

🪙

Криптокошельки

Данные локальных кошельков — потенциальная прямая финансовая потеря.

Похищенные данные сжимаются и отправляются блоками через вебхук Discord — приём, который маскирует эксфильтрацию под обычный легитимный API-трафик мессенджера.

Кто под ударом

Основная аудитория атаки — разработчики на Windows, подключающие пакеты из npm в свои проекты вручную или через автоматическую установку зависимостей в CI/CD. Названия пакетов (function-flag, cdn-img-fetch, img-to-native, native-runner) специально подобраны так, чтобы выглядеть как служебные утилиты для работы с изображениями и сборкой — их легко принять за легитимную зависимость при беглом просмотре package.json.

Как защититься разработчику

  1. Отключайте автозапуск install-скриptov по умолчанию. Флаг npm install --ignore-scripts блокирует выполнение preinstall/postinstall до ручной проверки пакета.
  2. Проверяйте происхождение зависимости перед установкой. Малое число загрузок, недавняя публикация и обфусцированный код install-скрипта — тревожные признаки.
  3. Не доверяйте MIME-типу и расширению файла. Как показывает MALFEX, файл с заголовком image/png может оказаться исполняемым архивом. Проверить реальную структуру скачанного файла по сигнатуре байтов, а не по расширению, можно инструментом «Определить формат файла».
  4. Мониторьте задачи планировщика и запущенные процессы. Неизвестная задача, повторяющаяся каждые несколько минут, и процесс, замаскированный под системный, — признак закрепления вредоноса.
  5. Используйте lock-файлы и аудит зависимостей. npm audit и фиксация версий через package-lock.json снижают риск случайной установки вредоносного патча зависимости.

Общий список форматов, которыми чаще всего маскируют вредонос, собран в материале «Карта опасных расширений».

Источники