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

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Ответить
Аватара пользователя
rssbot
Бот
Сообщения: 6002
ОС: gnu/linux

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

Сообщение rssbot »

Доступны корректирующие выпуски языка программирования 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, блокирующем подобные переполнения буфера в строковых функциях.

Дополнение: Релизы Python 3.9.2 и 3.8.8 с устранением уязвимости опубликованы раньше изначально намеченного срока.


Источник: https://www.opennet.ru/opennews/art.shtml?num=54616
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 20.02.2021 09:03, всего редактировалось 4 раза.
Причина: Updated upstream
Спасибо сказали:
Ответить