Брешь в API python.org: уязвимость позволяла подменить ссылки на релизы Python

23 июня 2026 года Python Software Foundation опубликовала отчёт об уязвимости в API управления релизами на python.org. Её обнаружили ещё в феврале, быстро закрыли и теперь рассказали подробно.

23 февраля исследователь Splitline Ng из DEVCORE Research Team сообщил в Python Security Response Team (PSRT) о проблеме с аутентификацией. Суть была простой: API принимал запросы, где в качестве имени пользователя указывался администратор, а в качестве ключа API подставлялось любое значение. Такой запрос обрабатывался с полными правами администратора.

Что можно было сделать

С этими правами можно было менять метаданные релизов на странице python.org/downloads. А именно — URL-ы, по которым скачиваются файлы, и ссылки на материалы для проверки (Sigstore, PGP-подписи). Сами файлы релизов подменить было нельзя, только указатели на них.

Уязвимость существовала в коде с 2014 года.

Насколько это было опасно на практике

Для большинства разработчиков — почти никак. Те, кто ставит Python через пакетные менеджеры дистрибутивов или использует Docker-образы из проверенных источников, почти не зависят от прямых ссылок с python.org.

Но если скачивать исходники или бинарники напрямую и не проверять подписи — теоретически можно было подставить другой адрес. На практике этого не произошло. PSF проверила логи, резервные копии базы и все артефакты через Sigstore и PGP. Никаких изменений не нашли.

Кроме того, многие downstream-проекты и дистрибутивы автоматически проверяют подписи перед сборкой. Попытка подмены была бы заметной.

Как быстро отреагировали

Патч подготовили и выкатили меньше чем за 48 часов. Уже 24 февраля уязвимость была закрыта в продакшене. Исследователь подтвердил, что его PoC больше не работает.

Что сделали дополнительно

  • ужесточили проверку URL — теперь API и база данных отвергают всё, что не начинается с https://www.python.org/;
  • добавили тесты на все негативные сценарии аутентификации;
  • увеличили срок хранения логов запросов к сайту с 3 до 30 дней;
  • провели ручной аудит кода и проверили инструментами на базе LLM;
  • заказали независимый аудит у Trail of Bits.

Это нормальная реакция для проекта такого уровня. Прозрачно, быстро и с дополнительными улучшениями.

Вывод

Это не история про взлом Python. Это история про то, как в инфраструктуре, которой пользуются миллионы, может жить старая брешь — и как её нашли, быстро закрыли и честно рассказали.

Для тех, кто работает с Python на серверах и в CI/CD, ничего принципиально не меняется. Продолжайте использовать проверенные каналы доставки, проверяйте подписи там, где возможно, и следите за официальными отчётами PSF. python.org остаётся надёжным источником.

Источники и ссылки