Масштабная атака на цепочку поставок npm привела к компрометации более 1300 пакетов посредством самораспространяющейся вредоносной ПО под названием ChainDrop. При этом все пострадавшие пакеты в совокупности ежемесячно загружаются более 2 млрд. раз.
Среди зараженных пакетов есть и достаточно популярные, такие как Keyv и Cacheable, flat-cache и file-entry-cache, все они являются утилитами кэширования от одного и того же разработчика.
Атака на цепочку поставок началась после того, как злоумышленник взломал учетную запись GitHub разработчика Keyv, и быстро распространилась на пакеты, связанные с крупными организациями, включая Deliveroo, Ornikar, OneReach, Picsart, Qlik и ServiceTitan.
Ряд инфосек-компаний успели задетектить атаку и выяснить, что она была реализована с использованием червя на основе алгоритма Shai-Hulud под названием ChainDrop.
Согласно отчету Aikido, по меньшей мере 868 пакетов (1381 версии) были скомпрометированы этим червем. Исследователи утверждают, что злоумышленник распространял вредоносные файлы непосредственно в основные ветки проектов, а затем создавал новые релизы пакетов.
В виду того, что пакеты были собраны и опубликованы в рамках легитимных рабочих процессов GitHub Actions, скомпрометированные релизы npm содержали достоверную информацию о происхождении.
Заражённые пакеты включают два файла: setup.mjs (программу для загрузки вредоносного ПО) и Math_Symbol.js (скрипт для кражи конфиденциальной информации), а также preinstall: node setup.mj запись в их package.json конфигурационном файле.
Загрузчик setup.mjs скачивает среду выполнения JavaScript Bun из официального релиза на GitHub для выполнения Math_Symbol.js, вредоносной полезной нагрузки с возможностью кражи информации.
После загрузки исполняемого файла Bun для запуска скрипта infostealer setup.mjs удаляется временный каталог среды выполнения.
В Aikido отмечают, что злоумышленник собирает учетные данные разработчиков и облачных сервисов из скомпрометированной среды, шифрует их, а затем отправляет в общедоступный репозиторий GitHub с описанием Shai-Hulud: Here We Go Again.
Вредоносный JavaScript-код сильно обфусцирован и обладает способностью к самораспространению, что позволяет ему заражать пакеты от других разработчиков, которые использовали ранее скомпрометированный пакет.
Перед кражей каждый токен сначала проверяется в режиме реального времени по адресу registry.npmjs[.]org/-/whoami.
Вредоносная ПО ищет в зараженных системах разработки и системах CI/CD учетные данные, которые могли бы предоставить ей доступ к дополнительным репозиториям исходного кода и пакетам npm, и собирает различные типы других данных, в том числе учетные данные и файлы конфигурации, PAT-теги GitHub, токены, npm-токены, секреты GitHub Actions, Kubernetes, Stripe, Slack, Twilio, Azure и GCP, а также др.
По данным Wiz, домен npm-cache[.]com также используется для утечки данных и должен рассматриваться как серьезный признак компрометации.
Если была установлена версия пакета, на которую распространяется уязвимость, системные администраторы должны рассматривать рабочую станцию разработчика или средство запуска CI/CD как скомпрометированные, даже если пакет впоследствии был удален.
В подобных случаях рекомендуется восстанавливать системы из безопасных резервных копий или с нуля, обновлять все токены, к которым был доступ из затронутой среды, и проверять журналы на наличие несанкционированного доступа, а также репозитории на предмет неожиданных изменений или коммитов.
Поскольку атака все еще продолжается, ожидается рост числа пакетов и точных вредоносных версий, поэтому важно продолжать использовать список разрешенных зависимостей, проверки целостности и контроль происхождения.
Список скомпрометированных npm-пакетов, IOCs и артефактов доступен в отчетах Wiz, StepSecurity, Aikido, Socket и Ox Security.