forge-jsxy npm Infostealer: IOCs & Detection Guide

forge-jsxy: Похититель информации из npm, который постоянно меняет свое название.

TL, д-р

Примерно за два месяцаВ сети вновь появился вредоносный npm-сервис, распространяющий информацию через различные пакеты, но с практически неизмененным содержимым. Изначально он был известен как... forge-jsxy, породил forge-jsx3 / forge-jsx4 братья и сестры, а затем полностью отказались от бренда "Forge", чтобы позиционировать себя как инфраструктуру для разработчиков — сначала zredis-typed, А в последнее время pinokio-redis.

Каждый вариант имеет тот же внутренний набор инструментов: файлы с именами forge-jsx-explorer-*, чтобы relayPackageServe модуль, который обслуживает forge-jsxy-package.tgzа также надежная среда выполнения, скрытая в каталоге, обозначенном точкой, благодаря чему она сохраняется после удаления пакета npm.

Полезная нагрузка содержит следующие данные: материал для криптовалютного кошелька и учетные данные разработчика от хоста и передает их на веб-сайт Discord.hooksПрограмма загружает данные через HuggingFace Hub и имеет жестко заданную конечную точку C2. Она устанавливает автозапуск на уровне ОС, чтобы снова запускаться после перезагрузки, и перехватывает активность буфера обмена, клавиатуры и экрана. Последний вариант, pinokio-redis, позиционирует себя как интеграция с "Autodesk Forge" — описание, не имеющее отношения к тому, что делает код.

ЭкосистемаНПМ
Класс полезной нагрузкимногоступенчатый информационный шпион + агент дистанционного управления (RAT)
Основные целиКриптовалютные кошельки, расширения для браузерных кошельков, учетные данные разработчика/облачного сервиса
Настойчивостьскрытая надежная среда выполнения + автозапуск ОС (сохраняется после удаления пакета)
эксфильтрациисеть раздораhooks + реле, HuggingFace Hub, жестко запрограммированный C2 на порту 9877
Наблюдаемый диапазонМай 2026 г. – июль 2026 г. (продолжается)
Последнее имяpinokio-redis:1.0.127

Анатомия атаки

Все варианты этого семейства устанавливаются одним и тем же способом: в виде пакета. На странице с описанием он выглядит инертным, но объявляет о наличии обработчика postinstall, поэтому Полезная нагрузка запускается в момент установки пакета в качестве зависимости. Крюк приводит в движение пятиступенчатую цепь.

  • Этап 1 — материализация. Скрипт установки декодирует закодированный, упакованный файл. Создает объект типа blob и записывает его в набор скриптов среды выполнения в скрытую директорию, расположенную в каталоге конфигурации платформы (в версиях forge-jsxy использовался путь .forge-jsxy/runtime/v, обозначенный точкой). Поскольку эта копия находится вне папки node_modules, удаление или отмена публикации пакета npm не приводит к удалению запущенного агента.
  • Этап 2 — проявлять настойчивость. Цепочка регистрирует запись автозапуска ОС, чтобы агент перезапускался при перезагрузке. В Windows это происходит через скрытый диагностический скрипт PowerShell; процесс агента запускается в отсоединенном режиме с параметром windowsHide, поэтому окно консоли не отображается.
  • Этап 3 — уклонение. Среда выполнения проверяет наличие маркеров непрерывной интеграции и незаметно завершает работу при обнаружении среды CI, поэтому автоматизированные песочницы сборки ничего не видят. В версиях forge-jsxy в комментарии к исходному коду указывалось, что видимое поле forgeInstall было намеренно опущено в package.json, «потому что это поле будет видно в npm» — оператор намеренно не отображал метаданные триггера в публичном списке.
  • Этап 4 — сбор. После запуска агент выполняет сбор данных за один проход:
  1. Материал для криптокошелька. Входящий в комплект файл secret_filename_patterns.json список целевых файлов запускает проверку файловой системы на наличие файлов wallet.dat и *.memonic /.Файлы .seed / *.phrase, keypair.json, Ethereum UTC – В комплект входят хранилища ключей, а также хранилища ключей в форматах *.p12 / *.pfx / *.jks. Библиотеки для создания кошельков (bip39, secp256k1, base58check и вспомогательные функции Solana) также присутствуют.
  2. Расширения для браузерных кошельков. Модуль chromiumExtensionDbHarvest считывает локальные базы данных хранилища расширений браузеров Chromium, где расширения-кошельки на основе браузера хранят свои данные хранилища.
  3. Учетные данные и секреты. Агент сканирует историю командной оболочки и файлы, содержащие секретные данные, считывает учетные данные разработчика/облачной среды, а затем кодирует учетные данные HuggingFace для загрузки.
  4. Ввод данных в реальном времени. Содержимое буфера обмена, ввод с клавиатуры и снимки экрана фиксируются в непрерывном режиме.
  • Этап 5 — эксфильтрацияСобранные данные покидают хост тремя способами. Каналы, работающие параллельно: веб-версия Discordhooks (discordWebhookPost) и Программа для загрузки файлов через Discord, которая взаимодействует с `discord.com/api/v10` (discordRelayUpload), загрузки HuggingFace Hub (hfUpload) и Заданная по умолчанию конечная точка C2 доступна через порт 9877. Сервер relayPackageServe Кроме того, модуль возвращает файл forge-jsxy-package.tgz — тот же самый. Название артефакта сохраняется при каждом переименовании.

