Des mises à jour correctives pour les versions 3.7.10 et 3.6.13 du langage de programmation Python sont disponibles, corrigent une vulnérabilité (CVE-2021-3177) pouvant entraîner l'exécution de code lors du traitement de nombres à virgule flottante non vérifiés dans des gestionnaires appelant des fonctions en C via le mécanisme ctypes. Le problème concerne également les versions Python 3.8 et 3.9, mais des mises à jour pour celles-ci sont encore en phase de version candidate (la sortie est prévue pour le 1er mars).
Le problème est causé par un dépassement de tampon dans la fonction ctypes PyCArg_repr(), résultant d'une utilisation non sécurisée de sprintf. En particulier, un tampon statique de 256 octets (« char buffer[256] ») a été alloué pour traiter le résultat de l'exécution de la conversion ‘sprintf(buffer, «<cparam ‘%c’ (%d)>», self->tag, self->value.b)’, alors que le résultat pouvait dépasser cette taille. Pour vérifier si les applications sont vulnérables, vous pouvez essayer de passer la valeur « 1e300 », qui provoquera un crash lors du traitement avec c_double.from_param, car le nombre résultant contient 308 chiffres et ne tient pas dans un tampon de 256 octets. Exemple de code problématique : import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Le problème reste non corrigé dans Debian, Ubuntu et FreeBSD, mais a déjà été résolu dans Arch Linux, Fedora, SUSE. Dans RHEL, la vulnérabilité ne se manifeste pas en raison de la construction des paquets en mode FORTIFY_SOURCE, qui bloque de tels dépassements de tampon dans les fonctions de chaîne.
Source : opennet.ru
