Hoʻopilikia i ka Python i ka wā e lawelawe ai i nā helu hakina i hōʻoia ʻole ʻia i nā ctypes

Loaʻa nā hoʻokuʻu hoʻoponopono o ka Python programming language 3.7.10 a me 3.6.13, kahi e hoʻoponopono ai i kahi nāwaliwali (CVE-2021-3177) hiki ke alakaʻi i ka hoʻokō code i ka wā e hoʻoponopono ai i nā helu lana ʻole i nā mea lawelawe e kāhea ana i nā hana C me ka hoʻohana ʻana i nā ctypes mechanical. . Hoʻopilikia pū ka pilikia i nā lālā Python 3.8 a me 3.9, akā ʻo nā mea hou no lākou ke hoʻokuʻu nei i ke kūlana moho (hoʻokuʻu ʻia no Malaki 1).

Hoʻokumu ʻia ka pilikia ma muli o ke kahe ʻana o ka buffer i ka hana ctypes PyCArg_repr(), i loaʻa ma muli o ka hoʻohana pono ʻole o sprintf. ʻO ka mea nui, e hana i ka hopena o ka hoʻololi 'sprintf(buffer, " ", self->tag, self->value.b)' i hoʻokaʻawale i kahi buffer static o 256 bytes ("char buffer[256]"), ʻoiai ʻoi aku ka hopena ma mua o kēia waiwai. No ka nānā ʻana i ka nāwaliwali o nā noi i ka nāwaliwali, hiki iā ʻoe ke hoʻāʻo e hāʻawi i ka waiwai "1e300", i ka wā e hana ʻia ai e ke ʻano c_double.from_param, e alakaʻi i kahi pōʻino, no ka mea he 308 mau huaʻōlelo ka hopena a ʻaʻole kūpono i kahi. 256-byte pale. Ka laʻana o ke code pilikia: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Ke hoʻomau nei ka pilikia ma Debian, Ubuntu a me FreeBSD, akā ua hoʻopaʻa ʻia ma Arch Linux, Fedora, SUSE. Ma RHEL, ʻaʻole i loaʻa ka nāwaliwali ma muli o ka hui pūʻulu ʻana ma ke ʻano FORTIFY_SOURCE, kahi e ālai ai i ka hoʻoheheʻe ʻana o ka buffer i nā hana string.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka