Операция "Mini Shai Hulud": новая атака группы TeamPCP на SAP-экосистему через npm-пакеты

information security

Масштабная атака на цепочку поставок, получившая название "Mini Shai Hulud", поразила экосистему SAP. Злоумышленники из группы TeamPCP скомпрометировали легитимные пакеты npm, связанные с платформой SAP Cloud Application Programming Model. Речь идёт о таких популярных библиотеках, как "@cap-js/sqlite" и "@cap-js/postgres". Вредоносные версии этих пакетов содержат скрипты, которые запускаются автоматически при установке зависимостей. Цель кампании - кража секретов разработчиков и данных из конвейеров непрерывной интеграции и развертывания.

Описание

Инцидент затронул как среды разработки, так и автоматизированные системы сборки. Вредоносная полезная нагрузка нацелена на сбор токенов доступа к GitHub, учётных данных npm, секретов облачных провайдеров (Amazon Web Services, Microsoft Azure, Google Cloud Platform), а также токенов Kubernetes и GitHub Actions. Эксперты компании Wiz, специализирующейся на безопасности облачных сред, обнаружили эту активность в ходе мониторинга угроз для цепочек поставок.

Механизм атаки выглядит следующим образом. Злоумышленники создали модифицированные версии оригинальных пакетов SAP. В них добавлен сценарий "preinstall", который выполняется ещё до завершения установки пакета. Этот сценарий запускает файл "setup.mjs". Данный файл загружает среду выполнения Bun - современную альтернативу Node.js - и затем исполняет обфусцированную полезную нагрузку из файла "execution.js". Код выполняется до того, как разработчик или система успевает заметить неладное.

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

Важно отметить, что эксфильтрация через GitHub теперь является основным и единственным способом передачи украденного. В предыдущих операциях группы TeamPCP, таких как компрометация Bitwarden, репозитории выступали лишь запасным каналом, если связь с командным сервером (C&C) не удавалась. Номерная схема имён репозиториев - слово-слово-число - и описание "Checkmarx Configuration Storage" остались прежними.

Если похититель не находит токенов доступа GitHub в формате "ghp_" или "gho_", но обнаруживает токены для установки ("ghs_") и переменную "GITHUB_REPOSITORY", он переключается на стратегию отравления репозитория. В репозиторий добавляются вредоносные конфигурационные файлы. Один из них настраивает выполнение вредоносного кода при открытии проекта в среде разработки Claude Code от компании Anthropic. Другой файл конфигурирует среду Visual Studio Code (VS Code) так, чтобы при открытии папки с проектом автоматически запускался загрузчик "setup.mjs". Таким образом, любой разработчик, открывающий скомпрометированный репозиторий, рискует заразить свою машину.

Новшеством данной операции стала возможность кражи паролей из браузеров. Вредоносный код нацелен на Chrome, Safari, Edge, Brave и Chromium. В предыдущих атаках TeamPCP такой функциональности не было.

Примечательной особенностью является система защиты от заражения русскоязычных систем. Во время инициализации вредоносная программа проверяет языковые настройки системы и переменные среды. Если какое-либо из значений начинается с символов "ru", выполнение немедленно прекращается. Никакие данные в таком случае не собираются и не передаются. Аналогичный механизм применялся в операциях против Checkmarx и Bitwarden.

Атрибуция данной атаки группе TeamPCP базируется на нескольких факторах. Главный из них - общий открытый ключ RSA, использованный для шифрования украденных данных. Это означает, что тот же самый ключ применялся в предыдущих кампаниях. Только владелец соответствующего закрытого ключа, то есть TeamPCP, может расшифровать данные. Кроме того, код использует тот же самый механизм внедрения через npm-хук "preinstall", который был замечен при компрометации интерфейса командной строки Bitwarden.

Хотя операция "Mini Shai Hulud" содержит отсылки к более ранним кампаниям группы, известным как "Shai Hulud" и "Shai Hulud 2.0" (осень 2025 года), однозначно связать их или утверждать, что это разные действующие лица, пока невозможно.

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

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

Npm packages

  • @cap-js/sqlite - v2.2.2
  • @cap-js/postgres - v2.2.2
  • @cap-js/db-service - v2.10.1
  • mbt - v1.2.48

MD5

  • 04d8a99447b16f6839fff3b978f88d7e
  • 35baf8316645372eea40b91d48acb067
  • 45dc9c02f82b4370ca92785282d43a86
  • 6fb87d243b011b5445f379f80e1a6b4d
  • 8cd683f78735c9bfc32600c73d3d9abe
  • b523a69b27064d1715d1f0aaffcfae63
  • d468f16eafccbc54a994f3d675ace8ae
  • e32eaf0c3cde9616831a1e92d42b0058

SHA1

  • 0af7415d65753f6aede8c9c0f39be478666b9c12
  • 307d0fa7407d40e67d14e9d5a4c61ac5b4f20431
  • 4b04304f6d51392e3f43856c94ca95800518a694
  • 6bc859aaee1f8885eec2a3016226e877e5adba08
  • 7b6a28e92149637e5d7c7f4a2d3e54acd507c929
  • bc95cc5dda788295aa0c9456791520599ef99526
  • ca4a5bb85778ffcd2153ace88fe2d882c8ceeb23
  • e80824a19f48d778a746571bb15279b5679fd61c

SHA256

  • 1d9e4ece8e13c8eaf94cb858470d1bd8f81bb58f62583552303774fa1579edee
  • 258257560fe2f1c2cc3924eae40718c829085b52ae3436b4e46d2565f6996271
  • 4066781fa830224c8bbcc3aa005a396657f9c8f9016f9a64ad44a9d7f5f45e34
  • 6f933d00b7d05678eb43c90963a80b8947c4ae6830182f89df31da9f568fea95
  • 80a3d2877813968ef847ae73b5eeeb70b9435254e74d7f07d8cf4057f0a710ac
  • 86282ebcd3bebf50f087f2c6b00c62caa667cdcb53558033d85acd39e3d88b41
  • a1da198bb4e883d077a0e13351bf2c3acdea10497152292e873d79d4f7420211
  • eb6eb4154b03ec73218727dc643d26f4e14dfda2438112926bb5daf37ae8bcdb
Комментарии: 0