Новый вредонос Trinitite атакует популярный npm-пакет после ареста TeamPCP

Атака на цепочку поставок NPM

Через день после сообщений об аресте участников группировки TeamPCP в Австралии в популярном npm-пакете обнаружен новый вредонос. Пакет @7nohe/openapi-react-query-codegen, предназначенный для генерации кода и используемый разработчиками, за неделю скачивается более 150 тысяч раз. Всего за двадцать минут в реестр было загружено десять вредоносных версий этого инструмента.

Описание

Вредоносная программа называет себя Trinitite: Sponsored by Preview 2 Effects. Trinitite - это стекловидный материал, остающийся на месте ядерного взрыва. Авторы явно питают пристрастие к театральности, как и участники TeamPCP. Пока неясно, имеем ли мы дело с подражателями, бывшим участником арестованной группировки или совершенно независимым злоумышленником.

Как показал анализ, атакующие скомпрометировали не только пакет, но и связанный с ним GitHub-репозиторий. Доступ был получен через эксплуатацию уязвимости в одном из автоматизированных процессов сборки проекта. Из-за этого все выпущенные вредоносные версии имеют действительные сертификаты подлинности (provenance attestations) - криптографические доказательства того, что сборка выполнена официальным процессом. Однако когда сам процесс скомпрометирован, такие сертификаты перестают быть надёжным признаком безопасности.

Вместо привычного для npm сценария "выполнить команду до установки" вредонос использует служебный файл, предназначенный для компиляции нативных модулей Node.js. При установке пакета этот файл обрабатывается с помощью Python, и атакующие встроили в него вредоносный код, который выполняется ещё до завершения установки. При этом в описании пакета не было объявлено никаких сомнительных скриптов. Это довольно редкий приём, хотя похожая техника уже описана ранее в этом году.

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

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

Список похищаемых данных чрезвычайно широк. Вредонос охотится за токенами GitHub, npm, PyPI и RubyGems, за учётными данными облачных платформ AWS, Azure и Google Cloud, за секретами HashiCorp Vault и Kubernetes. Кроме того, он сканирует файловую систему на предмет SSH-ключей, файлов окружения, историй команд, конфигураций VPN, данных криптовалютных кошельков и даже сессий популярных мессенджеров. Отдельное внимание уделено файлам ИИ-сервиса Claude и конфигурациям ряда сред разработки.

Для вывода украденных данных вредонос использует довольно необычную схему. Он ищет в публичной истории коммитов GitHub специальные сообщения, содержащие зашифрованный токен. С его помощью злоумышленник создаёт репозиторий, в который загружает файлы с украденными данными. Имена таких репозиториев генерируются из сочетания случайных имён персонажей игры Touhou и числа, например cirno-marisa-74291. Описание репозитория всегда содержит строку "Trinitite: Sponsored by Preview 2 Effects". Файлы данных зашифрованы, поэтому прочитать их может только владелец ключа расшифровки.

Используя похищенные токены, вредонос способен распространяться дальше. Он может публиковать новые версии других пакетов на npm, PyPI и RubyGems, внедряя в них тот же вредоносный код. Кроме того, червь способен отравлять GitHub-репозитории, добавляя вредоносные файлы в рабочие ветки. Подобные файлы маскируются под конфигурации популярных инструментов разработки, например VS Code или Claude Code, а также под автоматизированные проверки безопасности. Коммиты при этом оформляются как обычные сообщения "chore: update dependencies".

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

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

Package

  • @7nohe/openapi-react-query-codegen@0.5.4
  • @7nohe/openapi-react-query-codegen@0.5.5
  • @7nohe/openapi-react-query-codegen@1.6.3
  • @7nohe/openapi-react-query-codegen@1.6.4
  • @7nohe/openapi-react-query-codegen@2.2.1
  • @7nohe/openapi-react-query-codegen@2.2.2
  • @7nohe/openapi-react-query-codegen@3.0.3
  • @7nohe/openapi-react-query-codegen@3.0.4
  • @7nohe/openapi-react-query-codegen@0.0.0-365d4eb738d3146583431948d3ba6e27a32556be
  • @7nohe/openapi-react-query-codegen@0.0.0-ec7876d6c917dad516ba69bbfafc948b834bf0ab

SHA256

  • 59370c67b54a0ccaedd265e2356f04540b2fba1e1845300ef6de4d5437d99380
  • 709af2fdeb50324229e94c44c679a0fab18bd8e17d3864405989c526cbb63ad8
  • 778d6f0058045d6a2ab9a7e1d3e3be8e7e6b4d9cc217d13949bf1dfbab759a7c
  • 8e5d1af68ca340ae0c6e8132cb00c686ec2d60502c1994d94ce353d1472ad5a3
  • b24d121667f21f492cb9db34fbfd515d5922a8dd30b9c45215c7220abbb10ca8
  • b49afb7dba04cd99b357ce7c652c823a3707f28e130bd5c6645851a7adc030d6
  • b6012b2ff87f08f93ee53921c48db907ddbcf5461b03bb988083b01a36886237
  • e1f1162ece9a6e6ea21a20399cbf31c563a8149d433a68711f4223870c203d5a

Комментарии: 0