Chyba zabezpečení v Pythonu při zpracování neověřených zlomkových čísel v ctypech

K dispozici jsou opravná vydání programovacího jazyka Python 3.7.10 a 3.6.13, která opravují zranitelnost (CVE-2021-3177), která by mohla vést ke spuštění kódu při zpracování neověřených čísel s pohyblivou řádovou čárkou v obslužných programech, které volají funkce C pomocí mechanismu ctypes. . Problém se týká také větví Python 3.8 a 3.9, ale aktualizace pro ně jsou stále ve stavu kandidáta na vydání (vydání je naplánováno na 1. března).

Problém je způsoben přetečením vyrovnávací paměti ve funkci ctypes PyCArg_repr(), ke kterému dochází kvůli nebezpečnému použití sprintf. Zejména ke zpracování výsledku transformace 'sprintf(buffer, " ", self->tag, self->value.b)" přidělil statický buffer o velikosti 256 bajtů ("char buffer[256]"), přičemž výsledek mohl tuto hodnotu překročit. Chcete-li zkontrolovat zranitelnost aplikací vůči této zranitelnosti, můžete zkusit předat hodnotu „1e300“, která při zpracování metodou c_double.from_param povede k havárii, protože výsledné číslo obsahuje 308 znaků a nevejde se do 256bajtová vyrovnávací paměť. 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 Linux, Fedora, SUSE. V RHEL se chyba zabezpečení nevyskytuje kvůli sestavení balíčku v režimu FORTIFY_SOURCE, který blokuje takové přetečení vyrovnávací paměti ve funkcích řetězců.

Zdroj: opennet.ru

Přidat komentář