Sårbarhet i Python vid hantering av ovaliderade bråktal i ctypes

Korrigerande utgåvor av Python-programmeringsspråken 3.7.10 och 3.6.13 är tillgängliga, som åtgärdar en sårbarhet (CVE-2021-3177) som kan leda till kodexekvering vid behandling av ogiltiga flyttal i hanterare som anropar C-funktioner med hjälp av ctypes-mekanismen . Problemet påverkar även Python 3.8- och 3.9-grenarna, men uppdateringar för dem är fortfarande i status som releasekandidat (släpps planerad till 1 mars).

Problemet orsakas av ett buffertspill i ctypes-funktionen PyCArg_repr(), som uppstår på grund av osäker användning av sprintf. I synnerhet för att bearbeta resultatet av transformationen 'sprintf(buffer, " ", self->tag, self->value.b)' tilldelade en statisk buffert på 256 byte ("char buffer[256]"), medan resultatet kunde överskrida detta värde. För att kontrollera applikationernas sårbarhet för sårbarheten kan du prova att skicka värdet "1e300", vilket, när det bearbetas med metoden c_double.from_param, kommer att leda till en krasch, eftersom det resulterande numret innehåller 308 tecken och inte passar in i en 256-byte buffert. Exempel på problematisk kod: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problemet förblir ofixat i Debian, Ubuntu och FreeBSD, men har redan åtgärdats i Arch Linux, Fedora, SUSE. I RHEL uppstår inte sårbarheten på grund av paketmontering i FORTIFY_SOURCE-läge, vilket blockerar sådana buffertspill i strängfunktioner.

Källa: opennet.ru

Lägg en kommentar