Атака на цепочку поставок затронула сотни GitHub-репозиториев
Исследователи сообщили о скоординированной цепочка поставок-атаке, которая затронула более 700 GitHub-репозиториев, включая PHP-пакеты на Packagist и проекты на Node.js. Ключевая особенность инцидента — встроенный в проекты вредоносный postinstall-hook, который автоматически запускался в процессе установки и позволял злоумышленникам выполнять удалённый код.
Как была устроена атака
По данным отчёта, под удар попали восемь Composer-пакетов. Злоумышленники модифицировали их исходные репозитории, внедрив вредоносный script, который пытался загрузить и выполнить binary-файл с URL GitHub Releases. Загружаемый объект сохранялся в скрытый файл по пути /tmp/.sshd.
Примечательно, что вредоносный script добавлялся не в ожидаемый composer.json, а в package.json. Такой перенос в другую ecosystem имеет практическое значение: многие security-команды в первую очередь анализируют метаданные Composer и могут не проверять JavaScript lifecycle hooks, что создаёт окно для сокрытия malicious behavior.
Что делал вредоносный script
Скрипт использовал команду curl -k для загрузки файла под именем gvfsd-network. Ключ -k отключает проверку TLS certificate, фактически ослабляя защиту, которую обычно обеспечивает HTTPS.
После загрузки файл:
- помечался как executable;
- запускался в background;
- выполнялся без проверки integrity;
- получался из remote source без подтверждения подлинности.
Вторая стадия malware не была извлечена, поскольку её исходный адрес оказался недоступен. Тем не менее поведение первой стадии уже достаточно серьёзно, чтобы рассматривать пакеты как malicious.
Почему это опасно для CI/CD
Анализ GitHub repositories выявил вредоносные commits, содержащие тот же postinstall-script. В некоторых случаях он был встроен и в CI/CD pipelines через GitHub Actions. Это означает, что атака могла выйти за пределы обычной установки пакета и затронуть automated deployment pipelines.
Компрометация repos напрямую связана с изменениями в цепочке поставок: вредоносный code успевал попасть в Packagist именно в момент публикации новых версий затронутых пакетов. В результате пользователи, скачивавшие обновления, могли получить уже заражённый release.
Какие пакеты оказались под риском
Среди затронутых проектов особенно выделяется devdojo/wave — популярный starter kit для SaaS на Laravel. Для таких проектов риск особенно высок, потому что они широко используются и часто запускают installation process автоматически при создании нового проекта.
- Starter kits, если они скомпрометированы, могут запускать вредоносный script сразу при инициализации проекта.
- Библиотеки-зависимости, которые не запускают postinstall в аналогичном сценарии, несут меньший непосредственный риск.
При этом отчёт подчёркивает: даже если часть сопровождающих в итоге откатила вредоносные изменения, сам факт успешного внедрения показывает, насколько легко опасный code может быть скрыт во вспомогательных файлах и остаться незамеченным.
Вывод
Инцидент демонстрирует, что защита только на уровне основного package manager недостаточна. Необходимо тщательно проверять все файлы в репозитории, включая вспомогательные scripts, package.json, CI/CD-конфигурации и любые hooks жизненного цикла.
Как отмечают исследователи, именно такие малозаметные элементы цепочки поставок становятся удобной точкой входа для злоумышленников — особенно когда вредоносный code маскируется под обычную инфраструктурную логику и запускается автоматически.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.


