Атакуващи са компрометирали акаунта в GitHub на поддържащия разработчик на „keyv“ – популярна библиотека за съхранение на ключове и стойности, която генерира около 127 милиона изтегляния седмично в npm. Злонамерените субекти са използвали този достъп, за да разпространят зловреден код за кражба на идентификационни данни в цялото портфолио от пакети на разработчика.
Пробивът, който се случи на 4 август 2026 г., представлява един от най-големите инциденти по веригата за доставки в npm до момента, като злонамереният код се разпространи като червей към стотици несвързани пакети в рамките на часове. Изследването на инцидента беше споделено ексклузивно с Cybersecuritynews от Aikido.
Същият разработчик зад keyv притежава и няколко други интензивно използвани помощни програми за кеширане, включително cacheable (29 милиона изтегляния на месец), flat-cache (565 милиона изтегляния на месец), file-entry-cache (557 милиона изтегляния на месец), cache-manager, cacheable-request и пакетите от обхвата @cacheable. Всички те са засегнати от компрометирането.
Тъй като атакуващият е качил злонамерени файлове директно в основния клон (main branch) на всяко хранилище и веднага след това е пуснал нова версия, компрометираните версии са публикувани в npm с валидни signatures за произход, генерирани от GitHub Actions. Това ги кара да изглеждат напълно легитимни за всеки, който одитира целостта на веригата за доставки.
Всеки засегнат пакет е получил два нови файла – setup.mjs и Math_Symbol.js, заедно с кука „preinstall“, безшумно добавена към package.json, която автоматично изпълнява setup.mjs по време на инсталиране с npm.
След като бъде задействан, setup.mjs функционира като силно обфускиран програмен модул за изтегляне (dropper), който тихо сваля средата за изпълнение Bun JavaScript от URL адрес на версия в GitHub и я използва за стартиране на същинския зловреден код, Math_Symbol.js, без никаква видима индикация за разработчика, изпълняващ инсталацията.
Този саморазпространяващ се дизайн е позволител на зловредния софтуер, считан за част от кампанията „Shai-Hulud“, да премине отвъд оригиналните пакети на разработчика и да инфектира кода на големи организации, включително версии, свързани с Deliveroo, Qlik, Picsart и други.
Според информация към 13:20 ч. CEST на 4 август е потвърдено компрометирането на най-малко 868 пакета, обхващащи 1381 версии, като броят им продължава да расте, докато изследователите проследяват текущото разпространение в регистъра, посочват от Aikido.
Файлът Math_Symbol.js е изграден около набор от целеви модули за извличане на идентификационни данни, всеки от които е насочен към конкретно хранилище за тайни, обикновено намиращо се на машините на разработчиците и средите за непрекъсната интеграция (CI runners).
Той събира токени за автентификация в npm регистъра от .npmrc файлове, токени за GitHub CLI (включително класически персонални токени за достъп, сесийни токени и OIDC токени) от локалната конфигурация на GitHub CLI, както и AWS ключове за достъп и сесийни токени директно от файла ~/.aws/credentials.
Зловредният софтуер също така се опитва да прихване клиентски токени за HashiCorp Vault чрез четене на променливата на средата VAULT_TOKEN, с резервен механизъм, който се опитва да извлече токен чрез HTTP, ако променливата на средата липсва.
Тъй като това са точните идентификационни данни, използвани за публикуване на нови пакети и достъп до облачна инфраструктура, една успешна кражба може да доведе до верижно превземане на акаунти и допълнителни злонамерени версии, което изглежда е точният начин, по който червеят е продължил да се разпространява в npm екосистемата.
Екипите, които разчитат на keyv, cacheable, flat-cache, file-entry-cache или свързани пакети за кеширане, трябва незабавно да одитират своите lock файлове за засегнатите версии, да подменят npm токените, идентификационните данни за GitHub CLI, AWS ключовете и Vault токените на всяка машина, на която е извършвана инсталация по време на прозореца на излагане, и да избягват нови инсталации на засегнатите дървета на зависимостите, докато не бъдат потвърдени версиите с инсталирани корекции за сигурност.
Предвид мащаба и скоростта на това компрометиране, екипите по сигурността трябва да третират всяко скорошно стартиране на CI конвейер, докосващ тези пакети, като потенциално компрометирано.