Sono disponibili aggiornamenti correttivi per i linguaggi di programmazione Python 3.7.10 e 3.6.13, nei quali è stata risolta una vulnerabilità (CVE-2021-3177) che potrebbe portare all'esecuzione di codice durante l'elaborazione di numeri in virgola mobile non verificati all'interno di gestori che invocano funzioni in C tramite il meccanismo ctypes. Il problema riguarda anche le versioni Python 3.8 e 3.9, ma gli aggiornamenti per queste sono attualmente in fase di rilascio candidato (il rilascio è previsto per il 1 marzo).
Il problema è causato da un overflow del buffer nella funzione ctypes PyCArg_repr(), che si verifica a causa dell'uso potenzialmente non sicuro di sprintf. In particolare, durante l'elaborazione del risultato dell'esecuzione della conversione 'sprintf(buffer, "", self->tag, self->value.b)' è stato allocato un buffer statico di 256 byte ('char buffer[256]'), mentre il risultato potrebbe superare tale valore. Per verificare se le applicazioni sono vulnerabili, si può provare a passare il valore '1e300', che durante l'elaborazione tramite il metodo c_double.from_param causerà un crash, poiché il numero risultante contiene 308 caratteri e non si adatta al buffer da 256 byte. Esempio di codice problematico: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
Il problema rimane irrisolto in Debian, Ubuntu e FreeBSD, ma è già stato corretto in Arch Linux, Fedora e SUSE. In RHEL, la vulnerabilità non si manifesta a causa della compilazione dei pacchetti in modalità FORTIFY_SOURCE, che blocca tali overflow del buffer nelle funzioni di manipolazione delle stringhe.
Fonte: opennet.ru
