Администраторы репозитория Python Package Index (PyPI) поместили в карантин, а затем удалили пакет aiocpa, установленный более 12 000 раз. После обновления в нем появился вредоносный код, отвечавший за кражу приватных ключей.
Этот пакет описывается как синхронный и асинхронный клиент для Crypto Pay API. Исходно он был выпущен в сентябре 2024 года, и за прошедшее время его успели загрузить 12 100 раз.
Как сообщают аналитики компании Phylum, которые обнаружили эту атаку на цепочку поставок, автор пакета опубликовал вредоносное обновление только в PyPI, а репозиторий библиотеки на GitHub остался чистым.
В настоящее время неясно, стоял ли за вредоносным обновлением сам разработчик, или же его учетные данные могли быть скомпрометированы хакерами, которые и сделали aiocpa в PyPI вредоносным.
Первые признаки вредоносной активности были замечены в версии 0.1.13. В ней был изменен Python-скрипт sync.py, который отвечал за декодирование и запуск обфусцированного блока кода сразу после установки пакета.
«Этот конкретный блоб рекурсивно кодируется и сжимается 50 раз», — рассказывают в Phylum и объясняют, что он используется для захвата и кражи API-токена Crypto Pay жертвы с помощью Telegram-бота.
Отметим, что Crypto Pay рекламируется как платежная система на базе Crypto Bot в Telegram, которая позволяет пользователям принимать платежи в криптовалюте и совершать переводы с помощью API.
«Как показывает практика, злоумышленники могут намеренно поддерживать чистоту репозиториев с исходным кодом, распространяя свои вредоносные пакеты в экосистемах, — заключают исследователи. — Эта атака служит напоминанием о том, что если пакет был безопасным в прошлом, это не гарантирует его безопасности в дальнейшем».
UPD. 27 ноября 2024
Вскоре после публикации этой новости с нами связался разработчик aiocpa, известный под ником vovchic17 (мы убедились, то этот человек контролирует GitHub-репозиторий проекта). Он сообщил, что узнал о вредоносном коде в своем пакете только сейчас, а до этого попадание проекта в карантин и последующее удаление из PyPI стали для него «очень странным фактом».
По словам vovchic17, он действительно стал жертвой атаки: злоумышленники воспользовались тем, что он случайно опубликовал токен доступа к PyPI в GitHub-репозитории aiocpa. В таком случае не защитит даже двухфакторная аутентификация, с недавних пор ставшая обязательной в PyPI.
Разработчик подчеркивает, что пакет был помещен в карантин уже через несколько минут после публикации вредоносного кода. Сам Vovchic17 и другие участники сообщества разработчиков Crypto Pay API проверили, какую информацию мог получить злоумышленник.
Выяснилось, что с помощью токена Telegram-бота, который использовался для кражи данных, были получены все сообщения, которые присылались от имени бота. Суммарно было украдено 8 токенов. Подчеркивается, что токены приложений Crypto Pay API были либо от тестовой сети, в которой монеты не имеют ценности, либо имели настройки приватности, которые не позволяли использовать методы /createCheck и /transfer. В итоге автор aiocpa полагает, что атакующий, вероятно, не успел получить никакой выгоды.
На данный момент токен бота сброшен, то есть дальнейшая кража токенов исключена даже в случаях, если пакет был установлен из PyPI до попадания в карантин.
Разработчик обещает продолжать работу над aiocpa и намерен приложить все усилия для возвращения пакета в Python Package Index (хотя пока связаться с поддержкой не удалось).
«Конечно, я буду пытаться вернуть пакет в PyPI, так как на данный момент это самая актуальная библиотека для работы с Crypto Pay API, ей пользуются сотни людей. Для меня важна репутация этого проекта и я собираюсь поддерживать его и дальше», — сообщил vovchic17 «Хакеру».