Зловреден софтуер със способност за саморазпространение, наречен „ChainDrop“, компрометира над 1300 пакета с общо 2 милиарда месечни изтегляния в регистъра на Node Package Manager (npm).
Заразените пакети включват много популярни библиотеки като Keyv, Cacheable, flat-cache и file-entry-cache – всички те са помощни инструменти за кеширане от един и същ разработчик.
Атаката по веригата за доставки започва, след като атакуващият компрометира профила в GitHub на разработчика на Keyv, и бързо се разпространява към пакети, свързани с големи организации като Deliveroo, Ornikar, OneReach, Picsart, Qlik и ServiceTitan.
Множество компании за сигурност на приложения засекоха атаката и откриха, че тя разпространява червея ChainDrop, базиран на Shai-Hulud.
Доклад на Aikido посочва, че „поне 868 пакета (в общо 1381 версии) са компрометирани от червея“.
Изследователите твърдят, че злонамереният субект е изпратил зловредни файлове директно в главните клонове (main branches) на проектите и след това е генерирал нови версии на пакетите.
Тъй като пакетите са били компилирани и публикувани чрез техните легитимни работни процеси в GitHub Actions, компрометираните npm версии съдържат валидна информация за произхода (provenance).
Заразените пакети съдържат два файла: setup.mjs (който служи за инсталиране на зловредния код) и Math_Symbol.js (скрипт за кражба на чувствителна информация), както и запис "preinstall": "node setup.mjs" в своя конфигурационен файл package.json.
„Всеки, който е изпълнил npm install срещу засегната версия, би активирал setup.mjs автоматично преди завършването на инсталацията си“, предупреждават изследователите от Aikido.
Инсталаторът setup.mjs изтегля Bun JavaScript средата за изпълнение от официалния профил в GitHub, за да изпълни Math_Symbol.js – зловредния код с възможности за кражба на данни (infostealer).
След като изтегли Bun, за да стартира скрипта за кражба на данни, setup.mjs изтрива временната директория на средата за изпълнение.
От Aikido отбелязват, че софтуерът за кражба на данни събира идентификационни данни за разработчици и облачни среди от компрометираната среда и ги криптира, преди да ги изпрати към публично хранилище в GitHub с описание „Shai-Hulud: Here We Go Again“.
Злонамереният JavaScript код е силно обфускиран и включва функции за саморазпространение, които му позволяват да заразява пакети на други разработчици, използващи вече компрометиран пакет.
Докато Aikido установява, че изпълнимият файл на Bun стартира скрипта Math_Symbol.js, BleepingComputer наблюдава и компрометирани npm пакети, съдържащи скрипта math_init.js.
Всеки токен първо се валидира в реално време чрез заявка към registry.npmjs[.]org/-/whoami преди да бъде откраднат.
Зловредният софтуер търси в заразените системи за разработка и среди за непрекъсната интеграция (CI/CD) идентификационни данни, които биха могли да му предоставят достъп до допълнителни хранилища с изходен код и npm пакети. Той събира следните видове данни:
- Цялата среда на процеса (process environment).
- Локални конфигурационни файлове и файлове с идентификационни данни.
- GitHub PAT токени, токени за работни процеси и други ghp_, gho_ и ghs_ токени.
- npm токени, започващи с npm_.
- Тайни от GitHub Actions (secrets), включително код, проектиран да извлича стойности с "isSecret":true от собствено хоствани среди за изпълнение (self-hosted runners).
- Идентификационни данни за AWS, стойности от SSM Parameter Store с използване на WithDecryption: true и тайни от Secrets Manager.
- Kubernetes тайни от достъпни пространства от имена (namespaces).
- HashiCorp Vault токени и KV тайни.
- Данни за достъп до бази данни, частни ключове, както и идентификационни данни за Stripe, Slack, Twilio, Azure и GCP.
Според компанията за облачна сигурност Wiz, домейнът „npm-cache[.]com“ също се използва за източване на данни и трябва да се третира като сериозен индикатор за компрометиране (IoC).
Ако е била инсталирана засегната версия на пакет, системните администратори трябва да считат работната станция на разработчика или CI/CD средата за компрометирани, дори ако пакетът е бил премахнат впоследствие.
В такива случаи се препоръчва системите да се изградят наново от надеждни резервни копия или от нулата, да се подменят всички токени, които са били достъпни от засегнатата среда, и да се прегледат регистрационните файлове (logs) за неоторизиран достъп, а хранилищата – за неочаквани промени или кодове.
Тъй като атаката все още се развива, се очаква броят на пакетите и точните зловредни версии да нарасне. Поради това е важно да продължи използването на списъци с разрешени зависимости (allowlisting), проверки за интегритет и контрол на произхода.