Исследователи информационной безопасности из компании Socket обнаружили скоординированную кампанию по внедрению вредоносного кода сразу в три крупнейших реестра открытого программного обеспечения: npm (менеджер пакетов для JavaScript), PyPI (репозиторий пакетов для Python) и Crates.io (репозиторий для языка Rust). Кампания, получившая кодовое название TrapDoor, направлена на кражу ключей доступа к криптокошелькам, учётных данных облачных платформ, токенов GitHub и ключей SSH у разработчиков в сфере блокчейна, децентрализованных финансов (DeFi) и искусственного интеллекта. Это не просто очередной случай вредоносного пакета, а системная угроза для всей экосистемы разработки, которая использует разные техники закрепления и латерального перемещения внутри инфраструктуры жертвы.
Описание
Согласно данным, опубликованным Socket, кампания началась 22 мая 2026 года с публикации на PyPI пакета "eth-security-auditor" версии 0.1.0. В течение нескольких дней злоумышленники выгружали версии вредоносных пакетов волнами, используя несколько учётных записей. Всего исследователи выявили более 34 уникальных названий пакетов и свыше 384 их версий и связанных артефактов. Часть из них уже удалена из реестров, однако некоторые оставались активными на момент написания материала. Кампания получила название TrapDoor, и её ключевой особенностью стало то, что пакеты маскировались под обычные инструменты разработчика - утилиты помощи, сборщики проектов, сканеры безопасности и аудиторы кода. Исследователям удалось связать активность в разных реестрах, когда они заметили, что Rust-пакеты для разработчиков Sui и Move (язык смарт-контрактов в блокчейне Sui) используют ту же инфраструктуру, что и npm- и PyPI-пакеты.
Исследователи Socket обнаружили эту связь благодаря анализу поведенческих паттернов и пересечению инфраструктуры. Оказалось, что атакующий использует единый центр управления - аккаунт на GitHub под именем "ddjidd564". С его же страницы на GitHub Pages ("ddjidd564.github.io/defi-security-best-practices/") загружаются конфигурации и дополнительные скрипты. Вредоносные пакеты нацелены на кражу ключей SSH, данных кошельков Sui, Solana и Aptos, учётных данных AWS, токенов GitHub, а также файлов браузера, переменных окружения и API-ключей. Особую опасность представляет способность украденных SSH-ключей быть использованными для латерального перемещения внутри корпоративной сети, что позволяет злоумышленнику проникать на другие серверы и красть данные из CI/CD-систем.
Наибольшее количество пакетов кампания затронула в реестре npm. Для них используется механизм postinstall (скрипт, выполняемый автоматически после установки пакета). После установки запускается общая полезная нагрузка - файл "trap-core.js" объёмом 1149 строк кода. Этот скрипт сканирует систему на наличие учётных данных, проверяет их валидность через API AWS и GitHub, а затем предпринимает меры для закрепления в системе. Среди механизмов закрепления - прописывание в файлы ".cursorrules" и "CLAUDE.md" (конфигурационные файлы для AI-ассистентов в редакторах кода), установка Git-хуков, добавление в cron (планировщик задач Linux) и systemd (система инициализации), а также использование SSH-ключей для заражения соседних машин. Один из пакетов, "dev-env-bootstrapper", выполняет двойную функцию: он и сам ворует данные, и распространяет вредоносную конфигурацию в окружение разработчика.
Для пользователей Rust в реестре Crates.io были найдены шесть пакетов с вредоносными скриптами "build.rs". Эти скрипты выполняются автоматически во время компиляции пакета, ещё до того, как разработчик запустит какую-либо команду из самого пакета. "build.rs" ищет локальные хранилища ключей (keystores) криптокошельков, шифрует их с помощью жёстко заданного XOR-ключа "cargo-build-helper-2026" и отправляет в GitHub Gists. Такая атака особенно опасна для разработчиков, работающих с платформами Sui и Move, поскольку позволяет похищать seed-фразы и приватные ключи прямо в процессе сборки проекта.
Пакеты на PyPI используют другой вектор. Они автоматически выполняют код при импорте модуля в Python-скрипт. Вредоносные пакеты загружают JavaScript-скрипт с контролируемого злоумышленником домена GitHub Pages и запускают его через команду "node -e". Это даёт атакующему возможность обновлять поведение полезной нагрузки без публикации новой версии в PyPI - достаточно изменить файлы на GitHub Pages.
Примечательно, что кампания активно экспериментирует с атаками на AI-ассистентов разработчиков. В файлах ".cursorrules" и "CLAUDE.md" вставляются скрытые инструкции с использованием нулевой ширины Unicode-символов. Эти инструкции могут побудить AI-инструменты выполнить "проверку безопасности", которая на самом деле запускает сбор и отправку данных. Кроме того, злоумышленник открыл несколько пул-реквестов (pull requests) в популярные open source проекты, такие как "browser-use/browser-use", "langchain-ai/langchain" и "run-llama/llama_index", с предложением добавить файлы ".cursorrules" или "CLAUDE.md". Некоторые из этих PR были оформлены как "документация по стандартам разработки" и содержали ссылку на ту же подконтрольную страницу GitHub Pages.
Атакующий не просто публиковал вредоносные пакеты, но и создал целый набор репозиториев-приманок с названиями вроде "defi-profit-scanner", "smart-contract-audit-toolkit", "web3-dev-toolkit-2026". Эти проекты выглядят как легитимные инструменты и привлекают внимание разработчиков, которые затем могут довериться и другим пакетам атакующего. Документ "AUDIT-MATRIX.md", найденный в репозитории злоумышленника, описывает задумку атаки как "универсальный фреймворк извлечения данных через AI-агентов" и содержит такие техники, как сканирование файловой системы, сбор переменных окружения, кредитных идентификаторов и маскировка под задачи безопасности.
Для команд безопасности эта кампания - важный сигнал о том, что современные атаки на цепочку поставок становятся многомерными. Они не ограничиваются одним реестром и используют специфические механизмы выполнения для каждой языковой экосистемы. Пакеты с безобидными названиями могут маскировать сложные загрузчики, которые затем обновляются удалённо и пытаются закрепиться во всех слоях окружения разработчика - от AI-конфигураций до системных планировщиков. Socket отследил все выявленные пакеты и уведомил администраторов реестров, однако разработчикам крайне важно проверять происхождение и поведение каждого устанавливаемого пакета, особенно если он касается криптокошельков, облачных ключей или AI-инструментов. Лучше всего доверять только проверенным источникам и использовать средства поведенческого анализа, способные выявлять аномалии на ранних стадиях.
Индикаторы компрометации
Domains and infrastructure
- ddjidd564.github.io
- ddjidd564.github.io/defi-security-best-practices/
- GitHub account: ddjidd564
Campaign markers and files
- P-2024-001
- trap-core.js
- trap-core.js size: 48485 bytes
- XOR key: cargo-build-helper-2026
- Конфигурация веб-перехватчика исходного контента GitHub, получение данных
Persistence and propagation paths
- .cursorrules
- CLAUDE.md
- Git hooks
- Shell hooks
- systemd
- cron
- SSH