Խոցելիություն Python-ում ctypes-ում չվավերացված կոտորակային թվերի հետ աշխատելիս

Հասանելի են Python ծրագրավորման լեզուների 3.7.10 և 3.6.13 ուղղիչ թողարկումները, որոնք շտկում են խոցելիությունը (CVE-2021-3177), որը կարող է հանգեցնել կոդի կատարման՝ չվավերացված լողացող կետով թվերը մշակելիս, որոնք կանչում են C ֆունկցիաներ՝ օգտագործելով ctypes մեխանիզմը: . Խնդիրն ազդում է նաև Python 3.8 և 3.9 մասնաճյուղերի վրա, սակայն դրանց թարմացումները դեռևս թողարկման թեկնածուի կարգավիճակում են (թողարկումը նախատեսված է մարտի 1-ին):

Խնդիրն առաջանում է բուֆերային արտահոսքի հետևանքով ctypes PyCArg_repr() ֆունկցիայի մեջ, որն առաջանում է sprintf-ի ոչ անվտանգ օգտագործման պատճառով: Մասնավորապես, մշակել փոխակերպման արդյունքը 'sprintf(բուֆեր, " ", self->tag, self->value.b)' հատկացրել է 256 բայթ ստատիկ բուֆեր ("char buffer[256]"), մինչդեռ արդյունքը կարող է գերազանցել այս արժեքը։ Հավելվածների խոցելիությունը խոցելիության նկատմամբ ստուգելու համար կարող եք փորձել փոխանցել «1e300» արժեքը, որը c_double.from_param մեթոդով մշակելիս կհանգեցնի վթարի, քանի որ ստացված թիվը պարունակում է 308 նիշ և չի տեղավորվում 256 բայթ բուֆեր: Խնդրահարույց կոդի օրինակ՝ ներմուծման ctypes; x = ctypes.c_double.from_param(1e300); ռեպր (x)

Խնդիրը մնում է չլուծված Debian-ում, Ubuntu-ում և FreeBSD-ում, սակայն արդեն շտկվել է Arch Linux-ում, Fedora-ում, SUSE-ում: RHEL-ում խոցելիությունը չի առաջանում FORTIFY_SOURCE ռեժիմում փաթեթի հավաքման պատճառով, որն արգելափակում է նման բուֆերային հոսքերը լարային ֆունկցիաներում:

Source: opennet.ru

Добавить комментарий