В репозитории PyPI выявлено около 5000 оставленных в коде секретов и 8 вредоносных обфускаторов

Исследователи GitGuardian опубликовали результаты анализа конфиденциальных данных, забытых разработчиками в коде, размещённом в репозитории Python-пакетов PyPI (Python Package Index). После изучения более 9.5 млн файлов и 5 млн релизов пакетов, связанных с 450 тысячами проектов, было выявлено 56866 фактов утечки конфиденциальных данных. Если учитывать только уникальные данные, без дублирования в разных релизах, число выявленных утечек составило 3938, а число проектов, в которых присутствует хотя бы одна утечка — 2922.

Всего выделено более 150 типов утечек конфиденциальной информации, среди которых обычные пароли, криптографические ключи, токены доступа к облачным сервисам, системам непрерывной интеграции и API. Как минимум 768 учётных данных оставались действующими на момент проведения исследования. В качестве примера популярных утечек, сохраняющих актуальность, упоминаются ключи доступа к Azure Active Directory, учётные данные к SSH, MongoDB, MySQL и PostgreSQL, ключи к GitHub OAuth App, Dropbox и Auth0, параметры входа в Coinbase и Twilio.

Из набирающих популярность типов утечек упоминаются токены для доступа к ботам в Telegram, число которых удвоилось в начале 2021 года и затем ещё раз удвоилось весной 2023 года.
Постоянный рост утечек также фиксируется с 2020 года для ключей доступа к Google API, а с 2022 года — учётных данных к СУБД. Из пакетов, лидирующих по числу утечек, упоминаются пакеты chatllm и
safire, в которых были забыты 209 ключей к OpenAI и 320 ключей к Google Cloud.

Среди типов файлов, в которых выявлено наибольшее число утечек, помимо файлов с расширением «.py», отмечаются файлы с расширением .json (610 утечек), .md (270), PKG-INFO (240), METADATA (210), .txt (170), а также файлы README (209) и файлы из каталогов с именем test (675). Много утечек также связано с недосмотром и ошибками с настройкой исключения файлов при формировании пакетов. Например, файлы с локальными файлами конфигурации (.cookiecutterrc, .env, .pypirc и т.п.) могут исключаться из Git-репозитория через файл «.gitignore», который не учитывается при создании пакета. В частности, в репозитории было найдено 43 файла .pypirc, содержащих учётные данные для доступа к PyPI. В 15 случаях утечек разработчики не планировали публично размещать пакеты, изначально созданные для внутреннего использования, но опубликовали их в PyPI по ошибке.

Дополнительно можно упомянуть ещё два события, связанных с PyPI:

  • В репозитории PyPI выявлены 8 вредоносных пакетов, преподносимых как утилиты для обфускации, т.е. приведения кода к нечитаемому виду, усложняющему восстановление алгоритма работы. Выявленные пакеты содержали в названиях строку «pyobf» (Pyobftoexe, Pyobfusfile, Pyobfexecute, Pyobfpremium, Pyobflight,
    Pyobfadvance, Pyobfuse и pyobfgood) и были загружены более 2000 раз.

    Интегрированный в пакеты вредоносный код был специфичен для платформы Windows и позволял подключаться к внешнему управляющему серверу, запускать произвольные команды на компьютере разработчика, находить и отправлять на внешний сервер конфиденциальную информацию, такую как ключи доступа, а также передавать произвольные файлы с системы. Кроме того, вредоносный код мог выполнять функции кейлоггера, перехватывать вводимые в Chrome пароли, создавать скриншоты, записывать звук и даже управлять web-камерой.

  • Опубликованы результаты независимого аудита кодовой базы инструментария, применяемого для организации работы репозитория pypi.org, и фреймворка «cabotage», задействованного в инфраструктуре для оркестровки контейнеров. Аудит проведён при поддержке некоммерческой организации OTF (Open Technology Fund). В ходе аудита не выявлено проблем с высоким уровнем опасности, а исходные тексты признаны отвечающими основным требованиям к безопасному написанию кода. При этом отмечен недостаточный охват тестами кодовой базы cabotage и выявлено 29 проблем, из которых восьми присвоен умеренный уровень опасности, 6 — низкий, а 14 помечены как информирующие замечания.

    Наиболее заметные проблемы:

    • Недостаточная проверка цифровых подписей, используемых для интеграции PyPI с AWS SNS, позволяла отправлять уведомления на email отдельных пользователей.
    • Утечка информации в обработчике загрузок, позволяющая определить существование учётной записи без генерации событий о попытках входа.
    • Применение ненадёжных криптографических хэшей, не исключающих атаки по отравлению кэша.
    • При наличии прав запуска процессов сборки через cabotage, атакующий потенциально мог добиться подстановки своих команд.
    • При наличии прав развёртывания (deployment) в cabotage, атакующий потенциально мог развернуть легитимно выглядящий образ.

Источник: http://www.opennet.ru/opennews/art.shtml?num=60169