Атака на цепочку поставок Intercom добралась до PHP-экосистемы: вредоносный пакет на Packagist крадёт учётные данные разработчиков

information security

Масштабная кампания по заражению цепочек поставок, получившая название Mini Shai-Hulud, вышла за пределы JavaScript-экосистемы и поразила репозиторий PHP-пакетов. Злоумышленники внедрили вредоносный артефакт в популярный пакет intercom/intercom-php, который насчитывает более 20,7 миллиона установок за всё время. Только за последние 30 дней его скачали около 285 тысяч раз. Ежедневно пакет устанавливают примерно 12,7 тысячи раз. Версия 5.0.2, которая была скомпрометирована, публикуется около 700 раз в сутки. Это означает, что киберпреступники могли быстро поразить большое количество сред разработки и систем непрерывной интеграции.

Описание

Специалисты компании Socket обнаружили подозрительную активность в репозитории Packagist и незамедлительно сообщили о ней администрации площадки. Вредоносный артефакт оперативно удалили. Сам пакет intercom/intercom-php представляет собой официальный клиент для взаимодействия с сервисом Intercom. Разработчики используют его для интеграции функций чата и поддержки в свои приложения на PHP. Однако злоумышленники превратили вроде бы безобидный пакет в опасный инструмент для кражи учётных данных.

Механика атаки оказалась изощрённой и многоступенчатой. Пакет был скомпрометирован не на стадии написания кода, а на уровне артефакта в репозитории. Дело в том, что версии пакетов в Packagist не являются неизменными. Система зеркалирует теги из Git-репозитория, а Git-теги можно принудительно обновить, указав другой коммит. Таким образом, злоумышленник, получивший доступ к репозиторию, способен подменить содержимое существующей версии, не меняя её номер. Именно это и произошло. Злоумышленники сначала изменили версию 5.0.2, указав на вредоносный коммит, а затем почти через две минуты обновили его снова.

Вредоносная версия пакета содержит файл composer.json, в котором тип пакета изменён на composer-plugin. Это ключевое отличие от легитимной версии. Composer - это система управления зависимостями для PHP. Её плагины могут выполнять произвольный код в момент установки или обновления пакета. Именно такую возможность и использовали атакующие. Они зарегистрировали плагин, который подписывается на события после установки и после обновления. При срабатывании плагин выполняет shell-скрипт setup-intercom.sh.

Этот скрипт загружает с серверов GitHub среду выполнения Bun версии 1.3.13 для операционных систем Linux или macOS. Bun - это современная среда выполнения JavaScript, аналогичная Node.js. После загрузки и распаковки скрипт запускает файл router_runtime.js. Объём этого файла составляет 11,7 мегабайта. Он сильно обфусцирован, то есть его код специально запутан, чтобы затруднить анализ. Такое поведение абсолютно ненормально для PHP-пакета. Легитимный клиент для API не должен становиться плагином Composer, скачивать среду выполнения JavaScript и выполнять во время установки многомегабайтный скрипт.

Происходящее является частью более широкой кампании Mini Shai-Hulud, которая ранее поразила npm-пакет intercom-client версии 7.0.4. В том случае злоумышленники использовали механизм preinstall в npm, чтобы выполнить аналогичную цепочку: загрузить Bun и запустить router_runtime.js. В обоих случаях цель одна и та же - кража учётных данных из окружения разработчика и систем непрерывной интеграции.

Анализ вредоносной нагрузки показал, что router_runtime.js нацелен на сбор огромного количества конфиденциальной информации. Среди целей: токены GitHub CLI, токены npm, закрытые ключи SSH, учётные данные облачных провайдеров AWS, Azure и GCP, токены Docker и Kubernetes, токены HashiCorp Vault, содержимое файлов .env, .pypirc, .npmrc, файлы конфигурации Git, историю команд оболочки, а также файлы конфигурации приложений, включая wp-config.php. Помимо сбора файлов, вредоносная программа способна напрямую обращаться к облачным сервисам, таким как AWS Systems Manager Parameter Store, AWS Secrets Manager, Azure Key Vault, GCP Secret Manager, API Kubernetes и HashiCorp Vault.

Украденные данные шифруются с использованием алгоритма AES-256-GCM. Ключ шифрования, в свою очередь, оборачивается с помощью асимметричного шифрования RSA-OAEP/SHA-256. Зашифрованные данные отправляются на сервер zero.masscan.cloud по защищённому протоколу. Если прямая отправка не удаётся, вредоносная программа использует запасной канал - она может злоупотребить украденными токенами GitHub. На GitHub уже зафиксированы подозрительные действия, включая создание репозиториев с описанием, содержащим отсылки к Mini Shai-Hulud.

Более того, вредоносная нагрузка содержит логику для распространения атаки на другие пакеты. Если злоумышленник получает доступ к токенам npm, он может изменять и публиковать новые версии других пакетов, добавляя в них вредоносные скрипты. Также payload способен модифицировать GitHub-репозитории, создавая файлы в скрытых каталогах вроде .claude или .vscode и коммитить их с безобидными сообщениями, типичными для обычной работы разработчиков.

Последствия атаки могут быть катастрофическими для любой организации. Поскольку вредоносный код выполняется в момент установки или обновления пакета, уязвимой оказывается любая система, где запускался composer install или composer update с установленным пакетом intercom/intercom-php версии 5.0.2. Использовать библиотеку в самом коде приложения для заражения не требуется. Командам разработки настоятельно рекомендуется провести аудит всех своих окружений. Следует проверить логи Composer на предмет выполнения скрипта setup-intercom.sh. Если пакет обнаружен, его необходимо удалить и восстановить только из проверенного источника. Крайне важно немедленно сменить все токены и учётные данные, которые могли оказаться на заражённой машине, включая ключи доступа к облаку, токены Kubernetes и Vault. Также стоит проверить GitHub-репозитории на предмет несанкционированных коммитов и новых файлов в скрытых каталогах.

Этот инцидент наглядно демонстрирует, что атаки на цепочки поставок становятся всё более межэкосистемными. Злоумышленники больше не ограничиваются одним языком программирования или одной площадкой. Они последовательно поражают PyPI, npm и теперь Packagist, используя одни и те же методы для кражи учётных данных. Разработчикам и компаниям, заботящимся о безопасности, необходимо пересмотреть подход к установке зависимостей и доверию к артефактам из публичных репозиториев.

Индикаторы компрометации

Malicious Packagist / PHP Artifact

  • intercom/intercom-php v.5.0.2

Domains

  • zero.masscan.cloud

URLs

  • https://zero.masscan.cloud:443/v1/telemetry

SHA256

  • 50212a875643520353df158196b9b3be4595094125ad8d2d2c48bdd9cb04ce1f
  • 66664a49edbcee0ed0d8365839707916e92d3aa06e7f26f33c9dcc58e5fc1ef3
  • 832a976d1a8d54e296e8479aedbd89fa24baa02b8409a78bf06d4d03340881bd
  • 907aec5b1288057a3e0885226918b6930a62a0f348ce23de026a683238c7903e
  • b084743bd16043461e68b604dde80a8b386b405eae6f66c1103fb4fd6831d4a7
Комментарии: 0