Des versions correctives du langage de programmation Python 3.7.10 et 3.6.13 sont disponibles, qui corrigent une vulnérabilité (CVE-2021-3177) qui pourrait conduire à l'exécution de code lors du traitement de nombres à virgule flottante non validés dans les gestionnaires qui appellent des fonctions C à l'aide du mécanisme ctypes. . Le problème affecte également les branches Python 3.8 et 3.9, mais leurs mises à jour sont toujours au statut de release candidate (sortie prévue pour le 1er mars).
Le problème est dû à un débordement de tampon dans la fonction ctypes PyCArg_repr(), qui se produit en raison d'une utilisation dangereuse de sprintf. En particulier, pour traiter le résultat de la transformation 'sprintf(buffer, " ", self->tag, self->value.b)' a alloué un tampon statique de 256 octets ("char buffer[256]"), alors que le résultat pouvait dépasser cette valeur. Pour vérifier la vulnérabilité des applications à la vulnérabilité, vous pouvez essayer de transmettre la valeur « 1e300 », qui, une fois traitée par la méthode c_double.from_param, entraînera un crash, car le nombre résultant contient 308 caractères et ne rentre pas dans un Tampon de 256 octets. Exemple de code problématique : import ctypes ; x = ctypes.c_double.from_param(1e300); représentation(x)
Le problème n'est toujours pas résolu dans Debian, Ubuntu et FreeBSD, mais a déjà été résolu dans Arch Linux, Fedora, SUSE. Dans RHEL, la vulnérabilité ne se produit pas en raison de l'assemblage de packages en mode FORTIFY_SOURCE, qui bloque de tels débordements de tampon dans les fonctions de chaîne.
Source: opennet.ru