Версиите за бета версии на два npm пакета в пространството от имена @joyfill са компрометирани, за да доставят троянски кон за отдалечен достъп (RAT), свързан с фамилията зловреден код DEV#POPPER.
Списъкът със засегнатите пакети е следният:
- @joyfill/layouts@0.1.2-2773.beta.0
- @joyfill/components@4.0.0-rc24-2773-beta.4
Двата пакета „съдържат имплант на JavaScript по време на импортиране, който декриптира код чрез транзакции в Tron, Aptos и BNB Smart Chain“, се казва в анализ на Socket.
За разлика от други зловредни пакети, които се задействат чрез кука за жизнения цикъл на npm, имплантът, доставен като част от JavaScript библиотеките, се изпълнява, когато Node.js зареди входната точка на пакета CommonJS.
Струва си да се отбележи, че използването на структура за разрешаване с множество блокчейни, включваща Tron, Aptos и BNB Smart Chain (BSC), е свързано с група заплахи, проследявана като PolinRider, за която се смята, че е свързана с Contagious Interview.
По-рано този месец Checkmarx и OpenSourceMalware подчертаха набор от зловредни npm пакети, общо наричани ViteVenom, насочени към екосистемата на инструментите за преден край Vite, използващи същата многостепенна блокчейн-базирана командна и контролна (C2) инфраструктура за доставяне на RAT с възможности за обратна обвивка (reverse shell), събиране на идентификационни данни, извличане на файлове и инжектиране на постоянен заден вход (backdoor).
Имплантът се състои от две паралелни последователности от действия:
- Клон в рамките на процеса, който води до възстановен 77 KB зловреден код на JavaScript с прилики с фамилията зловреден код DEV#POPPER.
- Вторичен клон, който стартира отделен процес на Node.js, изисква отделен код за стартиране от 23.27.13[.]43, декриптира отговора и го изпълнява.
След като пакетът бъде зареден, той инициира блокчейн-базирано изпращане, което получава транзакционен хеш на BSC от последната изходяща транзакция на твърдо кодиран Tron адрес. Ако тази стъпка неуспее, той изпраща заявка до акаунт в Aptos като резервен вариант за извличане на транзакцията на BSC и от нея декриптира, извлича и изпълнява JavaScript кода.
Както клоновете в процеса, така и отделните процеси използват различен набор от адреси на портфейли, акаунти и транзакции за Tron, Aptos и BSC. Използването на блокчейн също така означава, че той предлага оперативна устойчивост и прави възможно промяната на инжектирания код без да се налага публикуването на нова версия на пакетите.
Първият зловреден код в процеса е JavaScript зареждач, който използва метода за разрешаване на блокчейн за извличане на втори етап на зловреден код, наречен „clientCode“. От друга страна, отделният процес изпраща заявка до гореспоменатия IP адрес, за да получи и изпълни JavaScript код.
„Това е резервен клон за доставка, а не безобиден алтернативен вариант“, обясни Socket. „Той е отделен от импортиращия процес на Node.js и може да продължи след приключване на компилация, тест или CLI команда.“
Крайният зловреден код „clientCode“ е силно обфускиран и функционира като Node.js RAT със следните характеристики, като същевременно избягва изпълнение на машини за разработка, CI или изолирани среди (sandboxed) с хост имена github-runner, buildbot, buildkitsandbox и microsoft-standard-WSL2:
- Качване на файлове в конфигурирания хост за качване.
- Четене на данни от клипборда чрез PowerShell на Windows, pbpaste на macOS и xclip или xsel на Linux.
С отделния процес се свързват два вида зловреден код: RAT „clientCode“ и инструмент за кражба на информация на Python (infostealer), който може да събира широк набор от данни от компрометирани хостове. Смята се, че това е итерация на зловредния софтуер OmniStealer, подробности за който бяха подчертани за първи път от eSentire по-рано този април.
Данните, събирани от зловредния софтуер, са следните:
- Информация за средата и хоста.
- Данни от Windows Credential Manager и Linux Secret Service.
- Данни от браузъри Chromium и Firefox.
- Хранилище на разширения на браузъра за портфейли и мениджъри на пароли.
- Хранилище на Microsoft Visual Studio Code.
Socket заяви пред The Hacker News, че както ViteVenom, така и последната колекция от npm пакети са свързани с една и съща текуща операция на севернокорейски киберпрестъпници, а не представляват отделни кампании.
Според компанията за сигурност на приложенията и двете зловредни версии са публикувани от една и съща идентичност в npm, използвайки Node.js 18.20.0 и npm 10.5.0, като кодът е присъствал по време на пакетирането (bundle time). Въпреки това в момента не е ясно дали това инжектиране на изходен код е постигнато след компрометиране на работна станция на разработчик, хранилище за изходен код, CI среда или идентификационни данни за публикуване.
Разработчиците, които са инсталирали засегнатите версии, се съветват да ги премахнат от lock-файлове, кешове, вътрешни огледала, компилационни изображения и артефакти за внедряване, да ги фиксират към проверена версия и да променят идентификационните данни от засегнатия Node.js процес.
„Версията на @joyfill/layouts трябва да се третира като способна на произволно изпълнение на код в контекста на всеки процес, който я зарежда“, каза Socket. „Това включва среди за разработка, среди за CI тестове, инструменти за тестване, рендиране от страна на сървъра и компилации.“
„Крайният възстановен код може да събира информация за хоста, да установява канал за дистанционно управление Socket.IO, да изпълнява предоставен JavaScript или команди на обвивката (shell) и да качва файлове.“