Два пакета @joyfill в npm заражены: RAT запускается прямо при импорте

· Безопасность
В бета-версиях npm-пакетов @joyfill/layouts и @joyfill/components обнаружен вредоносный код, который загружает троян удалённого доступа через блокчейн-транзакции. По данным Socket, за атакой стоят северокорейские хакеры.

cover.svg

Компания Socket, специализирующаяся на безопасности цепочек поставок ПО, сообщила о компрометации двух пакетов из пространства имён @joyfill в реестре npm. Заражёнными оказались бета-сборки @joyfill/layouts@0.1.2-2773.beta.0 и @joyfill/components@4.0.0-rc24-2773-beta.4. Внутри — троян удалённого доступа из семейства DEV#POPPER.

Срабатывает при импорте, а не по хуку

Главная особенность вредоноса — момент запуска. Большинство подобных пакетов активируются через lifecycle-хуки npm при установке. Здесь же имплант выполняется, как только Node.js загружает точку входа CommonJS-пакета. То есть достаточно просто подключить библиотеку в коде — и она получает возможность выполнить произвольные команды в контексте любого процесса: среды разработки, CI-раннера, тестового окружения, серверного рендеринга или сборки.

Блокчейн вместо привычного C2

Самое любопытное — способ доставки полезной нагрузки. Зашифрованный код подтягивается через транзакции в сетях Tron, Aptos и BNB Smart Chain. Имплант обращается к «зашитому» адресу Tron, извлекает хеш транзакции BSC, а если шаг срывается — использует аккаунт Aptos как запасной путь. Из транзакции извлекается и расшифровывается JavaScript.

Такая многоуровневая схема даёт атакующим устойчивость: полезную нагрузку можно менять, не публикуя новую версию пакета. Ту же тактику ранее заметили в кампании ViteVenom против экосистемы Vite, и Socket связывает оба случая с одной операцией северокорейских группировок (кластеры PolinRider и Contagious Interview).

Что делает вредонос

Имплант работает в двух параллельных ветвях. Одна восстанавливает 77-килобайтную нагрузку clientCode — Node.js-RAT с удалённым управлением через Socket.IO. Вторая запускает отдельный процесс Node.js, который обращается к IP-адресу 23.27.13[.]43 за загрузочной нагрузкой. Эта ветвь не привязана к исходному процессу и продолжает работать даже после завершения сборки или CLI-команды.

Финальный clientCode умеет выгружать файлы, собирать сведения о хосте, читать буфер обмена (через PowerShell на Windows, pbpaste на macOS, xclip/xsel на Linux) и подгружать дополнительный код. При этом он избегает запуска на машинах с именами github-runner, buildbot, buildkitsandbox и microsoft-standard-WSL2 — то есть в CI и песочницах. Со второй ветвью также связан Python-инфостилер (по оценке — вариант OmniStealer), крадущий данные браузеров, кошельков, менеджеров паролей, Git-учётки, конфигурацию GitHub CLI и хранилище VS Code.

Что делать

Обе вредоносные версии опубликованы одной учётной записью npm с использованием Node.js 18.20.0 и npm 10.5.0; код присутствовал уже на этапе сборки. Как именно произошло внедрение — через компрометацию рабочей станции, репозитория, CI или учётных данных для публикации — пока неясно.

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


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.