Всего через три дня после успешной атаки на пакет "litellm" киберпреступная группа TeamPCP провела новую операцию, на этот раз скомпрометировав популярный Python-пакет "telnyx", который является SDK для работы с API телекоммуникационной платформы. Инцидент, обнаруженный специалистами компании Endor Labs 27 марта 2026 года, демонстрирует эволюцию тактик злоумышленников, которые перешли к использованию стеганографии для скрытия вредоносной нагрузки внутри аудиофайлов. Это усложняет детектирование как статическими анализаторами, так и сетевыми системами защиты.
Описание
Пакет "telnyx" имеет более 3,8 миллионов загрузок в сумме и около 790 тысяч ежемесячных установок, что делает его привлекательной мишенью для атак на цепочки поставок программного обеспечения. Злоумышленникам удалось опубликовать в репозитории PyPI две вредоносные версии - 4.87.1 и 4.87.2. Обе содержали модифицированный файл "telnyx/_client.py", который при импорте модуля запускал одну из двух платформо-специфичных атак. Последней чистой версией является "telnyx@4.87.0".
На системах Windows вредоносный код размещал в папке автозагрузки исполняемый файл, замаскированный под "msbuild.exe". На Linux и macOS загружался сборщик учетных данных, скрытый внутри WAV-файла. Любопытно, что первая попытка атаки в версии 4.87.1 провалилась из-за опечатки в коде - вызов функции с заглавной буквы "Setup()" вместо "setup()" приводил к ошибке "NameError", которая полностью прерывала выполнение вредоносной нагрузки. Однако через шестнадцать минут злоумышленники исправили ошибку и выпустили версию 4.87.2, в которой весь атакующий функционал уже работал корректно.
Аналитики Endor Labs сообщили, что атака однозначно приписана группе TeamPCP. Ключевым доказательством стал публичный RSA-4096 ключ, встроенный в код атаки на "telnyx". Он оказался побайтово идентичен ключу, использованному в компрометации "litellm" тремя днями ранее. Вероятность случайного совпадения таких ключей практически равна нулю, что делает это доказательство неопровержимым. Кроме того, совпадает и шаблон эксфильтрации данных: собранная информация шифруется с помощью AES-256-CBC, ключ сессии оборачивается с помощью RSA OAEP, а весь архив отправляется на сервер злоумышленников под именем "tpcp.tar.gz".
Технический анализ показал значительную эволюцию тактик, приемов и процедур (TTP) группы всего за три дня. Если в атаке на "litellm" весь вредоносный код - сборщик учетных данных, логику работы с облачными API и сценарии перемещения внутри Kubernetes - был встроен прямо в пакет в виде большой строки base64, то в "telnyx" злоумышленники перешли к архитектуре "тонкого дроппера". В самом пакете содержится лишь минимальный код-загрузчик размером 4428 символов в кодировке base64. Его задача - подключиться к командному серверу (C2) по адресу "83.142.209.203:8080", загрузить файл "ringtone.wav" (для Linux/macOS) или "hangup.wav" (для Windows) и извлечь из аудиоданных реальную вредоносную нагрузку.
Использование стеганографии в WAV-файлах - это серьезный шаг в сторону улучшения скрытности. Для сетевых систем защиты такой трафик выглядит как загрузка обычного аудиофайла, что не вызывает подозрений. Сами WAV-файлы являются структурно корректными, но аудиофреймы содержат не звуковые данные, а зашифрованный код. Загрузчик извлекает их, применяет операцию XOR с использованием ключа из первых 8 байт и получает на исполнение полнофункциональный 332-строчный сборщик учетных данных.
Этот сборщик проводит тотальный поиск конфиденциальной информации в системе. Он ищет SSH-ключи, учетные данные облачных провайдеров (AWS, Google Cloud, Azure), конфигурации Kubernetes ("~/.kube/config"), токены Docker, npm, Git, файлы с переменными окружения (".env"), истории командных оболочек и даже файлы криптовалютных кошельков. При обнаружении активных AWS-ключей сборщик самостоятельно использует их для вызова облачных API, таких как AWS Secrets Manager и SSM Parameter Store, чтобы расширить масштаб кражи. Если в системе найден токен сервисной учетной записи Kubernetes, вредоносная программа развертывает в кластере привилегированные поды, монтирующие корневую файловую систему хоста, что позволяет установить персистентный имплант на каждый узел кластера.
После сбора данных все они шифруются и отправляются на C2. Для обеспечения долговременного присутствия в системе на Linux создается служба "audiomon.service", которая каждые 45-55 минут опрашивает сервер злоумышленников на предмет получения новых команд или обновлений вредоносного кода. На Windows персистенция достигается за счет размещения файла "msbuild.exe" в папке автозагрузки.
По мнению экспертов, учетная запись для публикации пакета "telnyx" в PyPI была скомпрометирована через украденный API-токен. Наиболее вероятным вектором стала предыдущая атака на "litellm". Сборщик учетных данных, развернутый в рамках того инцидента, мог собрать токен "telnyx" из переменных окружения или файлов на компьютерах разработчиков или в CI/CD-пайплайнах, где использовались оба пакета. Трехдневный промежуток между атаками соответствует времени, необходимому для анализа украденных данных и выбора следующей цели.
Для пользователей пакета "telnyx" критически важно проверить установленные версии и немедленно откатиться до версии 4.87.0, если обнаружены 4.87.1 или 4.87.2. Также необходимо провести поиск артефактов персистенции: на Linux - проверить наличие каталога "~/.config/audiomon/" и службы "audiomon.service"; на Windows - найти файл "msbuild.exe" в папке автозагрузки. В Kubernetes следует искать поды с именами "node-setup-*" в пространстве имен "kube-system". Любое совпадение должно рассматриваться как полная компрометация окружения, что требует ротации всех учетных данных - SSH-ключей, облачных токенов, паролей баз данных и секретов CI/CD.
Данный инцидент наглядно показывает, как современные угрозы цепочкам поставок становятся все более изощренными. Переход от встраивания всего кода в пакет к модели "тонкого дроппера" со скрытой доставкой через стеганографию существенно повышает живучесть вредоносной программы и сложность ее обнаружения. Это требует от компаний не только мониторинга репозиториев на предмет подозрительных обновлений, но и внедрения более строгих практик безопасности, таких как использование PyPI Trusted Publishers (OIDC) вместо долгоживущих токенов, изоляция сборок и строгое хеширование зависимостей.
Индикаторы компрометации
IPv4 Port Combinations
- 83.142.209.203:8080
URLs
- http://83.142.209.203:8080/
- http://83.142.209.203:8080/hangup.wav
- http://83.142.209.203:8080/raw
- http://83.142.209.203:8080/ringtone.wav
SHA256
- 23b1ec58649170650110ecad96e5a9490d98146e105226a16d898fbe108139e5
- 4eceb569b4330565b93058465beab0e6d5ea09cfba8e7f29d7be1b5a2abd958a
- 7321caa303fe96ded0492c747d2f353c4f7d17185656fe292ab0a59e2bd0b8d9
- ab4c4aebb52027bf3d2f6b2dcef593a1a2cff415774ea4711f7d6e0aa1451d4e
- bc40e5e2c438032bac4dec2ad61eedd4e7c162a8b42004774f6e4330d8137ba8
- cd08115806662469bbedec4b03f8427b97c8a4b3bc1442dc18b72b4e19395fe3