Pythonen ahultasuna ctypetan baliogabetu gabeko zatiki-zenbakiak maneiatzen dituenean

Python programazio-lengoaiaren 3.7.10 eta 3.6.13 bertsio zuzentzaileak eskuragarri daude, eta ahultasun bat (CVE-2021-3177) konpontzen dute, baliogabetu gabeko koma mugikorreko zenbakiak prozesatzen direnean kodea exekutatu litekeena ctypes mekanismoa erabiliz C funtzioak deitzen dituzten kudeatzaileetan. . Arazoak Python 3.8 eta 3.9 adarrei ere eragiten die, baina horien eguneraketak oraindik kaleratze hautagaiaren egoeran daude (martxoaren 1erako aurreikusita dagoen kaleratzea).

Arazoa ctypes funtzioan PyCArg_repr() buffer gainezkatzeak eragiten du, sprintf-en erabilera ez-seguruagatik gertatzen dena. Bereziki, 'sprintf(buffer, " eraldaketaren emaitza prozesatzeko ", self->tag, self->value.b)'-k 256 byteko buffer estatiko bat esleitu zuen ("char buffer[256]"), emaitzak balio hori gaindi zezakeen bitartean. Aplikazioek ahultasunarekiko duten ahultasuna egiaztatzeko, "1e300" balioa pasatzen saia zaitezke, eta horrek, c_double.from_param metodoak prozesatzen duenean, hutsegite bat ekarriko du, ondoriozko zenbakiak 308 karaktere dituelako eta ez baita sartzen. 256 byteko bufferra. Kode problematikoen adibidea: inportatu ctypes; x = ctypes.c_double.from_param (1e300); repr(x)

Arazoak konpondu gabe jarraitzen du Debian, Ubuntu eta FreeBSD-en, baina dagoeneko konpondu da Arch Linux, Fedora, SUSE-n. RHEL-en, ahultasuna ez da gertatzen FORTIFY_SOURCE moduan paketeen muntaketa dela eta, eta horrek kate-funtzioetan buffer gainezkatzea blokeatzen du.

Iturria: opennet.ru

Gehitu iruzkin berria