Достъпни са корективни версии на програмния език 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
