Атака shai-hulud скомпрометировала 600 Npm-пакетов через уязвимости в зависимостях

В результате масштабной атаки с использованием модифицированного компьютерного червя под названием Shai-Hulud злоумышленникам удалось скомпрометировать более 600 пакетов в популярном JavaScript-репозитории NPM. Инцидент стал уже второй подобной атакой, в которой используется самораспространяющийся вредоносный код, внедряемый в зависимости сторонних проектов.

Суть атаки заключалась в том, что злоумышленники через фишинг получили доступ к учётной записи одного из сопровождающих широко используемого NPM-пакета. Этот пакет применялся в качестве зависимости во множестве других библиотек и приложений. Получив контроль над учётной записью, атакующие выпустили новую версию пакета с внедрённым вредоносным скриптом. При установке такой версии червь активировался автоматически, начиная процесс заражения других пакетов и распространения вредоносного кода.

Основной механизм заражения был реализован через скрипт "setup_bun.js", добавленный в раздел "preinstall" файла package.json. Этот скрипт, в свою очередь, запускал обфусцированный файл "bun_environment.js", в котором находился основной вредоносный функционал. После активации червь производил сканирование системы с целью поиска учётных данных, используя инструмент TruffleHog. Обнаружив токены доступа к NPM, GitHub, а также ключи для облачных платформ AWS, Azure и Google Cloud, программа начинала дальнейшее распространение, заражая цепочку зависимостей проектов в той же среде разработки.

Характерной особенностью атаки стало то, что червь не просто собирал данные — он автоматически создавал новые вредоносные релизы NPM-пакетов, к которым имел доступ, таким образом значительно ускоряя распространение. В качестве места для хранения собранной информации использовались репозитории на GitHub с хаотичными именами, в описания которых добавлялась фраза "Sha1-Hulud: The Second Coming". Внутри таких репозиториев размещались JSON-файлы, содержащие данные о системе, переменные окружения и другие чувствительные сведения, зашифрованные с помощью base64.

Для ещё большей скрытности и автоматизации процесса червь создавал специальные GitHub Actions, маскируя их под легитимные задачи CI/CD. Эти workflow-файлы позволяли передавать данные за пределы локального окружения, не вызывая подозрений у разработчиков.

Среди наиболее пострадавших пакетов оказались такие библиотеки, как @zapier/zapier-sdk (2,8 млн скачиваний в неделю), @posthog/core и posthog-node (суммарно более 4 млн загрузок), @asyncapi/specs (1,4 млн) и @postman/tunnel-agent (1,2 млн). Предполагается, что начальной точкой атаки стал пакет @asyncapi/specs, чей сопровождающий, вероятно, стал жертвой фишинга.

В отличие от предыдущей атаки, зафиксированной в сентябре, в этой кампании злоумышленники использовали иной способ внедрения вредоносного кода — под видом поддержки JavaScript-платформы Bun. Таким образом, вредоносный скрипт маскировался под настройку среды выполнения, что усложняло его обнаружение.

Атака Shai-Hulud демонстрирует, насколько уязвимыми остаются цепочки поставок ПО, особенно в экосистемах, где пакеты активно переиспользуются и распространяются через централизованные репозитории. Один скомпрометированный компонент может привести к лавинообразному заражению огромного количества проектов.

Эта ситуация подчёркивает важность многоуровневой защиты в процессе разработки. Использование двухфакторной аутентификации (2FA), мониторинг активности учётных записей и регулярные проверки зависимостей на наличие вредоносных изменений должны стать стандартами безопасности в любой современной разработке.

Кроме того, разработчикам рекомендуется ограничивать права доступа к чувствительным ресурсам и использовать изолированные окружения для сборки и публикации пакетов. Это может существенно затруднить действия злоумышленников, даже в случае компрометации одной из учётных записей.

В свете этой атаки стоит также пересмотреть процесс автоматической установки зависимостей. Скрипты, запускаемые на этапе "preinstall", могут содержать произвольный код, и потому должны вызывать у разработчиков повышенное внимание. Простой npm install может привести к запуску кода, о наличии которого никто не подозревает.

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

Важно отметить, что атака Shai-Hulud — это лишь один из примеров того, как уязвимости в управлении зависимостями могут быть использованы для масштабного вторжения. За последние годы количество подобных инцидентов увеличивается, что указывает на необходимость более жёстких мер контроля и безопасности на всех этапах жизненного цикла программного обеспечения.

В условиях, когда open-source всё чаще становится основой критически важных систем, доверие к поставщикам и платформам распространения кода должно сочетаться с техническими механизмами проверки. Только так можно обеспечить надёжность и устойчивость программных решений перед лицом всё более изощрённых атак.

Прокрутить вверх