Уязвимость в CPython позволяет удаленно вызвать отказ в обслуживании через HTML-парсер

Python

Hазработчики CPython выпустили обновление, устраняющее уязвимость высокого уровня опасности (CVE-2026-15308). Ошибка обнаружена в инкрементальном HTML-парсере (html.parser.HTMLParser) и позволяет удалённо истощить ресурсы центрального процессора (CPU) без аутентификации. Проблеме присвоен рейтинг 8,7 по шкале CVSS 4.0 - это означает, что эксплуатация не требует сложных условий и доступна из сети.

Уязвимость CVE-2026-15308

Суть уязвимости кроется в способности парсера попадать в бесконечный цикл при обработке специально сформированных незавершённых объявлений разметки. Если злоумышленник отправляет на обработку приложению, использующему HTMLParser из CPython, повторяющиеся фрагменты такого типа, парсер начинает потреблять всё больше вычислительных ресурсов. В результате уязвимая система перестаёт отвечать на легитимные запросы - наступает отказ в обслуживании (DoS). При этом вектор атаки не требует от нападающего привилегированного доступа или каких-либо учётных данных.

Проблема затрагивает все версии CPython до 3.15.0. Это означает, что под ударом находится огромное количество развёрнутых решений - от веб-приложений на Django и Flask до инструментов автоматизации и скриптов, обрабатывающих недоверенный HTML. Особенно опасна ситуация для серверных сред, где парсер может быть вызван для каждого входящего запроса, а также для встроенных систем, использующих Python для разбора пользовательского контента на веб-страницах. Учитывая популярность CPython, потенциальное число пострадавших систем оценивается в миллионы.

Разработчики из Python Software Foundation уже опубликовали патч, входящий в состав релиза CPython 3.15.0. В официальном бюллетене подчёркивается, что причиной уязвимости стал недостаток в логике парсера при работе с неполными конструкциями HTML - реализация не проверяла наличие закрывающего символа и зацикливалась. Администраторам рекомендуется как можно скорее обновить интерпретатор до версии 3.15.0 или применить предложенный коммит из репозитория, указанный в соответствующем запросе на слияние (pull request). Временным решением может служить отключение обработки непроверенного HTML через HTMLParser, однако это не всегда возможно в рабочих сценариях.

Это не первая уязвимость в стандартных библиотеках Python, вызванная неэффективной обработкой некорректного ввода. Ранее подобные проблемы находили в модулях tarfile и zipfile, а также в парсерах других распространённых языков. Тенденция показывает, что даже простые на первый взгляд ошибки проектирования могут приводить к серьёзным последствиям при масштабном использовании. С учётом высокого рейтинга уязвимости и доступности эксплойта (отсутствие ограничений по сети, без аутентификации), пользователям CPython стоит проявить бдительность и не откладывать установку обновления.

Ссылки

Комментарии: 0