Кампанията ChainDrop превърна компрометирането на npm пакети в предупреждение за сигурността на разработческите машини.

Саморазпространяващата се кампания зарази 444 пакета и доведе до над 1300 злонамерени версии, след като атакуващите поеха контрол над акаунта в GitHub, свързан с библиотеката за кеширане Keyv.

Засегнатите пакети представляват над два милиарда изтегляния месечно. Операцията се разпространи чрез откраднати токени за публикуване в npm и легитимни канали за разпространение.

Тя надхвърли простото инсталиране на пакети: киберпрестъпниците добавиха конфигурация в хранилището, която може да се изпълни, когато разработчик отвори проект във VS Code или стартира сесия на Claude Code. Следователно едно клониране на хранилището чрез git и отваряне на проекта може да доведе до заразяване.

Аби Кърнс споделя в доклад, предоставен на Cyber Security News (CSN), че разликата е в решението на атакуващия да заобиколи стъпката по инсталиране, която се следи от инструментите за контрол на веригата за доставки.

Microsoft нарича кампанията ChainDrop, докато други изследователи я проследяват като Mini Shai-Hulud, следвайки модели, наблюдавани в скорошна подобна кампания.

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

Атаката започна на 4 август с компрометирането на акаунта в GitHub, стоящ зад Keyv и пакети, включително cacheable, flat-cache и file-entry-cache.

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

Проектите, които проследяват най-новите основни версии, бяха изложени на особен риск, докато по-старите фиксирани версии бяха защитени.

Изданията изглеждаха надеждни, тъй като носеха валидни атестации за произход (provenance attestations).

Те бяха публикувани чрез работен поток на GitHub Actions, конфигуриран като надежден издател в npm (npm trusted publisher), така че записите показваха, че одобрена идентичност е извършила издаването.

Проблемът беше нагоре по веригата: злонамерен изходен код е влязъл в хранилището, преди да се изпълни работният поток – урок, напомнящ за слабостта в работните потоци на GitHub Actions, докладвана по-рано тази година.

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

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

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

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

Файловете в хранилищата се превръщат в път за изпълнение

ChainDrop също така постави два конфигурационни файла в достъпни хранилища в до 50 клона. Единият предоставя кука (hook) за стартиране на сесия в Claude Code (Claude Code SessionStart hook), а другият дефинира задача във VS Code (VS Code task), която да се стартира при отваряне на папка.

Всеки от тях може да стартира инструмент за спускане на злонамерен код (dropper) от директорията на другия инструмент, позволявайки изпълнение без npm инсталация или компилация.

Този подход остава извън полезрението на много скенери за зависимости. Тези продукти обикновено изследват манифести и заключващи файлове (lockfiles), за да идентифицират изтеглените пакети, а не настройки на проекта, описващи задачи на редактора или поведението на AI инструменти за кодиране.

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

Проверките за доверие на работното пространство във VS Code (Workspace Trust) и в Claude Code могат да спрат автоматичната активност в ненадежден проект. Но опасността нараства, след като разработчикът вече е маркирал познат проект като надежден.

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

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

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

ChainDrop показва, че само по себе си безопасното дърво на зависимостите вече не гарантира безопасно работно пространство за разработчиците.