Luka w Pythonie podczas obsługi niezweryfikowanych liczb ułamkowych w typach c

Dostępne są wersje korygujące języka programowania Python 3.7.10 i 3.6.13, które naprawiają lukę (CVE-2021-3177), która może prowadzić do wykonania kodu podczas przetwarzania niezatwierdzonych liczb zmiennoprzecinkowych w programach obsługi wywołujących funkcje C przy użyciu mechanizmu ctypes . Problem dotyczy także gałęzi Pythona 3.8 i 3.9, ale aktualizacje dla nich nadal mają status Release Candidate (wydanie zaplanowano na 1 marca).

Problem jest spowodowany przepełnieniem bufora w funkcji ctypes PyCArg_repr(), które występuje w wyniku niebezpiecznego użycia sprintf. W szczególności, aby przetworzyć wynik transformacji 'sprintf(bufor, " ", self->tag, self->value.b)' przydzielono bufor statyczny o wielkości 256 bajtów („char bufor[256]"), podczas gdy wynik może przekroczyć tę wartość. Aby sprawdzić podatność aplikacji na lukę, możesz spróbować przekazać wartość „1e300”, która po przetworzeniu metodą c_double.from_param doprowadzi do awarii, ponieważ wynikowa liczba zawiera 308 znaków i nie mieści się w Bufor 256-bajtowy. Przykład problematycznego kodu: import ctypes; x = ctypes.c_double.from_param(1e300); powtórzenie(x)

Problem pozostaje nierozwiązany w Debianie, Ubuntu i FreeBSD, ale został już naprawiony w Arch Linux, Fedorze i SUSE. W RHEL podatność nie występuje ze względu na montaż pakietu w trybie FORTIFY_SOURCE, który blokuje takie przepełnienia bufora w funkcjach łańcuchowych.

Źródło: opennet.ru

Dodaj komentarz