Vulnerabilitat a Python quan es manegen nombres fraccionaris no validats en tipus c

Hi ha disponibles versions correctives del llenguatge de programació Python 3.7.10 i 3.6.13, que solucionen una vulnerabilitat (CVE-2021-3177) que podria provocar l'execució de codi quan es processen números de coma flotant no validats en controladors que criden a funcions C mitjançant el mecanisme ctypes. . El problema també afecta les branques de Python 3.8 i 3.9, però les actualitzacions d'elles encara estan en estat de candidat al llançament (publicació prevista per a l'1 de març).

El problema és causat per un desbordament de memòria intermèdia a la funció ctypes PyCArg_repr(), que es produeix a causa d'un ús no segur de sprintf. En particular, per processar el resultat de la transformació 'sprintf(buffer, " ", self->tag, self->value.b)' va assignar un buffer estàtic de 256 bytes ("car buffer[256]"), mentre que el resultat podria superar aquest valor. Per comprovar la vulnerabilitat de les aplicacions a la vulnerabilitat, podeu provar de passar el valor "1e300", que, quan es processa pel mètode c_double.from_param, provocarà un error, ja que el número resultant conté 308 caràcters i no encaixa en un Buffer de 256 bytes. Exemple de codi problemàtic: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

El problema segueix sense solucionar-se a Debian, Ubuntu i FreeBSD, però ja s'ha solucionat a Arch Linux, Fedora, SUSE. A RHEL, la vulnerabilitat no es produeix a causa del muntatge de paquets en mode FORTIFY_SOURCE, que bloqueja aquests desbordaments de memòria intermèdia a les funcions de cadena.

Font: opennet.ru

Afegeix comentari