Korrigerande versioner av programmeringsspråket Python 3.7.10 och 3.6.13 finns tillgängliga, vilka åtgärdar en sårbarhet (CVE-2021-3177) som kan leda till kodkörning vid hantering av okontrollerade flyttal i hanterare som anropar C-funktioner med hjälp av ctypes-mekanismen. Problemet påverkar även Python 3.8 och 3.9, men uppdateringar för dem är fortfarande i utgivningskandidatstatus (utgåvan är planerad till 1 mars).
Problemet orsakas av ett buffertöverflöde i ctypes-funktionen PyCArg_repr(), vilket uppstår på grund av osäker användning av sprintf. I synnerhet bearbetningen av resultatet av konverteringen 'sprintf(buffer, « ', self->tag, self->value.b)' allokerade en statisk buffert på 256 byte ('char buffer[256]'), medan resultatet kunde överstiga detta värde. För att testa om en applikation är sårbar kan du försöka skicka värdet '1e300', vilket kommer att krascha när det bearbetas av metoden c_double.from_param, eftersom det resulterande talet innehåller 308 tecken och inte får plats i en buffert på 256 byte. Exempel på problematisk kod: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Problemet förblir olöst i Debian, Ubuntu och FreeBSD, men har redan åtgärdats i Arch Linux, Fedora, SUSE. I RHEL manifesterar sig inte sårbarheten på grund av att paketen byggs i FORTIFY_SOURCE-läge, vilket blockerar sådana buffertöverflöden i strängfunktioner.
Källa: opennet.ru
