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

Python бағдарламалау тілінің 3.7.10 және 3.6.13 түзеткіш шығарылымдары қол жетімді, олар ctypes механизмін пайдаланып C функцияларын шақыратын өңдеушілерде расталмаған өзгермелі нүкте сандарын өңдеу кезінде кодтың орындалуына әкелуі мүмкін осалдықты (CVE-2021-3177) түзетеді. . Мәселе Python 3.8 және 3.9 тармақтарына да әсер етеді, бірақ олар үшін жаңартулар әлі де шығарылым кандидаты күйінде (шығарылым 1 наурызға жоспарланған).

Мәселе ctypes PyCArg_repr() функциясындағы буфердің толып кетуінен туындады, ол sprintf қауіпсіз пайдаланылуына байланысты пайда болады. Атап айтқанда, түрлендіру нәтижесін өңдеу үшін 'sprintf(буфер," ", self->teg, self->value.b)' 256 байт ("char buffer[256]") статикалық буферді бөлді, ал нәтиже осы мәннен асып кетуі мүмкін. Қолданбалардың осалдыққа осалдығын тексеру үшін c_double.from_param әдісімен өңделген кезде бұзылуға әкеп соғатын «1e300» мәнін беруге болады, себебі алынған сан 308 таңбадан тұрады және келесі мәнге сәйкес келмейді. 256 байт буфер. Проблемалық кодтың мысалы: import ctypes; x = ctypes.c_double.from_param(1e300); қайталау(x)

Мәселе Debian, Ubuntu және FreeBSD жүйелерінде шешілмеген, бірақ Arch Linux, Fedora, SUSE жүйелерінде шешілген. RHEL жүйесінде осалдық FORTIFY_SOURCE режимінде буфер жинақталуына байланысты пайда болмайды, ол жол функцияларындағы буфердің толып кетуін блоктайды.

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

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