Di Pythonê de lawazbûn dema ku di ctypes de hejmarên perçeyî yên nerastkirî bi kar tîne

Daxuyaniyên rastkirî yên zimanê bernamenûsê Python 3.7.10 û 3.6.13 hene, yên ku qelsiyek (CVE-2021-3177) rast dike ku dikare bibe sedema darvekirina kodê dema ku hejmarên niqteya herikandinê yên nerastkirî di hilberên ku bi karanîna mekanîzmaya ctypes gazî fonksiyonên C dikin. . Pirsgirêk di heman demê de bandorê li şaxên Python 3.8 û 3.9 jî dike, lê nûvekirinên ji bo wan hîn jî di statûya berendamê berdanê de ne (berdan ji 1ê Adarê ve hatî plansaz kirin).

Pirsgirêk ji ber zêdebûnek tamponê di fonksiyona ctypes PyCArg_repr() de ye, ku ji ber karanîna neewle ya sprintf pêk tê. Bi taybetî, ji bo pêvajoya veguhertina 'sprintf(buffer, " ", self->tag, self->value.b)' tamponek statîk a 256 byte veqetand ("char buffer[256]"), dema ku encam dikare ji vê nirxê derbas bibe. Ji bo kontrolkirina qelsiya serîlêdanan li ser qelsiyê, hûn dikarin biceribînin ku nirxa "1e300" derbas bikin, ku dema ku bi rêbaza c_double.from_param ve were hilberandin, dê bibe sedema têkçûnekê, ji ber ku hejmara encam 308 tîpan dihewîne û nakeve nav 256-byte tampon. Nimûneya koda pirsgirêkê: ctypes import; x = ctypes.c_double.from_param(1e300); repr(x)

Pirsgirêk di Debian, Ubuntu û FreeBSD de bêserûber dimîne, lê jixwe di Arch Linux, Fedora, SUSE de hatî rast kirin. Di RHEL-ê de, ji ber kombûna pakêtê di moda FORTIFY_SOURCE de, ku di fonksiyonên rêzikê de zêdebûnên tamponê yên weha asteng dike, xeternak çênabe.

Source: opennet.ru

Add a comment