Korrigerande versioner av programmeringsspråket Python 3.7.10 och 3.6.13 är tillgängliga, där en sårbarhet (CVE-2021-3177) har åtgärdats, vilket kan leda till kodexekvering vid hantering av icke kontrollerade flyttal i funktioner som anropar C-funktioner via ctypes-mekanismen. Problemet påverkar även versioner av Python 3.8 och 3.9, men uppdateringar för dessa är ännu i kandidatstatus (lansering planerad till den 1 mars).
Problemet orsakas av en buffertöverskridning i ctypes-funktionen PyCArg_repr(), som uppstår på grund av osäker användning av sprintf. Specifikt tilldelades ett statiskt buffert utrymme om 256 byte (‘char buffer[256]’) för att hantera resultatet av konverteringen ‘sprintf(buffer, “”, self->tag, self->value.b)’, när resultatet kunde överskrida detta värde. För att kontrollera om applikationer är sårbara kan man försöka överföra värdet “1e300”, vilket med c_double.from_param kommer att orsaka krasch eftersom det resulterande talet innehåller 308 tecken och inte får plats i en 256-byte buffert. Exempel på problematisk kod: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Problemet kvarstår olöst i Debian, Ubuntu och FreeBSD, men har redan åtgärdats i Arch Linux, Fedora, SUSE. I RHEL uppträder inte sårbarheten på grund av paketbygge i FORTIFY_SOURCE-läge, vilket blockerar sådana buffertöverskridningar i strängfunktioner.
Källa: opennet.ru
