Разработчики языка Python предупредили о новой уязвимости в реализации интерпретатора CPython. Проблеме присвоен идентификатор CVE-2026-7210, а её уровень опасности оценен как средний (6,3 балла по шкале CVSS 4.0). Угрозу обнаружил и описал сотрудник Python Software Foundation Стэн Ульбрих. Уязвимость затрагивает все версии CPython до 3.15.0 включительно, если на них не установлен последний патч.
Уязвимость CVE-2026-7210
Суть проблемы кроется в недостаточной энтропии при защите парсеров XML от атак, известных как "хеш-флудинг" (переполнение хеш-таблиц). Речь идёт о двух встроенных модулях: xml.parsers.expat и xml.etree.ElementTree. Оба используются для разбора XML-документов, например, при обработке конфигурационных файлов, сетевых ответов или данных из внешних источников. При нормальной работе эти парсеры применяют случайное значение (хеш) для распределения элементов XML в хеш-таблице. Если злоумышленник подберёт специально сформированный XML-файл, в котором все ключи попадут в один и тот же "бакет" хеша, произойдёт коллизия. В результате время обработки такого документа может вырасти до квадратичной зависимости от размера входных данных. Это классическая атака на хеш-флудинг, способная вызвать отказ в обслуживании или резко снизить производительность приложения.
Почему энтропия оказалась недостаточной? В текущей реализации CPython генератор случайных чисел, используемый для вычисления начального хеша, не обеспечивает достаточную непредсказуемость. Атакующий может вычислить шаблон распределения и подготовить документ, гарантированно вызывающий коллизии. Для полного устранения уязвимости требуется два действия: обновить системную библиотеку libexpat до версии 2.8.0 или новее (именно она отвечает за базовое хеширование в парсере expat), а также применить патч к самому CPython, который усиливает случайность seed-значения. Без любого из этих шагов защита останется неполной.
Какие риски несёт эта уязвимость? В первую очередь она угрожает серверным приложениям, которые активно обрабатывают входящие XML-данные. Например, веб-сервисы, принимающие запросы в формате XML (SOAP, XML-RPC), системы обмена сообщениями, почтовые шлюзы или кастомные интеграции. Злоумышленник может отправить сжатый, но "взрывной" XML-документ, который заставит процессор тратить несоразмерно много ресурсов. В результате один запрос может полностью загрузить CPU и память, вызвав отказ в обслуживании для легитимных пользователей. При этом для эксплуатации уязвимости не требуется аутентификация: достаточно, чтобы уязвимый сервер принял POST-запрос или загрузил файл.
Примечательно, что подобные атаки известны уже много лет. В 2011 году в Python уже исправляли аналогичную уязвимость в модуле xml.etree.ElementTree. Тогда защиту усилили, но, как выяснилось, недостаточно. Нынешняя находка показывает, что энтропия seed-значения остаётся слабым местом. Разработчики рекомендуют всем пользователям CPython как можно скорее перейти на версию 3.15.0, в которой уже интегрирован исправляющий патч. Если обновление интерпретатора пока невозможно, необходимо применить патч из официального репозитория (ссылка в бюллетене безопасности Python PNY5OMBDPM2FRUZTWFFPJ6LISWKV627K) и убедиться, что версия libexpat в системе не ниже 2.8.0.
Важно понимать, что уязвимость затрагивает не только серверные решения. Разработчики десктопных приложений, использующих такие популярные библиотеки, как lxml (основанный на libxml2 и libexpat), также должны оценить риски. Впрочем, в случае lxml ситуация может отличаться, поскольку там используется другая реализация. Проблема касается именно CPython и его встроенных парсеров.
Отдельно стоит отметить, что данная уязвимость - не единственная в майском бюллетене. Параллельно с CVE-2026-7210 компания сообщила о ещё одной проблеме (CVE-2026-3087), но её детали пока не раскрыты. Вероятно, в ближайшее время стоит ожидать уточнения.
Для системных администраторов и инженеров по информационной безопасности алгоритм действий простой: провести инвентаризацию всех систем, где установлен CPython, проверить версии интерпретатора и наличие обновлений libexpat. Если используется Python 3.14 или старше, необходимо срочно применить патч. Для контейнерных сред, таких как Docker, следует пересобрать образы с актуальными версиями пакетов. Рекомендуется также протестировать приложения на устойчивость к XML-бомбам с помощью специальных утилит, например, xmltest или OWASP ZAP.
В целом, уязвимость CVE-2026-7210 - классический пример того, как, казалось бы, небольшая ошибка в генерации случайных чисел может сделать защиту от коллизий бесполезной. Учитывая повсеместное использование Python в веб-разработке, автоматизации и высоконагруженных системах, промедление с исправлением может дорого обойтись. Разработчики уже подготовили необходимые изменения, дело за пользователями - своевременно их применить.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2026-7210
- https://mail.python.org/archives/list/security-announce@python.org/thread/PNY5OMBDPM2FRUZTWFFPJ6LISWKV627K/
- https://github.com/python/cpython/pull/149023