Уязвимост в Python, която се проявява при обработката на неконтролируеми десетични числа в ctypes

Достъпни са корективни версии на програмния език Python 3.7.10 и 3.6.13, в които е отстранена уязвимост (CVE-2021-3177), способна да доведе до изпълнение на код при обработка на непроверени числа с плаваща запетая в обработчиците, извикващи функции на езика C чрез механизма ctypes. Проблемът засегна също версиите на Python 3.8 и 3.9, но актуализации за тях все още се намират в статус на кандидати за издаване (планираното издание е на 1 март).

Проблемът е предизвикан от препълване на буфера в функцията ctypes PyCArg_repr(), което възниква от несигурно използване на sprintf. В частност, при обработка на резултата от преобразуването ‘sprintf(buffer, «’, 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster