Sunt disponibile versiuni corective pentru limbajul de programare Python 3.7.10 și 3.6.13, în care a fost remediată vulnerabilitatea (CVE-2021-3177), capabilă să ducă la execuția de cod atunci când se prelucrează numere zecimale nesecurizate în manejere care apelează funcții scrise în C prin mecanismul ctypes. Problema afectează de asemenea versiuni Python 3.8 și 3.9, dar actualizările pentru acestea se află în prezent în stadiul de candidatură pentru lansare (lansarea este planificată pentru 1 martie).
Problema este cauzată de o suprascriere a buffer-ului în funcția ctypes PyCArg_repr(), care apare din utilizarea nesigură a sprintf. În special, pentru a prelucra rezultatul execuției conversiei ‘sprintf(buffer, "", self->tag, self->value.b)’ a fost 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 dacă aplicațiile sunt vulnerabile, se poate încerca să se transfere valoarea „1e300”, care, atunci când este procesată prin metoda c_double.from_param, va conduce la o cădere, deoarece numărul rezultat conține 308 caractere și nu încape în buffer-ul 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 remediată în Arch Linux, Fedora, SUSE. În RHEL, vulnerabilitatea nu se manifestă din cauza construcției pachetelor în modul FORTIFY_SOURCE, care blochează astfel de suprascrieri ale buffer-ului în funcțiile de manipulare a șirurilor de caractere.
Sursa: opennet.ro
