Уязвимость в CPython обрезает имя узла и номер порта нулевым байтом

Python

В CPython - эталонной реализации языка Python - нашлась уязвимость в модуле socket, который отвечает за сетевой обмен. Функция разрешения имён, превращающая имя узла и порт в адрес для подключения, принимает нулевые байты в этих аргументах. Из-за этого значения обрезаются молча, и вызывающий код получает не тот адрес, который запрашивал. Затронуты выпуски CPython без последнего исправления безопасности.

CVE-2026-116566 в функции разрешения имён

Запись CVE-2026-116566 имеет статус PUBLISHED: она опубликована и доступна для использования. Идентификатор назначила Python Software Foundation - организация, которая развивает язык. Зарезервировали номер 26 октября 2026 года, опубликовали 29 октября, а на следующий день запись обновили. Отдельной даты публичного раскрытия источник не даёт, поэтому детали открылись вместе с публикацией.

Оценка по CVSS 4.0 - 5.3 из 10, средний уровень по классификации вендора. Слабость отнесена к CWE-158, то есть к неверной обработке нулевого байта. CISA в дополнительном блоке к записи сообщает, что эксплуатации не фиксировала, автоматизировать атаку нельзя, а техническое воздействие агентство оценило как полное. Дополнительный блок - отдельный слой сведений, который агентство добавляет к записи по своей методике. Публикация деталей не означает реальных атак: запись описывает ошибку в коде, а не кампанию.

Нулевой байт - символ с кодом 0, которым в языке C традиционно помечают конец строки. Попадая в аргумент, он заставляет функцию читать строку только до себя. Поэтому имя узла или номер порта обрезается, и запрос уходит на другой адрес либо на другой порт. Пользователь подмены не видит: значение выглядит корректным вплоть до подключения.

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

Бюллетень безопасности Python HCHE62VYTPYI6WOPJQDWUBR4CINBPSM7 от 29 октября 2026 года описывает проблему общими словами. В разделе о риске сказано, что характер последствий издатель не уточнил, а в затронутых системах указан CPython без последнего исправления безопасности. За подробностями бюллетень отсылает к уведомлению проекта в рассылке security-announce. Значит, перечень исправленных сборок нужно смотреть у вендора, а не в пересказе.

Исправленной версии запись CVE не называет. Верхняя граница затронутого диапазона - 3.16.0 - не равна номеру патча: CPython числится уязвимым для версий ниже этой границы, для остальных версий проекта по умолчанию действует статус "не затронут". Номер исправления приводит уведомление проекта, на которое ссылается бюллетень. Обходных мер источник не приводит.

Практические шаги вытекают из этих документов. Сначала установленный CPython сверяют с диапазоном из записи CVE. Затем интерпретатор обновляют до сборки, где ошибка закрыта, взяв номер из уведомления проекта. Пока такой сборки нет, остаётся отслеживать запись и бюллетень: иных мер, кроме обновления и наблюдения, вендор не предложил.

Значимость уязвимости средняя. Удалённого исполнения кода она не даёт и в реальных атаках не встречалась. Стандартная библиотека Python работает в большом числе служб, поэтому обрезку адреса на нулевом байте разумно закрыть в обычном цикле обновлений.

Ссылки

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