Matoleo sahihi ya Python 3.7.10 na 3.6.13 sasa yanapatikana, kushughulikia uwezekano wa kuathiriwa (CVE-2021-3177) ambao unaweza kusababisha utekelezaji wa msimbo wakati wa kushughulikia nambari za sehemu zinazoelea ambazo hazijadhibitiwa katika vidhibiti vinavyoita vitendaji vya C kwa kutumia utaratibu wa ctypes. Suala hilo pia linaathiri Python 3.8 na 3.9, lakini sasisho kwao kwa sasa ziko katika hali ya mgombea wa kutolewa (toleo limepangwa Machi 1).
Suala hili linasababishwa na kufurika kwa bafa katika kipengele cha kukokotoa cha PyCARg_repr() ctypes, ambacho hutokea kwa sababu ya matumizi yasiyo salama ya sprintf. Hasa, usindikaji wa matokeo ya 'sprintf(buffer," ', self->tag, self->value.b)' imetenga bafa tuli ya baiti 256 ("char buffer[256]"), ilhali tokeo linaweza kuzidi thamani hii. Ili kupima uwezekano wa programu, unaweza kujaribu kupitisha thamani "1e300", ambayo, inapochakatwa na mbinu ya c_double.from_param, itasababisha ajali, kwa kuwa nambari inayotokana ina tarakimu 308 na haifai katika bafa ya 256-byte. Mfano wa msimbo wenye matatizo: kuagiza ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Suala bado halijatatuliwa katika Debian, Ubuntu na FreeBSD, lakini tayari imerekebishwa katika Arch Linux, Fedora, SUSE. Katika RHEL, udhaifu haujitokezi kutokana na vifurushi vinavyojengwa katika hali ya FORTIFY_SOURCE, ambayo huzuia kufurika kwa bafa katika vitendakazi vya mfuatano.
Chanzo: opennet.ru
