Текуща кампания със зловреден софтуер в npm, включваща пакета „indexed-btree“, показва как киберпрестъпниците заобикалят защитите във веригата за доставки, като скриват зловреден код в нормалното поведение на пакета по време на изпълнение (runtime), вместо в инсталационните скриптове.

Пакетът, забелязан от изследователи на Checkmarx, се опитва да се представи за легитимната библиотека „sorted-btree“ и вече е натрупал 2 милиона седмични изтегляния.

Кампанията може също така да е генерирала значителни печалби за атакуващите, които според Checkmarx използват портфейл, съдържащ 109 ETH. В доклада обаче не се посочва, че тези средства са придобити от кражба на криптовалута.

Заобикаляне на най-новите мерки за сигурност

През юни 2026 г. GitHub обяви набор от мерки за сигурност в npm, предназначени да помогнат за предотвратяване на атаки по веригата за доставки, които многократно разтърсиха екосистемите с отворен код от края на 2025 г. насам.

Една от ключовите мерки за сигурност е блокирането на скриптове от жизнения цикъл на зависимостите като „preinstall“, „install“ и „postinstall“, освен ако не са изрично одобрени.

Други мерки не позволяват на npm автоматично да извлича зависимости от Git хранилища или отдалечени URL адреси без разрешение.

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

В резултат на това инсталацията изглежда напълно чиста и не задейства нито един от механизмите за одобрение в npm v12.

„Зареждачът на зловредния софтуер се крие в собствения метод BTree.prototype.set на библиотеката, който е основната функция, която всеки потребител би извиквал постоянно“, обясняват от Checkmarx.

„Това задейства sharedLoad.min.js, който съдържа обфускирания първи етап на зловредния софтуер. Това е добре изграден начин за промъкване покрай стандартните инструменти за анализ на замърсяването (taint-analysis) и повечето статични скенери.“

Зловредният тригер по време на изпълнение
Зловредният тригер по време на изпълнениеИзточник: Checkmarx

След като зловредният софтуер бъде изпълнен, той може да събира системни данни, включително архитектура, име на хоста (hostname), процесор, памет и време на непрекъсната работа (uptime), и да извлича информацията през твърдо кодирани канали в Slack и Telegram.

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

Когато операторите решат да прекратят атаката, зловредният софтуер може да изтрие своите файлове и да премахне зловредния тригер от кода на пакета, за да заличи следите си.

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

История на комитите
Фалшифицирана история на комититеИзточник: Checkmarx

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

  1. ordered-kv-index (448,184 изтегляния)
  2. btree-leaderboard (493,685 изтегляния)
  3. priority-slot-queue (402,860 изтегляния)
  4. btree-range-store (468,092 изтегляния)
  5. btree-core (1,951,274 изтегляния)
  6. btree-time-index (425,312 изтегляния)
  7. btree-lru-cache (372,185 изтегляния)
  8. neighbor-key-map (366,019 изтегляния)
  9. sliding-score-window (448,024 изтегляния)

Разработчиците се съветват да не разчитат само на сканиране по време на инсталация, а също така да използват поведенчески анализ по време на изпълнение.

Тези, които са инсталирали indexed-btree или някой от изброените по-горе пакети, трябва да сменят всички тайни и ключове за достъп (secrets) и да възстановят своята среда за разработка от надеждно резервно копие.