Исследователи из Socket Threat Research зафиксировали свежую волну вредоносных пакетов в репозитории PyPI (главный каталог пакетов для языка Python). Кампания продолжает серию атак на цепочки поставок, известную под кодовыми названиями Mini Shai‑Hulud, Miasma и Hades. На этот раз обнаружено 23 новых артефакта - версий пакетов с вредоносным кодом. Они дополняют 37 ранее выявленных вредоносных пакетов PyPI, о которых сообщалось на прошлой неделе.
Описание
Новая волна отличается от предыдущей не только количеством, но и методами доставки полезной нагрузки. Если раньше злоумышленники полагались на исполняемые хуки в файлах .pth (точки входа Python, запускающиеся при старте интерпретатора), то теперь они используют как минимум три различных механизма. Это говорит о том, что угроза быстро эволюционирует, а операторы кампании активно ищут способы обхода традиционных средств защиты.
В состав новых артефактов входят шесть пакетов, связанных с биоинформатикой, несколько пакетов, имитирующих названия популярных библиотек вроде "rsquests" (похожий на "requests"), "tlask" и "rlask" (вариации Flask), а также ряд пакетов на тему искусственного интеллекта и протокола MCP (Model Context Protocol). Особого внимания заслуживает вариант "langchain-core-mcp". В отличие от предыдущих образцов, этот пакет не содержит внутри файл "_index.js". Вместо этого его хук .pth ищет полезную нагрузку в пути поиска модулей Python ("sys.path") и запускает её с помощью runtime‑среды Bun.
Специалисты Socket Threat Research обнаружили все 23 новых артефакта и добавили их на специализированную страницу отслеживания кампании. На данный момент в базу внесено 471 поражённый артефакт в экосистемах npm и PyPI: 411 артефактов в 106 пакетах npm и 60 артефактов в 37 пакетах PyPI. Страница будет обновляться по мере выявления новых инцидентов.
Три ветви атаки
Первая ветвь - уже знакомый нам паттерн с файлом .pth. Вредоносный пакет содержит "*-setup.pth" и встроенный "_index.js". Когда Python загружает модуль, хук запускается, при необходимости загружает Bun из репозитория GitHub и исполняет JavaScript‑похититель. Этот метод был характерен для волны выходных.
Вторая ветвь - использование скомпрометированных нативных расширений. Она обнаружена в биоинформатических пакетах. Вредоносный код спрятан внутри скомпилированного расширения ".abi3.so". При импорте пакета Python загружает расширение через "dlopen()", и в момент инициализации модуля выполняется функция, запускающая "_index.js". Поскольку исходный код на Python может выглядеть абсолютно легитимным, а само расширение типично для вычислительных и научных библиотек, такой приём сложнее выявить при ручной проверке исходников.
Третья ветвь - вариант "langchain-core-mcp". Его хук .pth не включает файл "_index.js" в состав пакета. Вместо этого он сканирует каждую директорию из "sys.path" в поисках полезной нагрузки - сначала прямо, затем на один уровень вложенности. Если файл найден, он запускается через Bun. Это означает, что загрузчик и полезная нагрузка могут быть установлены из разных пакетов, что усложняет обнаружение для сканеров, ожидающих найти обе части в одном артефакте.
Полезная нагрузка и методы обмана
Независимо от способа доставки, исполняемый код остаётся прежним - сильно обфусцированный JavaScript‑похититель, относящийся к семейству Hades. В начале файла "_index.js" размещён большой блок комментариев, имитирующий системные инструкции и политики. Этот блок не влияет на исполнение кода, но предназначен для срыва автоматического анализа на основе больших языковых моделей. Если триажер или анализатор копирует начало файла как запрос к нейросети, тот может выдать отказ или неверную классификацию, не дойдя до настоящего вредоносного кода.
Как только похититель активируется, он собирает данные с рабочей станции разработчика или из среды непрерывной интеграции и поставки (CI/CD). Целью становятся учётные данные для GitHub, npm, PyPI, RubyGems, JFrog, облачные провайдеры, ключи Kubernetes и SSH, конфигурации Docker, истории команд, переменные окружения (файлы ".env"), токены реестров пакетов и конфигурация инструментов разработчика на базе искусственного интеллекта.
Последствия и защитные меры
Такая атака особенно опасна для сред сборки и релизов. Единственная скомпрометированная учётная запись позволяет злоумышленникам публиковать новые вредоносные пакеты, изменять рабочие процессы или получать доступ к инфраструктуре, граничащей с продуктивной.
Для защиты специалистам по информационной безопасности стоит в первую очередь обратить внимание на точки входа и возможное раскрытие учётных данных. Рекомендуется проверить используемые версии пакетов, при возможности сохранить криминалистические артефакты перед удалением, а также ротировать любые токены, которые могли попасть в руки злоумышленников. Стоит просканировать окружения Python на наличие исполняемых файлов ".pth", неожиданных файлов "_index.js", логики загрузки Bun и недавно появившихся расширений ".abi3.so". В средах CI/CD необходимо проверить конвейеры на предмет необычных изменений, злоупотребления сокетами Docker, изменённых файлов "/etc/hosts", неожиданных привилегированных контейнеров и доступа к учётным данным для публикации пакетов.
Эта кампания демонстрирует, что угрозы цепочкам поставок становятся всё более изощрёнными. Злоумышленники не просто повторяют один и тот же приём - они адаптируют механизмы доставки, используют особенности экосистемы и пытаются обойти автоматизированные системы анализа. Бдительность и регулярный аудит используемых зависимостей остаются главной линией обороны.