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

Python

В CPython обнаружена уязвимость, которая позволяет злоумышленнику вызвать отказ в обслуживании приложений, использующих стандартный модуль для работы с CSV-файлами. Проблема связана с функцией автоматического определения диалекта файла. Разработчики выпустили исправления для всех затронутых веток.

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

Уязвимость получила идентификатор CVE-2026-18503. Она затрагивает функцию Sniffer.sniff(), которая анализирует образец данных и определяет, какие символы используются в качестве разделителей полей, кавычек и escape-последовательностей. При обработке специально сформированного ввода функция выполняет избыточный объём работы, что приводит к значительному потреблению процессорного времени. В результате приложение может зависнуть или перестать отвечать на запросы, то есть возникает состояние отказа в обслуживании.

Согласно бюллетеню безопасности Python Software Foundation, уязвимость классифицирована как низкая по степени опасности (CVSS 2.4). Однако потенциальная атака не требует сложного оборудования: достаточно отправить приложению вредоносный CSV-файл, если оно передаёт неограниченный ввод в Sniffer.sniff(). Это особенно актуально для сервисов, которые принимают от пользователей файлы на импорт, например, в веб-приложениях.

Проблема затрагивает CPython до версии 3.13.15, а также ветки 3.14 начиная с 3.14.0 и до 3.14.7, и ветку 3.15 начиная с альфа-версии 3.15.0a1 и до 3.15.0rc1. Разработчики устранили уязвимость в выпусках 3.13.15, 3.14.7 и 3.15.0rc1. Пользователям рекомендуется обновить интерпретатор до актуальной версии, особенно если их приложения работают с CSV-данными из ненадёжных источников.

В официальном описании уязвимости отмечается, что старый алгоритм использовал неэффективные регулярные выражения, которые на некоторых данных требовали квадратичного времени обработки. На практике это означало, что образец размером около одного мегабайта мог обрабатываться более двадцати секунд, что выглядело как зависание программы. Новая реализация работает линейно и выполняет ту же задачу за десятки миллисекунд.

Исправление не ограничивается устранением уязвимости. В новой версии также исправлены несколько связанных ошибок, накопленных за годы эксплуатации модуля. В их числе - некорректное определение разделителя, когда внутри поля с кавычками встречался похожий символ, зависание при обработке одноколоночных данных с кавычками, а также невозможность обнаружить escape-символ. Теперь функция корректно распознаёт такие случаи и не тратит лишние ресурсы на заведомо бесполезные проверки.

Помимо этого, изменено поведение при анализе образцов, содержащих преамбулу из заголовков или комментариев: если строки данных преобладают над служебными строками, определение разделителя по-прежнему срабатывает. Раньше подобные образцы могли привести к ошибочному результату. Также функция теперь не пытается угадывать разделитель среди букв и цифр, что устраняет ложные срабатывания на некоторых типах данных.

Отдельно разработчики отметили, что исправление не затрагивает функции определения окончания строк и типа кавычек. Эти возможности могут появиться в будущих версиях, но в текущем обновлении они сознательно оставлены без изменений.

Пользователям, которые используют CPython во встраиваемых решениях или в собственных продуктах, необходимо учитывать, что исправление меняет результаты работы Sniffer.sniff() на некоторых корректных данных. Это задокументировано в примечаниях к релизу. Для большинства сценариев новые результаты будут более точными, однако в редких случаях могут потребоваться незначительные правки в коде, который полагался на старое поведение.

Уязвимость затрагивает все перечисленные версии CPython, в которых используется прежняя реализация Sniffer.sniff(). Разработчики уже выпустили исправление, пользователям рекомендуется установить его в кратчайшие сроки. Проблема привлекла внимание к вопросам производительности стандартных библиотек, однако в данном случае устранение оказалось своевременным и не потребовало экстренных мер.

Ссылки

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