Уязвимость сборки пакетов Python и риск захвата домена
Исследователи обнаружили критическую уязвимость в сценариях сборки некоторых пакетов Python в индексе PyPI, которая потенциально позволяет злоумышленникам захватывать домены и подменять легитимные скрипты вредоносным кодом. Проблема коренится в историческом переходе от distutils к setuptools и в оставшихся в экосистеме «bootstrap»‑скриптах, унаследованных из эпохи Python 2.
Что произошло
Речь идет о пакетах, которые по-прежнему используют устаревшие сценарии начальной загрузки (bootstrap scripts), автоматически устанавливающие или разрешающие установку сторонних инструментов. В одном из исследованных случаев эксплойт proof-of-concept демонстрирует, как на базе Python 2‑скрипта из пакета slapos.core можно обойти стандартный механизм загрузки пакета, запустив этот скрипт с флагом, позволяющим выполнить дополнительные (и потенциально вредоносные) действия.
Исследователи отмечают, что метод эксплойта использует именно поведение bootstrap‑скриптов — выполнение кода на этапе установки, который может загружать ресурсы из внешних доменов.
Почему это возможно
- Историческая зависимость от distutils, который устарел и был удалён в Python 3.12, привела к тому, что ряд пакетов оставил старые схемы начальной загрузки;
- Некоторые bootstrap‑скрипты обращаются к внешним доменам (в т.ч. к python-distribute.org), которые могли быть удалены и затем перерегистрированы третьими лицами — это порождает риск подмены контента;
- Жёстко закодированные URL в исходниках дают злоумышленнику простой вектор для внедрения, аналогичный поведению загрузчиков вредоносного ПО;
- Отсутствие надзора и централизованных мер контроля в части runtime‑запросов при установке пакетов повышает эксплойтабельность таких шаблонов.
Прецеденты
Аналогичный инцидент уже случался в экосистеме JavaScript: в 2023 году пакет npm fsevents пострадал от захвата невостребованного облачного ресурса, который использовали для доставки вредоносных исполняемых файлов пользователям. Тогда уязвимость была задокументирована как CVE-2023-45311. Это демонстрирует, что проблема — не узкоспецифичная баг‑фича PyPI, а общая слабость практик управления пакетами и внешними ресурсами.
Последствия для экосистемы и пользователей
- Возможность доставки вредоносной полезной нагрузки под видом легитимного кода при установке пакета;
- Риск распространения компрометированного кода через цепочки зависимостей;
- Угроза для автоматизированных сборочных систем и CI/CD процессов, использующих уязвимые пакеты;
- Ухудшение доверия к репозиториям и пакетом с историческими зависимостями.
Рекомендации для разработчиков и администраторов
- Провести аудит пакетов на предмет наличия bootstrap‑скриптов и жёстко закодированных внешних URL; удалить или модернизировать такие скрипты;
- Отказаться от использования устаревших компонентов, мигрировать с distutils на setuptools и поддерживать совместимость с современными версиями Python;
- Избегать загрузки исполняемого кода по HTTP/из внешних доменов во время установки; при необходимости — хранить зависимости локально или в доверенных репозиториях;
- Внедрить практики подписывания и верификации пакетов, контроль целостности (hash‑проверки) и строгие правила CI для сторонних зависимостей;
- Проверять владение и историю доменов, используемых в коде, и удалять ссылки на невосстановленные или ненадёжные ресурсы;
- Пользователям и админам: применять политику минимальных привилегий при установке, запускать установку в изолированных окружениях и мониторить сетевую активность установочных процессов.
Вывод
Проблема, выявленная исследователями, подчёркивает фундаментальный риск, связанный с практиками управления пакетами в открытом сообществе: устаревший код и внешние зависимости создают вектор для атак, от которых страдают как конечные пользователи, так и инфраструктура. Решение требует совместных усилий: поддерживающих PyPI, авторов пакетов и потребителей — чтобы исключить загрузку кода из ненадёжных источников, убрать Bootstrap‑скрипты эпохи Python 2 и внедрить строгие механизмы контроля целостности.
Без таких мер доверие к системе распространения пакетов может оказаться под угрозой, а злоумышленники продолжат использовать знакомые паттерны для масштабного компрометации приложений.
Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.
Ознакомиться подробнее с отчетом можно по ссылке.



