Уязвимость в Python, проявляющаяся при обработке непроверенных дробных чисел в ctypes

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
19-Фев-2021 19:30

Доступны корректирующие выпуски языка программирования Python 3.7.10 и 3.6.13, в которых устранена уязвимость (CVE-2021-3177), способная привести к исполнению кода при обработке непроверенных чисел с плавающей запятой в обработчиках, вызывающих функции на языке Си при помощи механизма ctypes. Проблема также затрагивает ветки Python 3.8 и 3.9, но обновления для них пока находятся в состоянии кандидата в релизы (релиз запланирован на 1 марта).
Проблема вызвана переполнением буфера в ctypes-функции PyCArg_repr(), возникающем из-за небезопасного использования sprintf. В частности, на обработку результата выполнения преобразования 'sprintf(buffer, "<cparam '%c' (%f)>", self->tag, self->value.d)' выделялся статический буфер размером 256 байт ("char buffer[256]"), в то время как результат мог превышать данное значение. Для проверки подверженности приложений уязвимости можно попробовать передать значение "1e300", которое при обработке методом c_double.from_param приведёт к краху, так как результирующие число содержит 308 знаков и не умещается в 256-байтный буфер.
Пример проблемного кода:
import ctypes
   x = ctypes.c_double.from_param(1e300)
   repr(x)
Проблема остаётся неисправленной в Debian, Ubuntu и FreeBSD, но уже устранена в Arch Linux, Fedora, SUSE и Gentoo. В RHEL уязвимость не проявляется из-за сборки пакетов в режиме FORTIFY_SOURCE, блокирующем подобные переполнения буфера в строковых функциях.
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_python
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 14:32
Часовой пояс: UTC + 5