Vulnerabilitatea în Python la manipularea numerelor fracționale nevalidate în ctypes

Sunt disponibile versiuni corective ale limbajului de programare Python 3.7.10 și 3.6.13, care remediază o vulnerabilitate (CVE-2021-3177) care ar putea duce la executarea codului la procesarea numerelor în virgulă mobilă nevalidate în handlere care apelează funcții C folosind mecanismul ctypes. . Problema afectează, de asemenea, ramurile Python 3.8 și 3.9, dar actualizările pentru acestea sunt încă în stare de candidat la lansare (lansare programată pentru 1 martie).

Problema este cauzată de o depășire a tamponului în funcția ctypes PyCArg_repr(), care apare din cauza utilizării nesigure a sprintf. În special, pentru a procesa rezultatul transformării 'sprintf(buffer, " ", self->tag, self->value.b)' a alocat un buffer static de 256 de octeți ("char buffer[256]"), în timp ce rezultatul ar putea depăși această valoare. Pentru a verifica vulnerabilitatea aplicațiilor la vulnerabilitate, puteți încerca să treceți valoarea „1e300”, care, atunci când este procesată prin metoda c_double.from_param, va duce la o blocare, deoarece numărul rezultat conține 308 caractere și nu se încadrează într-un tampon de 256 de octeți. Exemplu de cod problematic: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problema rămâne nerezolvată în Debian, Ubuntu și FreeBSD, dar a fost deja rezolvată în Arch Linux, Fedora, SUSE. În RHEL, vulnerabilitatea nu apare din cauza asamblarii pachetelor în modul FORTIFY_SOURCE, care blochează astfel de depășiri de buffer în funcțiile șir.

Sursa: opennet.ru

Adauga un comentariu