Python ievainojamība, apstrādājot nevalidētus daļskaitļus ctypes

Ir pieejami koriģējošie Python programmēšanas valodas 3.7.10 un 3.6.13 laidieni, kas novērš ievainojamību (CVE-2021-3177), kas var izraisīt koda izpildi, apstrādājot nevalidētus peldošā komata skaitļus apdarinātājos, kas izsauc C funkcijas, izmantojot ctypes mehānismu. . Problēma skar arī Python 3.8 un 3.9 filiāles, taču to atjauninājumi joprojām ir izlaiduma kandidāta statusā (izlaide plānota 1. martā).

Problēmu izraisa bufera pārpilde ctypes funkcijā PyCArg_repr(), kas rodas nedrošas sprintf lietošanas dēļ. Jo īpaši, lai apstrādātu transformācijas rezultātu 'sprintf(buffer, " ", self->tag, self->value.b)" piešķīra 256 baitu statisko buferi ("char buffer[256]"), savukārt rezultāts varētu pārsniegt šo vērtību. Lai pārbaudītu lietojumprogrammu ievainojamību ievainojamībai, varat mēģināt nodot vērtību “1e300”, kas, apstrādājot ar metodi c_double.from_param, izraisīs avāriju, jo iegūtais skaitlis satur 308 rakstzīmes un neietilpst 256 baitu buferis. Problemātiskā koda piemērs: importēt ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problēma joprojām nav novērsta Debian, Ubuntu un FreeBSD, bet jau ir novērsta Arch Linux, Fedora, SUSE. RHEL ievainojamība nerodas pakotņu montāžas dēļ režīmā FORTIFY_SOURCE, kas bloķē šādas bufera pārpildes virknes funkcijās.

Avots: opennet.ru

Pievieno komentāru