Зловреден npm пакет, който изглеждал като обикновен инструмент за индексиране на данни, разкри слабост в защитите на веригата за доставки на софтуер.

Пакетът indexed-btree копирал идентичността на легитимната библиотека sorted-btree и регистрирал почти два милиона седмични изтегляния. Кампанията е забележителна с това, че зловредният код не е необходимо да се изпълнява, докато разработчикът го инсталира.

Вместо това той чака в нормалния код на приложението и се активира при използване на библиотеката, превръщайки доверената зависимост във входна точка за профилиране на хоста, кражба на данни и доставяне на последващ зловреден код. Изследователи от Checkmarx идентифицираха тази активност.

От Checkmarx заявяват в доклад, споделен с Cyber Security News (CSN), че операцията показва защо проверките, фокусирани само върху инсталационните скриптове, могат да пропуснат заплахи, които се изпълняват на по-късен етап.

Мащабът създава риск за организации, чиито проекти може да са изтеглили пакета в системи за компилиране, среди за тестване или производствени услуги.

Атакуващите са създали и убедително хранилище и история на акаунта, добавяйки достоверност към пакет, проектиран да се слива с рутинната работа по разработка.

Зловреден npm пакет с 2 милиона изтегляния

Indexed-btree няма preinstall или postinstall команди в конфигурацията на пакета, така че самата инсталация не задейства зловредната рутина. Тази липса може да накара даден пакет да изглежда безопасен по време на бърз преглед.

Зареждащият модул (loader) е поставен в BTree.prototype.set, основен метод, който е вероятно да бъде извикан при запазване на данни от приложението. Когато необходимото условие е изпълнено, този код стартира обфускиран компонент от първи етап, което позволява на заплахата да се изпълни по време на нормалната работа на програмата, а не по време на по-внимателно наблюдавания етап на инсталация.

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

Първият етап събира информация за архитектурата на операционната система, името на хоста, процесора, паметта и времето на работа на системата (uptime). Той изпраща тази информация към контролирани от атакуващите дестинации, след което се консултира със смарт договор в тестовата мрежа Ethereum Sepolia вместо с конвенционален команден сървър.

Този дизайн, базиран на блокчейн, може да затрудни прекъсването на кампанията, тъй като смарт договорът може да насочи зловредния код към нов адрес, ако предишната дестинация бъде блокирана.

След това кодът използва криптографски обмен на ключове, за да изведе ключ за декриптиране и да комбинира криптирани данни от договора в зловреден код от втори етап, според изследването.

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

Защитата на веригата за доставки се нуждае от проверки по време на изпълнение (runtime)

Кампанията илюстрира празнина, когато екипите по сигурност третират липсата на скриптове от жизнения цикъл като доказателство, че даден npm пакет е безвреден. Тази контрола не проверява зловредно поведение, внедрено директно в основните JavaScript функции на пакета.

Организациите трябва да идентифицират дали засегнатите имена или версии на пакети присъстват в изходните кодове, lockfile файловете, изображенията за компилиране, работните станции на разработчиците и системите за непрекъсната интеграция (CI).

Екипите трябва да ги премахнат, да променят потенциално изложените тайни (secrets) и да инспектират логовете за индикаторите, изброени по-долу. Прегледът на зависимостите трябва да включва собственост, история на версиите, консистентност на хранилището и код, разпространяван чрез регистъра.

Легитимно изглеждащи комити (Източник – Checkmarx)

Скорошен доклад за компрометиране на npm пакети също показва как доверените зависимости могат да се превърнат в директен път към средите за разработка и CI средите.

За по-сигурно покритие екипите трябва да стартират съмнителни пакети в изолирани среди и да наблюдават дъщерните процеси, променитевъв файловата система, мрежовите извиквания и поведението след извикване на често използвани методи. Това може да разкрие зловредни пътища по време на изпълнение, които статичните сканирания пропускат.

Разработчиците трябва да фиксират (pin) прегледаните версии на зависимостите, да поддържат актуални спецификациите на софтуерните компоненти (SBOM) и да налагат одобрение за нови или внезапно променени пакети.

По-широкият модел включва вълни от npm пакети със задна врата (backdoor) и злоупотреба с конфигурацията на свързване, подсилвайки необходимостта от наблюдение както на инсталацията, така и на изпълнението.

За екипите за реагиране приоритет е да определят дали библиотеката е била само изтеглена, или действително използвана в работещ процес. Доказателствата по време на изпълнение, записите на процесите и мрежовата телеметрия могат да предоставят най-ясен отговор, докато кампанията остава активна.

Индикатори за компрометиране (IoCs):-

ТипИндикаторОписание
Зловреден npm пакетindexed-btreeОсновен зловреден пакет, представящ се за sorted-btree
Зловреден npm пакетordered-kv-indexВпоследствие премахнат свързан пакет
Зловреден npm пакетbtree-leaderboardВпоследствие премахнат свързан пакет
Зловреден npm пакетpriority-slot-queueВпоследствие премахнат свързан пакет
Зловреден npm пакетbtree-range-storeВпоследствие премахнат свързан пакет
Зловреден npm пакетbtree-coreВпоследствие премахнат свързан пакет
Зловреден npm пакетbtree-time-indexВпоследствие премахнат свързан пакет
Зловреден npm пакетbtree-lru-cacheВпоследствие премахнат свързан пакет
Зловреден npm пакетneighbor-key-mapВпоследствие премахнат свързан пакет
Зловреден npm пакетsliding-score-windowВпоследствие премахнат свързан пакет
Свързан npm пакетmutex-forgeПо-ранен пакет, свързан със същия смарт договор
Име на файлsharedLoad.min.jsОбфускиран компонент от първи етап на зловредния код
GitHub хранилищеhttps://github.com/INDEXED-BTREE/indexed-btree/commits/main/Хранилище, използвано за придаване на легитимен вид на пакета
Ethereum Sepolia договор0xE390863Dac96a7118C71227C2b099B50cF602D31Смарт договор, използван като C2 канал за командване и управление
RPC крайна точкаhttps://eth-sepolia.g.alchemy.com/v2/D2-TbkB2m05WXSnSDOCDIEthereum Sepolia RPC крайна точка
RPC крайна точкаhttps://sepolia.infura.io/v3/dc7257d09fab42eca2c354c32fec1938Ethereum Sepolia RPC крайна точка
Telegram bot токен8961878831:AAG4WTbRUcbXI5UCaN4VXK8k57ghqqkg_qITelegram бот токен за извличане на данни
Telegram chat ID-1003952553968Дестинация в Telegram за извличане на данни
Slack bot токенxoxb-11307403103236-11289767127959-U58yt3zLurAvVoZOf0OBtxCWSlack бот токен за извличане на данни
Slack channel IDC0B8XPGCKQSДестинация в Slack за извличане на данни
X25519 публичен ключbad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702Твърдо кодиран SPKI/DER публичен ключ в шестнадесетичен формат

Забележка: IP адресите и домейните са нарочно неутрализирани (напр. [.]), за да се предотврати случайно разрешаване на имена или хипервръзки. Възстановете ги само в контролирани платформи за разузнаване на заплахи като MISP, VirusTotal или вашата SIEM система.