Kwetsbaarheid in Python bij het verwerken van niet-gevalideerde fractionele getallen in ctypes

Er zijn corrigerende releases van de Python-programmeertaal 3.7.10 en 3.6.13 beschikbaar, die een kwetsbaarheid (CVE-2021-3177) verhelpen die zou kunnen leiden tot code-uitvoering bij het verwerken van niet-gevalideerde drijvende-kommagetallen in handlers die C-functies aanroepen met behulp van het ctypes-mechanisme . Het probleem treft ook de Python 3.8- en 3.9-takken, maar updates daarvoor hebben nog steeds de status van release candidate (release gepland voor 1 maart).

Het probleem wordt veroorzaakt door een bufferoverloop in de ctypes-functie PyCArg_repr(), die optreedt als gevolg van onveilig gebruik van sprintf. In het bijzonder om het resultaat van de transformatie '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 voor de kwetsbaarheid te controleren, kunt u proberen de waarde “1e300” door te geven, die, wanneer verwerkt door de c_double.from_param-methode, tot een crash zal leiden, aangezien het resulterende getal 308 tekens bevat en niet in een Buffer van 256 bytes. Voorbeeld van problematische code: import ctypes; x = ctypes.c_double.from_param(1e300); herhaling(x)

Het probleem is nog steeds niet opgelost in Debian, Ubuntu en FreeBSD, maar is al opgelost in Arch Linux, Fedora en SUSE. In RHEL treedt het beveiligingslek niet op vanwege pakketassemblage in de FORTIFY_SOURCE-modus, die dergelijke bufferoverflows in stringfuncties blokkeert.

Bron: opennet.ru

Voeg een reactie