Кампания TrapDoor: 34 вредоносных пакета в трёх репозиториях Python, JavaScript и Rust нацелены на крипторазработчиков

information security

Двадцать четвёртого мая 2026 года исследователи безопасности из компании Socket.dev документировали масштабную атаку на цепочку поставок, затронувшую три крупнейших реестра открытого кода: npm, PyPI и Crates.io. Операция, получившая название TrapDoor, включала более 34 вредоносных пакетов, выпущенных в общей сложности в 384 версиях. Злоумышленники нацелились на разработчиков, работающих в сфере криптовалют, децентрализованных финансов (DeFi), блокчейна Solana, искусственного интеллекта и кибербезопасности.

Описание

Используя встроенные механизмы выполнения каждого реестра - обработчики postinstall в npm, точки входа при импорте в PyPI и сценарии компиляции build.rs в Crates.io, - атакующие автоматически запускали вредоносную логику на этапе установки или сборки. Целью было похищение ценных данных: ключей SSH, конфигураций блокчейн-кошельков, учётных записей облачных сервисов и файлов состояния сессий браузеров.

Аналитики из SlowMist, разработавшие систему мониторинга угроз Web3 под названием MistEye, выявили активность, связанную с этой операцией, во всех трёх экосистемах. Они отобрали по одному характерному образцу из каждой группы вредоносных пакетов. Для PyPI таким образцом стал пакет git-config-sync, маскирующийся под инструмент синхронизации конфигурации Git. В реестре Crates.io был выбран пакет sui-framework-helpers, выдававший себя за библиотеку для разработки на Sui Move. Из npm взяли пакет token-usage-tracker, который позиционировался как средство отслеживания использования токенов.

Между образцами для Python и JavaScript обнаружились явные связи на уровне кода: оба использовали один и тот же домен для удалённой конфигурации: ddjidd564.github.io. Кроме того, npm-образец содержал единый маркер атаки P-2024-001 и поддерживал перекрёстные вызовы с другим вредоносным пакетом той же кампании - dev-env-bootstrapper. Что касается Rust-образца, его причастность к операции TrapDoor основывается пока только на внешней атрибуции от Socket.dev - прямых доказательств в коде, таких как общие URL или маркеры, обнаружено не было. Правда, по целям Rust-образец пересекался с npm-образцом: он также охотился за разработчиками Sui и Solana.

Архитектура кампании построена по принципу "разработать один раз - применять везде". Вместо того чтобы создавать уникальную вредоносную логику для каждой экосистемы, злоумышленники собрали единый фреймворк для сбора и вывода данных, а затем привязали его к нативным точкам запуска. Особого внимания заслуживает выбор каналов вывода: атакующие использовали легитимные сервисы, которые обычно не блокируются корпоративными сетями и антивирусами. Речь идёт о GitHub Pages, GitHub Raw, API GitHub Gist и сервисе webhook.site. Если бы злоумышленники применяли собственные C2-серверы (центры управления), они бы с большей вероятностью попали под правила обнаружения.

Все три цепочки атаки проходят через три этапа: запуск, сбор и вывод. Однако по способности к распространению и закреплению в системе образцы сильно различаются. Образцы для Python и Rust работали как одноразовые похитители - их активность завершалась сразу после окончания процесса или компиляции, не оставляя постоянного механизма удержания. И только npm-образец обладал полноценными модулями распространения и закрепления: он мог модифицировать файлы .cursorrules, CLAUDE.md, внедрять Git-хуки и добавлять строки в .bashrc, .zshrc и .profile.

Для Python точка входа находилась в файле __init__.py - он выполнялся при первой загрузке пакета, до запуска основной команды. Пакет сканировал домашнюю директорию на наличие шести типов конфиденциальных данных: приватных ключей, мнемонических фраз, токенов OpenAI, токенов GitHub, ключей AWS и паролей. Результаты сжимались и отправлялись на удалённые серверы через POST-запросы в открытом виде без какого-либо шифрования.

Rust-образец срабатывал на этапе компиляции: Cargo запускал build.rs до основной сборки. Скрипт искал файлы кошельков Sui, Aptos и Solana, шифровал их с помощью фиксированного XOR-ключа (cargo-build-helper-2026) и отправлял на общий Gist через публичный API GitHub. Важная деталь: если ни одного файла кошелька не находилось, сетевые запросы не выполнялись - это делало атаку полностью невидимой на машинах разработчиков, не использующих соответствующие блокчейн-инструменты.

Наиболее сложным оказался npm-образец token-usage-tracker. Он не только собирал данные из десятков источников - от кошельков до браузерных файлов и переменных окружения, - но и шифровал их с помощью Fernet (AES-128-CBC + HMAC-SHA256), а при неудаче пытался передать через Gist. Кроме того, модуль умел выполнять произвольные команды через удалённую конфигурацию, превращаясь в точку удалённого доступа. Самая передовая техника - отравление контекста искусственного интеллекта. Пакет перезаписывал файлы .cursorrules и CLAUDE.md, вставляя в них до 200 строк промпт-инъекций. В эти инструкции были закодированы команды на невидимых глазу символах (Zero-Width Steganography), которые при последующей работе с AI-ассистентами вроде Cursor или Claude Code побуждали их выполнять вредоносные действия. Этот приём принципиально расширяет поверхность атаки: заражение передаётся не от машины к машине, а через совместное использование проектов с AI-инструментами.

Кампания TrapDoor - одна из крупнейших атак такого рода за последнее время. Она демонстрирует системное злоупотребление легитимными публичными сервисами и появление новой атаки на процессы разработки с использованием искусственного интеллекта. Всем разработчикам, работающим с криптовалютами, DeFi, Solana и AI, следует немедленно проверить свои окружения на наличие перечисленных индикаторов компрометации: пакетов git-config-sync, token-usage-tracker, sui-framework-helpers, dev-env-bootstrapper, файлов .p2024_integrity, .integrity_config, а также следов в .cursorrules, CLAUDE.md, Git-хуках и shell-конфигурациях. Ключи, пароли и токены на скомпрометированных машинах необходимо заменить в кратчайшие сроки.

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

Domains

  • ddjidd564.github.io

URLs

  • https://ddjidd564.github.io/defi-security-best-practices/config.json
  • https://ddjidd564.github.io/defi-security-best-practices/priority_targets.json
  • https://raw.githubusercontent.com/ddjidd564/defi-security-best-practices/gh-pages/scan.js
  • https://raw.githubusercontent.com/ddjidd564/defi-security-best-practices/gh-pages/scan-bundled.js
  • https://raw.githubusercontent.com/ddjidd564/defi-security-best-practices/main/config.json
  • https://webhook.site/2ada14c8-00f6-43ce-9ad6-f5dc15952246
  • https://webhook.site/7513bf3d-7092-4739-bf15-a8f779a75546
  • https://webhook.site/d1652693-2eb8-4281-b9e8-cffff36da2f8

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