Ranljivost u Pythonu koja se manifestira pri obradi nepregledanih decimalnih brojeva u ctypes

Dostupne su ispravke jezika programiranja Python 3.7.10 i 3.6.13, u kojima je uklonjena ranjivost (CVE-2021-3177) koja može dovesti do izvršenja koda prilikom obrade neprovjerenih brojeva s pomičnom decimalom u rukovaocima koji pozivaju funkcije na jeziku C putem mehanizma ctypes. Problem također zahvaća grane Pythona 3.8 i 3.9, ali su ažuriranja za njih trenutno u statusu kandidata za izdanja (izdanje planirano za 1. ožujka).

Problem je uzrokovan prepunjenjem bafera u ctypes funkciji PyCArg_repr(), koje se javlja zbog nesigurne upotrebe sprintf. Konkretno, za obradu rezultata izvršenja transformacije 'sprintf(buffer, ''', self->tag, self->value.b)' dodijeljen je statički bafer veličine 256 bajtova ('char buffer[256]'), dok bi rezultat mogao premašiti ovu vrijednost. Za provjeru podložnosti aplikacija ranjivosti možete pokušati proslijediti vrijednost '1e300', koja će prilikom obrade metodom c_double.from_param dovesti do rušenja, budući da rezultantni broj sadrži 308 znakova i ne stane u bafer od 256 bajtova. Primjer problematičnog koda: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problem ostaje neispravljen u Debianku, Ubuntuu i FreeBSD-u, ali je već uklonjen u Arch Linuxu, Fedori i SUSE-u. U RHEL-u ranjivost se ne manifestira zbog izrade paketa u režimu FORTIFY_SOURCE, koji blokira takva preopterećenja bafera u funkcijama za rad sa stringovima.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster