Bod yn agored i niwed yn Python wrth drin rhifau ffracsiynol heb eu dilysu mewn ctypes

Mae datganiadau cywirol o iaith raglennu Python 3.7.10 a 3.6.13 ar gael, sy'n trwsio bregusrwydd (CVE-2021-3177) a allai arwain at weithredu cod wrth brosesu rhifau pwynt arnawf heb eu dilysu mewn trinwyr sy'n galw swyddogaethau C gan ddefnyddio'r mecanwaith ctypes . Mae'r broblem hefyd yn effeithio ar ganghennau Python 3.8 a 3.9, ond mae diweddariadau ar eu cyfer yn dal i fod mewn statws ymgeisydd rhyddhau (rhyddhau wedi'i drefnu ar gyfer Mawrth 1).

Achosir y broblem gan orlif byffer yn y ffwythiant ctypes PyCArg_repr(), sy'n digwydd oherwydd defnydd anniogel o sprintf. Yn benodol, i brosesu canlyniad y trawsnewid 'sprintf(buffer, " ", self->tag, self->value.b)' wedi dyrannu byffer statig o 256 beit ("buffer torgoch[256]"), tra gallai'r canlyniad fod yn fwy na'r gwerth hwn. Er mwyn gwirio pa mor agored i niwed yw ceisiadau, gallwch geisio pasio'r gwerth “1e300”, a fydd, o'i brosesu gan y dull c_double.from_param, yn arwain at ddamwain, gan fod y nifer canlyniadol yn cynnwys 308 nod ac nid yw'n ffitio i mewn i un byffer 256-beit. Enghraifft o god problemus: ctypes mewnforio; x = ctypes.c_double.from_param(1e300); cynrychiolydd(x)

Mae'r broblem yn parhau i fod heb ei datrys yn Debian, Ubuntu a FreeBSD, ond mae eisoes wedi'i gosod yn Arch Linux, Fedora, SUSE. Yn RHEL, nid yw'r bregusrwydd yn digwydd oherwydd cydosod pecyn yn y modd FORTIFY_SOURCE, sy'n blocio gorlifoedd byffer o'r fath mewn swyddogaethau llinynnol.

Ffynhonnell: opennet.ru

Ychwanegu sylw