Vulnérabilité dans Python lors de la gestion de nombres fractionnaires non validés dans les ctypes

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

Ajouter un commentaire