Түрлердегі расталмаған бөлшек сандарды өңдеу кезінде Python-дағы осалдық

Доступны корректирующие выпуски языка программирования 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’ (%d)>», self->tag, self->value.b)’ выделялся статический буфер размером 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. В RHEL уязвимость не проявляется из-за сборки пакетов в режиме FORTIFY_SOURCE, блокирующем подобные переполнения буфера в строковых функциях.

Ақпарат көзі: opennet.ru

пікір қалдыру