Vulnerability w Pythonie, która ujawnia się podczas przetwarzania niezweryfikowanych liczb zmiennoprzecinkowych w ctypes

Dostępne są poprawki języka programowania Python 3.7.10 i 3.6.13, w których usunięto lukę (CVE-2021-3177), mogącą prowadzić do wykonania kodu przy przetwarzaniu niesprawdzonych liczb zmiennoprzecinkowych w handlerach wywołujących funkcje w języku C za pomocą mechanizmu ctypes. Problem ten dotyczy również wersji Python 3.8 i 3.9, jednak aktualizacje dla nich są w stanie kandydata do wydania (premiera planowana na 1 marca).

Problem jest spowodowany przepełnieniem bufora w funkcji ctypes PyCArg_repr(), które występuje z powodu niebezpiecznego użycia sprintf. W szczególności, do obsługi wyniku wykonania konwersji ‘sprintf(buffer, ‘’, self->tag, self->value.b)’ przydzielony został statyczny bufor o rozmiarze 256 bajtów (‘char buffer[256]’), podczas gdy wynik mógł przekroczyć tę wartość. Aby sprawdzić, czy aplikacje są podatne na lukę, można spróbować przekazać wartość ‘1e300’, która przy przetwarzaniu metodą c_double.from_param spowoduje awarię, ponieważ wynikowa liczba zawiera 308 cyfr i nie mieści się w 256-bajtowym buforze. Przykład problematycznego kodu: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problem pozostaje nierozwiązany w Debianie, Ubuntu i FreeBSD, ale już został rozwiązany w Arch Linux, Fedora, SUSE. W RHEL luka nie ujawnia się z powodu kompilacji pakietów w trybie FORTIFY_SOURCE, blokującym podobne przepełnienia bufora w funkcjach łańcuchowych.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster