
Введение
Современный мир разработки целиком и полностью зависит от сторонних модулей. Безусловно, это ускоряет разработку, но, так как эти модули могут создаваться любым желающим, это создает обширную поверхность атаки для конечных пользователей. Неудивительно, что возникают модули с вредоносной функциональностью. Компрометация одного аккаунта мейнтейнера популярных модулей или одной популярной зависимости быстро превращается в атаку на цепочку поставок. Подобные случаи компрометации стали частым явлением и «трендовым» направлением у злоумышленников. За последний месяц произошло два крупных инцидента, подтверждающих интерес злоумышленников к созданию вредоносных модулей, зависимостей и отдельных пакетов. Мы уже рассказывали о недавней компрометации популярных npm-пакетов, а 16 сентября 2025 года стало известно о новой волне заражения npm-пакетов при помощи самораспространяющегося зловреда Shai-Hulud.
Shai-Hulud нацелен на кражу конфиденциальных данных, раскрытие приватных репозиториев организаций и учетных данных жертвы для заражения других пакетов и дальнейшего распространения. Вследствие инцидента было заражено свыше 500 пакетов, в число которых попал пакет с более чем двумя миллионами загрузок в неделю. В результате разработчики, внедрившие в свои проекты вредоносные пакеты, рискуют потерять конфиденциальные данные, а их собственные библиотеки могут быть инфицированы Shai-Hulud. Этот самораспространяющийся зловред активно захватывает учетные записи и секреты для создания новых зараженных модулей, распространяя угрозу по цепочке зависимостей.
Технические детали
Вредоносный код червя запускается при установке зараженного пакета и публикует зараженные релизы во все пакеты, на которые у жертвы есть право обновления.
После установки зараженного пакета из реестра npm в системе жертвы запускается особая команда, которая выполняется автоматически. Она запускает вредоносный скрипт размером более 3 МБ под названием bundle.js
, в котором содержится несколько легитимных рабочих модулей с открытым исходным кодом.
Среди ключевых модулей в bundle.js
можно отметить следующие.
- Библиотека для работы с облачными сервисами AWS.
- Модуль GCP, который позволяет получать метаданные из среды Google Cloud Platform.
- Функции для работы с TruffleHog. Это инструмент для сканирования различных источников данных, позволяющий находить конфиденциальную информацию (в частности, секреты).
- Инструмент для работы с GitHub API.
Также в JavaScript-файле содержатся сетевые утилиты для передачи данных и основной модуль работы Shai-Hulud.
Вредоносная активность червя начинается со сбора информации об операционной системе жертвы и проверки на наличие npm-токена и токена аутентифицированного пользователя GitHub в среде окружения. Если действительный GitHub-токен не установлен, bundle.js
завершит работу. Отличительная черта Shai-Hulud заключается в том, что большая часть его функциональности нацелена на работу в системах Linux и macOS: практически все вредоносные действия выполняются исключительно в этих системах, за исключением поиска секретов при помощи инструмента TruffleHog.
Эксфильтрация секретов
После прохождения проверок зловред получает информацию о текущем пользователе GitHub через вышеуказанный токен и запускает функцию extraction
. Она создает временный исполняемый bash-скрипт по пути /tmp/processor.sh
, а затем запускает его как отдельный процесс, передавая токен в качестве аргумента. Далее представлена функция extraction
, в которой мы видоизменили строки и переименовали переменные для удобства чтения: исходный код был отформатирован в нечитаемом виде.