Kwesbaarheid in Python wanneer ongevalideerde breukgetalle in ctypes hanteer word

Korrektiewe vrystellings van die Python-programmeertaal 3.7.10 en 3.6.13 is beskikbaar, wat 'n kwesbaarheid (CVE-2021-3177) regstel wat kan lei tot kode-uitvoering wanneer ongevalideerde drywende punt-nommers verwerk word in hanteerders wat C-funksies oproep deur die ctypes-meganisme te gebruik . Die probleem raak ook die Python 3.8- en 3.9-takke, maar opdaterings daarvoor is steeds in vrystellingskandidaatstatus (vrystelling geskeduleer vir 1 Maart).

Die probleem word veroorsaak deur 'n bufferoorloop in die ctypes-funksie PyCArg_repr(), wat voorkom as gevolg van onveilige gebruik van sprintf. In die besonder, om die resultaat van die transformasie 'sprintf(buffer, " te verwerk ", self->tag, self->value.b)' het 'n statiese buffer van 256 grepe ("char buffer[256]") toegeken, terwyl die resultaat hierdie waarde kan oorskry. Om die kwesbaarheid van toepassings vir die kwesbaarheid na te gaan, kan jy probeer om die waarde "1e300" deur te gee, wat, wanneer dit deur die c_double.from_param-metode verwerk word, tot 'n ineenstorting sal lei, aangesien die gevolglike getal 308 karakters bevat en nie in 'n 256-grepe buffer. Voorbeeld van problematiese kode: invoer ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Die probleem bly onopgelos in Debian, Ubuntu en FreeBSD, maar is reeds reggestel in Arch Linux, Fedora, SUSE. In RHEL vind die kwesbaarheid nie plaas nie as gevolg van pakketsamestelling in FORTIFY_SOURCE-modus, wat sulke bufferoorvloeie in stringfunksies blokkeer.

Bron: opennet.ru

Voeg 'n opmerking