Ranljivost v Pythonu pri obravnavanju nepreverjenih ulomkov v ctypes

Na voljo sta popravni izdaji programskega jezika Python 3.7.10 in 3.6.13, ki odpravljata ranljivost (CVE-2021-3177), ki bi lahko vodila do izvajanja kode pri obdelavi neveljavnih števil s plavajočo vejico v obdelovalcih, ki kličejo funkcije C z uporabo mehanizma ctypes . Težava vpliva tudi na veji Python 3.8 in 3.9, vendar so posodobitve zanju še vedno v statusu kandidata za izdajo (izdaja je načrtovana za 1. marec).

Težavo povzroča prekoračitev medpomnilnika v funkciji ctypes PyCArg_repr(), do katere pride zaradi nevarne uporabe sprintf. Zlasti za obdelavo rezultata transformacije 'sprintf(buffer, " ", self->tag, self->value.b)" je dodelil statični medpomnilnik 256 bajtov ("char buffer[256]"), medtem ko bi lahko rezultat presegel to vrednost. Če želite preveriti ranljivost aplikacij za ranljivost, lahko poskusite posredovati vrednost »1e300«, ki bo pri obdelavi z metodo c_double.from_param povzročila zrušitev, saj dobljeno število vsebuje 308 znakov in se ne prilega v 256-bajtni medpomnilnik. Primer problematične kode: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Težava ostaja neodpravljena v Debianu, Ubuntuju in FreeBSD, vendar je že odpravljena v Arch Linuxu, Fedori in SUSE. V RHEL se ranljivost ne pojavi zaradi sestavljanja paketa v načinu FORTIFY_SOURCE, ki blokira takšne prelive medpomnilnika v funkcijah nizov.

Vir: opennet.ru

Dodaj komentar