Er zijn nu corrigerende releases van Python 3.7.10 en 3.6.13 beschikbaar, die een kwetsbaarheid (CVE-2021-3177) verhelpen die kon leiden tot code-uitvoering bij het verwerken van ongecontroleerde floating-point getallen in handlers die C-functies aanroepen met behulp van het ctypes-mechanisme. Het probleem heeft ook betrekking op Python 3.8 en 3.9, maar updates hiervoor bevinden zich momenteel in de status release candidate (de release is gepland voor 1 maart).
Het probleem wordt veroorzaakt door een bufferoverloop in de PyCArg_repr() ctypes-functie, die optreedt als gevolg van onveilig gebruik van sprintf. Meer specifiek, de verwerking van het resultaat van de 'sprintf(buffer, " ', self->tag, self->value.b)' heeft een statische buffer van 256 bytes toegewezen ("char buffer[256]"), terwijl het resultaat deze waarde zou kunnen overschrijden. Om de kwetsbaarheid van applicaties te testen, kunt u proberen de waarde "1e300" door te geven. Wanneer deze waarde wordt verwerkt door de methode c_double.from_param, leidt dit tot een crash, omdat het resulterende getal 308 cijfers bevat en niet in een buffer van 256 bytes past. Een voorbeeld van problematische code: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Het probleem is nog steeds niet opgelost in Debian, Ubuntu en FreeBSD, maar is al verholpen in Arch. LinuxFedora en SUSE. In RHEL komt de kwetsbaarheid niet aan het licht omdat de pakketten in FORTIFY_SOURCE-modus worden gebouwd, wat dergelijke bufferoverloop in stringfuncties blokkeert.
Bron: opennet.ru
