Hatari katika Python wakati wa kushughulikia nambari za sehemu zisizothibitishwa katika ctypes

Matoleo sahihi ya lugha ya programu ya Python 3.7.10 na 3.6.13 yanapatikana, ambayo hurekebisha athari (CVE-2021-3177) ambayo inaweza kusababisha utekelezaji wa msimbo wakati wa kuchakata nambari za sehemu zinazoelea ambazo hazijaidhinishwa katika vishikilizi vinavyoita vitendaji vya C kwa kutumia utaratibu wa ctypes. . Tatizo pia huathiri matawi ya Python 3.8 na 3.9, lakini masasisho kwao bado yako katika hali ya mgombea wa kutolewa (toleo lililopangwa Machi 1).

Tatizo husababishwa na kufurika kwa bafa katika kazi ya ctypes PyCArg_repr(), ambayo hutokea kwa sababu ya matumizi yasiyo salama ya sprintf. Hasa, bafa tuli ya baiti 256 kwa ukubwa ("char buffer" [256]"), wakati matokeo yanaweza kuzidi thamani hii. Ili kuangalia uwezekano wa kuathirika kwa programu katika mazingira magumu, unaweza kujaribu kupitisha thamani "1e300", ambayo, ikichakatwa kwa mbinu ya c_double.from_param, itasababisha ajali, kwa kuwa nambari inayotokana ina herufi 308 na haiingii kwenye Baiti ya baiti 256. Mfano wa msimbo wenye matatizo: kuagiza ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Shida bado haijatatuliwa katika Debian, Ubuntu na FreeBSD, lakini tayari imesasishwa katika Arch Linux, Fedora, SUSE. Katika RHEL, athari haitokei kwa sababu ya kusanyiko la kifurushi katika modi ya FORTIFY_SOURCE, ambayo huzuia vifurushi kama hivyo katika vitendakazi vya kamba.

Chanzo: opennet.ru

Kuongeza maoni