CVE-2019-20907: бесконечный цикл в Python tarfile при открытии специально созданного TAR-архива
В Python до версии 3.8.3 включительно обнаружена уязвимость в модуле tarfile: специально сформированный TAR-архив вызывает бесконечный цикл при вызове tarfile.open из-за отсутствия проверки заголовков в функции _proc_pax. Проблема касается приложений, обрабатывающих недоверенные архивы, и может привести к отказу в обслуживании.
Подробности
Уязвимость CVE-2019-20907 находится в файле Lib/tarfile.py. Причина — отсутствие валидации заголовков в функции _proc_pax, отвечающей за обработку расширенных заголовков формата PAX. Атакующий может сконструировать TAR-архив таким образом, что при его открытии через tarfile.open выполнение войдёт в бесконечный цикл. Уязвимы версии Python вплоть до 3.8.3 включительно. Официальная оценка CVSS в записи CVE не указана, однако характер проблемы (внешне управляемый вход в бесконечный цикл) позволяет квалифицировать её как отказ в обслуживании (DoS): обработка «зависшего» архива блокирует поток или процесс, потребляет ресурсы CPU и может вывести из строя сервис, если такие операции выполняются синхронно или без ограничений по времени. Отдельно стоит отметить, что уязвимость не приводит к выполнению произвольного кода или утечке данных — её последствия ограничиваются нарушением доступности. Тем не менее в многопользовательских и автоматизированных сценариях, где TAR-архивы принимаются от недоверенных источников, риск DoS вполне реален.Что делать
Основная рекомендация — обновить Python до версии, в которой уязвимость устранена (3.8.4 и новее, а также актуальные патчи для поддерживаемых веток). Проверьте версию интерпретатора командой python3 --version и убедитесь, что используемые в вашей инфраструктуре сборки получают исправленные пакеты. Если немедленное обновление невозможно, примените компенсирующие меры:- не передавайте в tarfile.open архивы из недоверенных источников без предварительной проверки;
- выполняйте распаковку в изолированном процессе с жёстким лимитом времени и потребления ресурсов (таймауты, ulimit, cgroups);
- валидируйте входящие архивы на периметре: ограничивайте размер, проверяйте структуру и происхождение файлов;
- рассмотрите отказ от автоматической распаковки пользовательских TAR-архивов там, где это не требуется бизнес-логикой.
Источник: CVE Project (cvelistV5)
