В npm нашли одиннадцать пакетов с новым похитителем данных, похожим на инструменты КНДР

Атака на цепочку поставок NPM

В сентябре 2026 года в репозитории npm (менеджер пакетов для JavaScript) обнаружили одиннадцать библиотек, скрывавших новый похититель данных. Публикации шли с 12 по 16 сентября. Часть пакетов маскировалась под служебные утилиты для работы с процессами, часть - под клиентские модули. Рабочее имя вредоносной программы - WeaselBiscuit. Связь с КНДР авторы находки называют рабочей версией, а не доказанным фактом.

Описание

Цепочка запуска выглядит так. Приложение подключает библиотеку, и при её импорте автоматически стартует скрытый фоновый процесс на Node.js (среда выполнения JavaScript вне браузера). Он забирает настоящий вредоносный код с внешнего сервиса-тайника, где тот лежит обычным текстовым файлом, и выполняет его прямо в памяти, не сохраняя на диск. Затем программа связывается с командно-контрольным сервером (C2-сервером, узлом для управления заражёнными машинами) и ждёт указаний. Заметных окон и установки нет, поэтому при беглом осмотре машина выглядит чистой.

Пакеты попали в поле зрения автоматики, которая пометила их как вредоносные и сгруппировала по общим признакам. Совпадений хватило, чтобы говорить о единой архитектуре, а не о разрозненных публикациях. По данным OpenSourceMalware, набор задач у новинки заметно скромнее, чем у известных родственников. В кампаниях, которые связывают с КНДР, ранее встречались программы BeaverTail и OtterCookie. Они умеют расшифровывать пароли, сохранённые в браузере, искать во всех файлах фразы восстановления кошельков, делать снимки экрана и открывать удалённую оболочку. Здесь этого нет. Нет и списка конкретных расширений-кошельков, который обычно зашивают в код.

Что программа всё-таки забирает. Она собирает сведения о машине. Среди них - имя узла, учётная запись, версия системы, объём памяти. Рядом идут сетевые адреса и геолокация по внешнему адресу. Главная же цель - хранилища расширений браузера Chrome на Windows, macOS и Linux. Именно там расширения-кошельки держат данные для подписи транзакций. По команде оператора программа читает содержимое буфера обмена и перехватывает нажатия клавиш, но только на Windows. Обе эти функции оператор включает со своей стороны.

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

Имена пакетов и загружаемые данные содержали числа: 10, 12, 44, 79, 95, 99. Похожие метки встречались в другом кластере - PolinRider. По всей видимости, так оператор сортирует заражённые машины по группам, хотя что именно означают эти числа, авторы не выяснили. Один из пакетов провисел в открытом доступе до 16 сентября, то есть удаление заняло несколько дней. Часть библиотек успела разойтись по чужим сборкам.

Сходство с более известными семействами прослеживается в деталях доставки: среда разработчиков как канал распространения, кража хранилищ расширений, сбор буфера обмена, перехват клавиатуры, вынесенная наружу конфигурация. Cisco Talos отмечала, что границы между BeaverTail и OtterCookie в последних кампаниях размылись. Но общих уникальных фрагментов кода или инфраструктуры исследователи не нашли. Поэтому уверенность в причастности КНДР оценивается от низкой до умеренной, а версия о полностью новом семействе - как маловероятная.

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

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

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

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

IPv4 Port Combination

  • 103.170.217.184:8787

URL

  • https://api.npoint.io/24c12c4b66a29747764f
  • https://api.npoint.io/24c25d5f5fcbb0992a4f
  • https://api.npoint.io/33e8d008c334b060adad
  • https://api.npoint.io/37c0a0c68bf7a94ed731
  • https://api.npoint.io/641d37178a880b1e8b8f
  • https://api.npoint.io/933a731a5e97f4b45249
  • https://api.npoint.io/ddae72efbb6714fae922

SHA256

  • 7b15605f23b131b3eeea57e031ae7cb32fc4b78c7bbb2025aa7a561ea5ae5159

npm package

  • @biz44/id10-client
  • @biz44/id12-client
  • @biz44/id44-client
  • @biz44/id79-client
  • @biz44/id95-client
  • @biz44/id99-client
  • @biz44/process-runtime-utils
  • @biz44/runtime-utils
  • engin1 (v1.3.99)
  • id79-client
  • process-lhpm
  • process-tailwind (v1.1.99)
  • swnwall (v1.2.10)

Комментарии: 0