Zraniteľnosť v Pythone pri spracovaní nevalidovaných zlomkových čísel v typoch ctype

K dispozícii sú opravné vydania programovacieho jazyka Python 3.7.10 a 3.6.13, ktoré opravujú zraniteľnosť (CVE-2021-3177), ktorá by mohla viesť k spusteniu kódu pri spracovaní nevalidovaných čísel s pohyblivou rádovou čiarkou v obslužných programoch, ktoré volajú funkcie C pomocou mechanizmu ctypes. . Problém sa týka aj vetiev Pythonu 3.8 a 3.9, no aktualizácie pre ne sú stále v stave kandidáta na vydanie (vydanie je naplánované na 1. marca).

Problém je spôsobený pretečením vyrovnávacej pamäte vo funkcii ctypes PyCArg_repr(), ku ktorému dochádza v dôsledku nebezpečného používania sprintf. Najmä na spracovanie výsledku transformácie 'sprintf(buffer, " ", self->tag, self->value.b)" pridelil statickú vyrovnávaciu pamäť 256 bajtov ("char buffer[256]"), pričom výsledok mohol prekročiť túto hodnotu. Ak chcete skontrolovať zraniteľnosť aplikácií voči tejto zraniteľnosti, môžete skúsiť zadať hodnotu „1e300“, ktorá pri spracovaní metódou c_double.from_param povedie k zlyhaniu, pretože výsledné číslo obsahuje 308 znakov a nezmestí sa do 256-bajtová vyrovnávacia pamäť. Príklad problematického kódu: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problém zostáva neopravený v Debiane, Ubuntu a FreeBSD, ale už bol opravený v Arch Linux, Fedora, SUSE. V RHEL sa zraniteľnosť nevyskytuje kvôli zostaveniu balíka v režime FORTIFY_SOURCE, ktorý blokuje takéto pretečenie vyrovnávacej pamäte v reťazcových funkciách.

Zdroj: opennet.ru

Pridať komentár