Внедрение двухфакторной аутентификации в PyPI привело к инциденту с удалением популярного пакета

Разработчики репозитория Python-пакетов PyPI опубликовали план перехода на обязательную двухфакторную аутентификацию для пакетов, входящих в категорию критически важных. Важность определяется по числу загрузок и изменение будет применено к учётным записям сопровождающих и владельцев проектов, связанных с 1% пакетов, лидирующих по числу загрузок за 6 месяцев. С учётом того, что в настоящее время репозиторий PyPI включает более 350 тысяч пакетов, двухфакторная аутентификация будет применена примерно для 3500 пакетов. Для проверки попадания учётной записи в список подготовлена специальная страница. Точная дата включения обязательной двухфакторной аутентификации пока не определена, предполагается, что это произойдёт в ближайшие месяцы.

В отличие от перехода на двухфакторную аутентификацию проектов RubyGems, NPM и GitHub, в PyPI будет изначально внедрена схема, подразумевающая желательное использование аппаратного токена с ключами доступа. В качестве причины рекомендованного использования токенов и протокола WebAuthn упоминается более высокая безопасность по сравнению с генерацией одноразовых паролей (возможность использования TOTP вместо токенов будет доступна в форме опции).

Токены можно будет получить бесплатно - компания Google выступила спонсором инициативы и выделила для проекта 4000 ключей Titan. Каждый сопровождающий может подать заявку на бесплатное получение двух токенов с интерфейсом USB-C или USB-A. Второй токен отправляется в качестве резервного на случай поломки или потери основного, чтобы минимизировать риск потери доступа к репозиторию и избавить разработчиков от необходимости прохождения через сложную процедуру восстановления доступа.

К сожалению, токены могут быть отправлены только в Австрию, Бельгию, Канаду, Францию, Германию, Италию, Японию, Испанию, Швейцарию, Великобританию и США. Сопровождающие из других стран могут самостоятельно приобрести совместимые со спецификацией FIDO U2F токены, например, подходят токены Yubikey и Thetis. В качестве альтернативы также предусмотрена возможность применения вместо токена приложений для аутентификации на базе одноразовых паролей, поддерживающих протокол TOTP, например, Authy, Google Authenticator и FreeOTP.

Инициатива не обошлась без инцидента. Автор пакета Atomicwrites, насчитывающего 6 млн загрузок в месяц и 38 млн за 6 месяцев, не пожелал переходить на двухфакторную аутентификацию и для исключения своего пакета из списка критически важных попытался сбросить счётчик загрузок. Для сброса он вначале удалил пакет, а потом загрузил новую версию. Ожидалось, что подобная манипуляция лишь сбросит счётчик, но к удивлению разработчика из репозитория были удалены и все старые версии, что привело к проблемам у зависимых от библиотеки проектов, которые некоторые разработчики сравнили с инцидентом в результате удаления пакета left-pad в NPM.

Проблема усугубилась тем, что после удаления автор atomicwrites не смог загрузить старые версии, восстановить которые удалось лишь на следующий день после вмешательства администраторов PyPI. После произошедшего автор пакета принял решение прекратить разработку atomicwrites и перевести пакет в разряд устаревших. В качестве причины упоминается то, что он развивает проект как хобби в свободное время и появление дополнительных требований, усложняющих работу, не стоят времени, затрачиваемого на бесплатное сопровождение пакета с такой популярностью. Автор atomicwrites утверждает, что он бы предпочёл просто писать код для развлечения, а заботы о дополнительной защите от захвата злоумышленниками можно взвалить на себя когда за это платят.

Библиотека atomicwrites содержит около 200 строк кода и предлагает функции для атомарной записи файлов. В качестве замены можно использовать штатные вызовы os.replace и os.rename (операция сводится к записи в файл с временным именем и переименованию в целевой файл после готовности).

22 показа
225225 открытий
2 комментария

поза

Ответить

петухонщики как всегда

Ответить