Важный структурный момент заключается в том, что этапы 1–3 выполняются во время монтажа с Без взаимодействия с пользователем, и на первом этапе полезная нагрузка размещается где-то внутри упаковки. Менеджер не отслеживает. Разработчик, заметивший странную зависимость и При запуске команды npm uninstall удаляется запись, но не агент.

Полезная нагрузка также устойчива к быстрому считыванию. Скрипты среды выполнения не поставляются. В открытом виде: этап кодирования и развертывания сохраняет операционную логику в неизменном виде. закодированный двоичный файл, который преобразуется в читаемые скрипты только после завершения цепочки установки. декодирует его в скрытый каталог среды выполнения. Видимые файлы В описании указаны тонкая прокладка для установки после монтажа и диспергирование материала. Вспомогательная функция — мало что раскрывает о том, что в конечном итоге выполняется. Эта закодированная доставка Дизайн оказал ощутимое влияние на сортировку пациентов: на протяжении всей жизни семьи. С помощью автоматической классификации несколько подтвержденных вариантов были признаны безопасными. А содержимое пакета документов оказалось настолько непрозрачным, что полностью затормозило автоматическую проверку. Поведение, выдающее семью, становится видимым только после того, как оно будет закодировано. Сцена расширяется, и время выполнения считывается напрямую.

Лента

Грузоподъемность семейства оставалась на удивление стабильной; меняется лишь то, что Название на коробке. Дуга идет от открытого клейма «кузница» к маскируясь под несвязанные инструменты для разработчиков.

Дата (2026) Пакет: версия Внимание
Май (начало) forge-jsxy:1.0.81, :1.0.90 Самые ранние подтвержденные варианты — RAT с C2, зашифрованным с помощью AES-256-GCM.
Май 19 forge-jsxy:1.0.92 / 1.0.105 / 1.0.107 / 1.0.108 Кампания находится в активной стадии публикации; версия 1.0.92 изначально была ошибочно помечена как безопасная и отменена после повторной проверки кода.
Конец мая forge-jsx3 / forge-jsx4:1.0.122 / 1.0.123, zod-pino Соседние названия пакетов, один и тот же набор инструментов.
июнь 4 forge-jsxy:1.0.120 Продолжение; классифицировано как безопасное моделью машинного обучения (промах)
21–23 июня forge-jsxy:1.0.121 Набор модулей остался без изменений по сравнению с версией 1.0.120.
июль 6 zredis-typed:1.0.127 Слово «кузница» было исключено из названия; корабли по-прежнему... forge-jsxy-package.tgz и forgeAgent* ключи конфигурации
июль 7 pinokio-redis:1.0.127 Тот же набор инструментов; новый C2; позиционирует себя как интеграция с "Autodesk Forge".

В ходе анализа хронологии событий бросаются в глаза две вещи. Во-первых, номер версии 1.0.127 используется дословно как в zredis-typed, так и в pinokio-redis — меняется название, но история сборки не сбрасывается. Во-вторых, отказ от имен типа «forge-*» совпадает с переходом к именам, которые воспринимаются как обычные инфраструктурные (redis, pinokio), что снижает вероятность того, что разработчик, просто взглянув на имя, засомневается.

Показатели компромисса

Приведённые ниже индикаторы компрометации (IOC) дезактивированы. Хост управления и контроля (C2) переключался между строками forge-jsxy. и новейший вариант, сохранивший тот же порт.

Индикаторные Значение Видел в
Конечная точка C2 212.193.3[.]61:9877 pinokio-redis:1.0.127
Конечная точка C2 79.108.162[.]160:9877 строка forge-jsxy, zredis-typed:1.0.127
канал экс-выхода discord.com/api/webhooks/… (пост веб-хука) все варианты
канал экс-выхода discord.com/api/v10 (передача данных) все варианты
канал экс-выхода Загрузка на HuggingFace Hub все варианты
Поданный артефакт forge-jsxy-package.tgz (через relayPackageServe) все варианты
Файлы цепочки инструментов chromiumExtensionDbHarvest, discordRelayUpload, discordWebhookPost, hfUpload, encode-hf-credentials, forge-jsx-explorer-* все варианты
Список целей secret_filename_patterns.json (wallet.dat, .mnemonic/.seed/.phrase, keypair.json, UTC--, .p12/.pfx/*.jks) все варианты
Скрытая среда выполнения пунктирный …/.forge-jsxy/runtime/v<version>/ путь к каталогу конфигурации строка forge-jsxy
сохранение состояния Windows скрытый скрипт автозапуска PowerShell "forge diagnostics". все варианты
Установить триггер хук postinstall, вызывающий цепочку скриптов dist-materialization. все варианты

Наиболее надежный сигнал обнаружения исходит не от какого-либо отдельного хоста или веб-хука, а от тех, которые... поворот — но имена файлов цепочки инструментов и файл forge-jsxy-package.tgz артефакт, который сохранился в неизменном виде при каждом переименовании.

Атрибуция и наблюдаемое поведение

Пакеты были опубликованы под несколькими учетными записями npm. forge-jsxy В строке использовано имя издателя jacksonkaandorp2 (jacksonkaandorp2@outlook[.]com); Последний вариант pinokio-redis был опубликован donimique. (donimiqueakers@gmail[.]com). Ни один из аккаунтов не имел подтвержденного адреса электронной почты. связанное хранилище исходных кодов. Объединяющей нитью между учетными записями является набор инструментов, а не идентификатор издателя — те же названия модулей, те же самые Распространяемые файлы .tgz, и схема извлечения данных повторяется независимо от того, кто их опубликовал.

Некоторые наблюдаемые модели поведения указывают скорее на преднамеренное сокрытие, чем на что-либо другое. случайный избыточный сбор:

Среда выполнения размещается вне папки node_modules в скрытом каталоге, поэтому она существует дольше, чем пакет, который её предоставил.

Агент прекращает работу при обнаружении среды CI, ограничивая риски в автоматизированных аналитических средах.

Процесс агента запускается в автономном режиме. window-hidden.In В версиях forge-jsxy комментарий связывал отсутствие видимого поля установки с тем, что это поле «видимо в npm».

Описания общедоступных пакетов не имеют отношения к коду — pinokio-redis представлен как интеграция с «Autodesk Forge».

Стоит отметить один повторяющийся пробел в обнаружении, на который могут обратить внимание защитники, полагающиеся на Автоматическая классификация: в этой семье было подтверждено несколько вариантов. классификатор машинного обучения оценил код как безопасный до того, как проверка кода внесла исправления. Вердикт. Стабильные элементы, на которые может опираться рецензент — время установки. цепочка, скрытая среда выполнения, имена файлов цепочки инструментов — это именно те, которые которые сохранились после переименований.

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

Влияние, тенденции и рекомендации для защитников

Кто подвергся опасности. Данный набор инструментов ориентирован исключительно на разработчиков. устройства: криптовалютные кошельки и хранилища ключей, расширения для браузерных кошельков, История командной строки и учетные данные облачных сервисов. Любой, кто устанавливает затронутый пакет — напрямую или в качестве транзитивная зависимость — во время Окно, в котором оно работало, находится в пределах допустимых параметров, а архитектура обеспечения постоянного хранения данных означает, что Воздействие не прекращается после извлечения упаковки.

Почему важна настойчивость. Поскольку на первом этапе полезная нагрузка копируется в скрытый каталог среды выполнения и регистры второго этапа автозапуска, обычные инстинктивное исправление (удалить некорректную зависимость, удалить папку node_modules, Переустановка не удаляет агента. Служба реагирования на инциденты должна искать... не только пакет, но и среду выполнения, находящуюся вне основного дерева исходного кода, и запись автозапуска.

Тенденция. Эта семья иллюстрирует закономерность, заслуживающую внимания: Полезная нагрузка, стабильная и отработанная, упакованная в поток одноразовых материалов.Названия пакетов, которые отличаются от названий, использованных при предыдущем удалении. Узнаваемые, ориентированные на названия, которые воспринимаются как обычные объекты инфраструктуры. Названия, основанные на именах. В таких условиях списки заблокированных пользователей и репутация издателей быстро устаревают; поведение а сигналы, основанные на артефактах, — нет.

Для разработчиков и потребителей

Рассматривайте скрипты, используемые во время установки, как основной источник риска. Устанавливайте систему с отключенными скриптами, где это возможно, и проверяйте все зависимости, которые объявляют о наличии скриптов. после установки. Проверяйте и отслеживайте транзитивные зависимости; этот класс вредоносных программ может проникнуть в систему как через подзависимости, так и напрямую.

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

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

Для реестров и защитников

Предупреждение о постоянных артефактах (forge-jsxy-package.tgz, forge-jsx-explorer-* / chromiumExtensionDbHarvest / discordRelayUpload) имена файлов, а не имя пакета, которое меняется.

Укажите структурную комбинацию, на которую опирается семейство программ — пост-установка, которая размещает скрипты в скрытом пути к каталогу конфигурации, плюс операционная система. Автозапуск регистрации — независимо от используемых строк.

Название на упаковке менялось как минимум четыре раза; содержимое ящика также менялось. Это не так. Система обнаружения, основанная на работе кода, пережила все предыдущие. Пока что это переименование.

sca-инструменты-программное обеспечение-композиция-анализ-инструменты
Расставьте приоритеты, устраните и защитите риски, связанные с программным обеспечением
Получите бесплатный аккаунт.
Нет необходимости кредитную карту.

Защитите свою разработку и доставку программного обеспечения

с пакетом продуктов Xygeni