Hades Campaign: сложная атака на цепочку поставок Python-пакетов угрожает разработчикам и AI-системам

security

Восьмого июня 2026 года специалисты по информационной безопасности обнаружили масштабную компрометацию цепочки поставок в экосистеме Python. Злоумышленники внедрили вредоносный код сразу в семь популярных пакетов, используемых в биоинформатике, вычислительной биологии и анализе связей генотип-фенотип. Эта операция, получившая название Hades Campaign, представляет собой качественно новый этап в эволюции угроз для разработчиков.

Описание

Среди скомпрометированных пакетов оказались ensmallen (версия 0.8.101), embiggen (0.11.97), gpsea (0.9.14), pyphetools (0.9.120), nhmpy (2.4.7), mflux-streamlit (0.0.3 и 0.0.4) и ppkt2synergy (0.1.1). Все эти библиотеки используются в научных и исследовательских проектах, что делает атаку особенно опасной для академических и фармацевтических организаций.

Новая кампания стала продолжением деятельности угрозы Miasma. Ранее исследователи фиксировали атаки этого кластера на экосистему npm, а также инциденты с захватом AI-агентов для написания кода. Новый отчёт аналитиков раскрывает ключевые отличия Hades Campaign от предыдущих версий вредоносного ПО.

Главное изменение кроется в способе доставки. Если в атаках на npm вредоносный код исполнялся в момент установки пакета через перехват сценариев жизненного цикла, то в Python-кампании заражение происходит непосредственно при импорте библиотеки. Вредоносный код встраивается в файл __init__.py в виде обфусцированного хука импорта.

При первом импорте скомпрометированного пакета запускается сложная цепочка действий. Сначала вредоносная программа проверяет наличие флагового файла в системной временной папке. Если файл отсутствует, скрипт находит в путях поиска модулей Python сопутствующий файл _index.js, затем загружает с GitHub исполняемый файл рантайма Bun версии 1.3.14. После распаковки и запуска JavaScript-нагрузки создаётся флаговый файл, чтобы избежать повторного исполнения в рамках одной загрузочной сессии.

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

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

Среди расшифрованных модулей обнаружились скрейперы памяти для разных операционных систем. На платформе Windows вредоносный код выполняет PowerShell-скрипт, который динамически компилирует C#-класс для вызова Win32 API-функций чтения памяти процессов. На macOS применяется Python-скрипт, использующий Mach kernel VM API для получения доступа к памяти процессов без привилегий суперпользователя. Такое межплатформенное покрытие гарантирует, что вредоносная программа сможет извлекать секреты из раннеров GitHub Actions независимо от операционной системы.

Управление и контроль осуществляются через три независимых канала, использующих публичную инфраструктуру GitHub. Собранные токены доступа шифруются и отправляются в публичные репозитории злоумышленников в виде коммитов с ключевым словом DontRevokeOrItGoesBoom. Второй канал основан на поиске коммитов с ключевым словом TheBeautifulSnadsOfTime, которые содержат JavaScript-нагрузку с цифровой подписью RSA-PSS. Третий канал представляет собой Python-демона, который ежеминутно опрашивает GitHub на предмет коммитов с ключевым словом firedalazer.

Особого внимания заслуживает механизм сдерживания, встроенный в вредоносное ПО. На заражённых рабочих станциях устанавливается дополнительный фоновый сервис gh-token-monitor, который регулярно проверяет статус украденного токена доступа. Если токен оказывается отозван, сервис запускает деструктивную процедуру уничтожения данных. Эта мера призвана запугать специалистов по безопасности и заставить их отложить отзыв скомпрометированных учётных данных.

Распространение вредоносного кода происходит по трём направлениям. Через SSH и SCP вредоносная программа проникает на другие машины, используя конфигурационные файлы known_hosts. Используя токены OIDC в среде GitHub Actions, она может публиковать скомпрометированные версии пакетов в PyPI и npm от имени законных организаций. Кроме того, вредоносный код внедряется в конфигурационные файлы AI-ассистентов, таких как Claude, Copilot, Codex и Gemini, что позволяет активировать нагрузку при анализе кода системами искусственного интеллекта.

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

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

C2 Search Keyword

  • DontRevokeOrItGoesBoom
  • firedalazer
  • TheBeautifulSnadsOfTime

Exfiltration Description

  • Hades - The End for the Damned

Exfiltration Repo Pattern

  • stygian-cerberus-[0-9]+
  • tartarean-charon-[0-9]+

 

Lock File

  • /tmp/.bun_ran
  • /tmp/tmp.0144018410.lock

Persistence Config

  • ~/.config/systemd/user/gh-token-monitor.service
  • ~/.config/systemd/user/update-monitor.service
  • ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
  • ~/Library/LaunchAgents/com.user.update-monitor.plist

Persistence Script

  • ~/.local/share/updater/update.py

Repo Backdoor Files

  • .claude/settings.json
  • .claude/index.js
  • .claude/setup.mjs
  • .vscode/tasks.json
  • .vscode/setup.mjs

State File

  • /var/tmp/.gh_update_state

Wiper Config

  • ~/.config/gh-token-monitor/token

Wiper Script

  • ~/.local/bin/gh-token-monitor.sh

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