В репозитории Python-пакетов PyPI (Python Package Index) предоставлена возможность использования нового защищённого метода публикации пакетов, позволяющего обойтись без сохранения на внешних системах (например, в GitHub Actions) фиксированных паролей и токенов доступа к API. Новый метод аутентификации получил название ‘Trusted Publishers‘ и призван решить проблему с публикацией вредоносных обновлений, осуществляемых в результате компрометации внешних систем и попадания в руки злоумышленников предопределённых паролей или токенов.
Новый метод аутентификации основан на использовании стандарта OpenID Connect (OIDC), подразумевающего использование токенов аутентификации с ограниченным временем действия, которыми обмениваются внешние сервисы и каталог PyPI для подтверждения операции публикации пакета вместо использования традиционных логина/пароля или вручную сгненерированных постоянных токенов доступа к API. Возможность применения механизма “Trusted Publishers” уже реализована для обработчиков, запускаемых в GitHub Actions. В будущем ожидается реализация поддержки Trusted Publishers и для других внешних сервисов.
Сопровождающие пакеты могут на стороне PyPI выставить признак доверия идентификаторам, предоставляемым внешним провайдерам OpenID (IdP, OpenID Connect Identity Provider), которые внешний сервис будет использовать для запроса у PyPI недолгоживущих токенов. Генерируемые токены OpenID Connect подтверждают связь между проектом и обработчиком, что позволяет PyPI выполнять дополнительную верификацию метаданных, например, проверять, что публикуемый пакет соотносится с определённым репозиторием. Токены не сохраняются, привязаны к определённым API и автоматически прекращают действовать после истечения короткого времени жизни.
Дополнительно можно отметить отчёт компании Sonatype с информацией о выявлении в марте 2023 года 6933 вредоносных пакетов в каталоге PyPI. Всего с 2019 года число выявленных в PyPI вредоносных пакетов превысило 115 тысяч. Большая часть вредоносных пакетов маскируются под популярные библиотеки при помощи тайпсквотинга (назначение похожих имён, отличающихся отдельными символами, например, exampl вместо example, djangoo вместо django, pyhton вместо python и т.п.) – злоумышленники рассчитывают на невнимательных пользователей, совершивших опечатку или не заметивших отличий в названии при поиске. Вредоносные действия обычно сводятся к отправке конфиденциальных данных, найденных на локальной системе в результате определения типовых файлов с паролями, ключами доступа, криптокошельками, токенами, сессионными Cookie и другой конфиденциальной информацией.