K dispozici jsou opravy programovacího jazyka Python 3.7.10 a 3.6.13, ve kterých byla opravena zranitelnost (CVE-2021-3177), která může vést k provedení kódu při zpracování neověřených čísel s plovoucí desetinnou čárkou v režisrech, které vyvolávají funkce napsané v jazyce C pomocí mechanismu ctypes. Tento problém se také týká verzí Python 3.8 a 3.9, ale aktualizace pro ně jsou zatím ve stavu kandidáta na uvolnění (uvolnění je plánováno na 1. března).
Problém je způsoben přetečením vyrovnávací paměti ve funkci ctypes PyCArg_repr(), které vzniká kvůli nebezpečnému použití sprintf. Konkrétně na zpracování výsledku funkce "sprintf(buffer, "", self->tag, self->value.b)" byl vyhrazen statický vyrovnávací prostor o velikosti 256 bajtů ("char buffer[256]"), přičemž výsledek mohl tuto hodnotu překročit. Pro kontrolu zranitelnosti aplikací lze zkusit předat hodnotu "1e300", která při zpracování metodou c_double.from_param způsobí pád, protože výsledné číslo obsahuje 308 znaků a nevejde se do 256-bajtového vyrovnávacího prostoru. Příklad problematického kódu: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Problém zůstává neopraven v Debianu, Ubuntu a FreeBSD, ale již byl opraven v Arch Linuxu, Fedoře a SUSE. Ve RHEL se zranitelnost neprojevuje kvůli sestavení balíčků v režimu FORTIFY_SOURCE, který blokuje taková přetečení vyrovnávací paměti ve funkcích pro manipulaci s řetězci.
Zdroj: opennet.ru
