Er zijn correcties beschikbaar voor de programmeertaal Python 3.7.10 en 3.6.13, waarin een kwetsbaarheid (CVE-2021-3177) is verholpen, die kan leiden tot code-executie bij het verwerken van onbetrouwbare drijvende getallen in handlers die functies aanroepen in C via de ctypes-mechanisme. Het probleem betreft ook de versies Python 3.8 en 3.9, maar updates voor deze versies zijn nog in een release-kandidatenstatus (release gepland op 1 maart).
Het probleem wordt veroorzaakt door een bufferoverflow in de ctypes-functie PyCArg_repr(), die optreedt door het onveilige gebruik van sprintf. In het bijzonder werd een statische buffer van 256 bytes ('char buffer[256]') gereserveerd voor het verwerken van de uitvoer van de conversie 'sprintf(buffer, "", self->tag, self->value.b)', terwijl het resultaat groter dan deze waarde kon zijn. Om de kwetsbaarheid van applicaties te controleren, kan geprobeerd worden om de waarde '1e300' door te geven, wat bij verwerking met de methode c_double.from_param tot een crash leidt, omdat het resulterende getal 308 cijfers bevat en niet in de buffer van 256 bytes past. Voorbeeld van problematische code: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Het probleem is nog steeds onoplosbaar in Debian, Ubuntu en FreeBSD, maar is al verholpen in Arch Linux, Fedora, SUSE. In RHEL manifesteert de kwetsbaarheid zich niet vanwege de pakketassemblage in de modus FORTIFY_SOURCE, die dergelijke bufferoverflows in stringfuncties blokkeert.
Bron: opennet.ru
