Ranjivost u Pythonu pri rukovanju nepotvrđenim razlomcima u ctypes

Dostupna su korektivna izdanja programskog jezika Python 3.7.10 i 3.6.13, koja popravljaju ranjivost (CVE-2021-3177) koja bi mogla dovesti do izvršavanja koda prilikom obrade nepotvrđenih brojeva s pomičnim zarezom u rukovaocima koji pozivaju C funkcije koristeći mehanizam ctypes . Problem takođe utiče na grane Python 3.8 i 3.9, ali ažuriranja za njih su još uvek u statusu kandidata za izdanje (izdanje je zakazano za 1. mart).

Problem je uzrokovan prelivom bafera u funkciji ctypes PyCArg_repr(), do kojeg dolazi zbog nesigurne upotrebe sprintf-a. Konkretno, za obradu rezultata transformacije 'sprintf(buffer, " ", self->tag, self->value.b)' dodijelio je statički bafer od 256 bajtova ("char buffer[256]"), dok bi rezultat mogao premašiti ovu vrijednost. Da biste provjerili ranjivost aplikacija na ranjivost, možete pokušati proslijediti vrijednost "1e300", koja će, kada se obradi metodom c_double.from_param, dovesti do pada, jer rezultirajući broj sadrži 308 znakova i ne uklapa se u 256-bajtni bafer. Primjer problematičnog koda: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problem ostaje neriješen u Debianu, Ubuntuu i FreeBSD-u, ali je već popravljen u Arch Linuxu, Fedori, SUSE-u. U RHEL-u, ranjivost se ne javlja zbog sastavljanja paketa u FORTIFY_SOURCE modu, koji blokira takva prekoračenja bafera u funkcijama niza.

izvor: opennet.ru

Dodajte komentar