Kahinaan sa Python kapag pinangangasiwaan ang hindi wastong mga fractional na numero sa mga ctype

Available ang corrective release ng Python programming language 3.7.10 at 3.6.13, na nag-aayos ng kahinaan (CVE-2021-3177) na maaaring humantong sa pagpapatupad ng code kapag nagpoproseso ng mga hindi wastong numero ng floating point sa mga humahawak na tumatawag sa mga function ng C gamit ang mekanismo ng ctypes . Naaapektuhan din ng problema ang mga sangay ng Python 3.8 at 3.9, ngunit ang mga update para sa kanila ay nasa katayuan ng kandidato sa paglabas (naka-iskedyul ang pagpapalabas para sa Marso 1).

Ang problema ay sanhi ng isang buffer overflow sa ctypes function na PyCArg_repr(), na nangyayari dahil sa hindi ligtas na paggamit ng sprintf. Sa partikular, upang iproseso ang resulta ng pagbabagong 'sprintf(buffer, " ", self->tag, self->value.b)' ay naglaan ng static na buffer na 256 bytes ("char buffer[256]"), habang ang resulta ay maaaring lumampas sa halagang ito. Upang suriin ang kahinaan ng mga application sa kahinaan, maaari mong subukang ipasa ang halaga na "1e300", na, kapag naproseso ng pamamaraang c_double.from_param, ay hahantong sa isang pag-crash, dahil ang resultang numero ay naglalaman ng 308 character at hindi magkasya sa isang 256-byte na buffer. Halimbawa ng may problemang code: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Ang problema ay nananatiling hindi naayos sa Debian, Ubuntu at FreeBSD, ngunit naayos na sa Arch Linux, Fedora, SUSE. Sa RHEL, ang kahinaan ay hindi nangyayari dahil sa package assembly sa FORTIFY_SOURCE mode, na humaharang sa naturang buffer overflows sa mga string function.

Pinagmulan: opennet.ru

Magdagdag ng komento