Сигурност

Заразени npm пакети joyfill пускат троянец при import

Заразени npm пакети joyfill пускат троянец при import

Изследователите от Socket съобщиха, че две бета версии на пакети от npm пространството @joyfill са били компрометирани и разпространяват троянец за отдалечен достъп. Заразените публикации са @joyfill/layouts@0.1.2-2773.beta.0 (качена на 28 юли 2026 г. в 10:54 UTC) и @joyfill/components@4.0.0-rc24-2773-beta.4 (в 11:03 UTC същия ден). Двата пакета събират около 16 000 сваляния седмично — цифрите се припокриват, защото единият зависи от другия.

Защо този случай е различен

Повечето атаки по веригата на доставки в npm залагат на lifecycle скриптове — postinstall и подобни — и затова стандартният съвет е да инсталирате с npm install --ignore-scripts. Тук това не помага.

Зловредният код е добавен направо в CommonJS бъндъла на библиотеката, така че се изпълнява в момента, в който Node.js зареди входната точка на пакета:

// достатъчно е това, за да тръгне имплантът
const layouts = require('@joyfill/layouts');

С други думи, всеки import или require — при разработка, при тест, при билд или на продукционен сървър — означава изпълнение на чужд код. The Hacker News цитира оценката на Socket, че става дума за произволно изпълнение на код в целия жизнен цикъл на приложението.

Командният канал минава през блокчейн

Най-любопитната част е как имплантът намира сървъра си. Вместо твърдо зашит домейн, стартовият код прави заявки към адреси в Tron и Aptos, за да извади хешове на транзакции, а после чете транзакции в BNB Smart Chain, в които е скрит криптиран товар. Разшифроването е обикновен XOR с зашити ключове.

Резултатът е RAT от около 77 KB, свързан със семейството DEV#POPPER. Сред възможностите му:

  • отдалечена командна обвивка през Socket.IO;
  • качване и сваляне на файлове;
  • изчитане на клипборда (през PowerShell, pbpaste или xclip);
  • събиране на данни за машината и периодични check-in съобщения;
  • пускане на допълнителен infostealer на Python.

Питон компонентът се цели точно в разработчици: променливи на средата, Windows Credential Manager, Linux Secret Service, браузърни профили, разширения за крипто портфейли, Git идентификационни данни, конфигурация на GitHub и хранилището на VS Code.

Устойчивост и заобикаляне на CI

Кодът има два клона на изпълнение. Единият работи в текущия процес, другият пуска отделен Node.js процес с detached: true, който тегли втори етап от 23.27.13.43 и продължава да живее, след като билдът или тестът е приключил.

За устойчивост имплантът се вписва в инструменти, които разработчикът стартира всеки ден — @vscode/deviceid (използван от VS Code, Cursor и Antigravity), основния модул на Discord Desktop, resources/app/main.js на GitHub Desktop и глобалния npm CLI.

Има и проверка за пясъчник: ако името на хоста съвпада с github-runner, buildbot, buildkitsandbox или microsoft-standard-WSL2, кодът мълчи. Класически трик за отлагане на анализа, който вече видяхме и при други кампании — включително при слабостите, които Anthropic откри с модела Mythos, където автоматизираният анализ също е двупосочен инструмент.

Кой стои зад атаката

Socket свързва многоблокчейн резолвера с клъстер, проследяван като PolinRider, и го оценява като част от операцията Contagious Interview — севернокорейска кампания, насочена към разработчици чрез фалшиви интервюта за работа. По същата линия минават и предишните npm пакети от групата ViteVenom; изследователите приемат, че не са отделни кампании, а една продължаваща операция.

Какво да направите сега

Внимание

Ако някоя от двете версии е попадала в машина, третирайте я като напълно компрометирана. RAT-ът дава интерактивна обвивка — почистването само на node_modules не е достатъчно.

Практическите стъпки според Socket:

  1. Премахнете двете версии от lock файлове, кешове, вътрешни огледала, билд образи и артефакти за деплой.
  2. Фиксирайте проверени версии — 0.1.1 за layouts и 4.0.0-rc24 за components.
  3. Изолирайте засегнатите машини, преди да ротирате идентификационните данни, до които са имали достъп Node.js процесите.
  4. Проверете файловете на VS Code, Discord Desktop, GitHub Desktop и глобалния npm за следи от инжектиране.
  5. Прегледайте телеметрията за откачени Node процеси и за трафик към api.trongrid.io, bsc-dataseed.binance.org и fullnode.mainnet.aptoslabs.com.

Не е единственият удар по инфраструктурата на разработчици

Седмицата беше тежка и на друг фронт. Австралийският производител на полетни контролери за дронове CubePilot е станал жертва на DNS отвличане на 24 юли. Нападателят е поел DNS настройките на cubepilot.org и е издал валидни TLS сертификати за всички поддомейни — тоест потребителите са можели да виждат зелено катинарче, докато говорят с чужд сървър.

Логото на CubePilot върху тъмен фон Снимка: BleepingComputer

Компанията си е върнала контрола същия ден, свалила е офлайн OEM услугите, форума, документацията и ERP портала, отзовала е фалшивите сертификати и е сигнализирала Австралийския център за киберсигурност. Съветът към потребителите е недвусмислен: ако сте ползвали същата парола другаде, сменете я, и не флашвайте фърмуер, свален на 24 и 25 юли.

Изводът

Две отделни истории, един и същ урок: доверието в инструментите на разработчика е най-меката цел. Пакетният регистър, DNS записът и редакторът, който отваряте сутрин, са част от вашата атакувана повърхност — не по-малко от уязвимостите в потребителските устройства, за които се пише повече.

Практическото следствие е скучно, но работи: заковавайте версии, не инсталирайте бета публикации в среда с достъп до тайни и приемете, че --ignore-scripts вече не е защита, а само едно от многото сита.

Новините на Overclock — директно в Telegram, без алгоритми.

Следвайте ни в Telegram

Прочетете още