Vulnerabilità in Python durante la gestione di numeri frazionari non convalidati nei ctype

Sono disponibili versioni correttive del linguaggio di programmazione Python 3.7.10 e 3.6.13, che risolvono una vulnerabilità (CVE-2021-3177) che potrebbe portare all'esecuzione di codice durante l'elaborazione di numeri in virgola mobile non convalidati nei gestori che chiamano funzioni C utilizzando il meccanismo ctypes . Il problema riguarda anche i rami Python 3.8 e 3.9, ma i relativi aggiornamenti sono ancora in stato di release candidate (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 non sicuro di sprintf. In particolare, per elaborare il risultato della trasformazione 'sprintf(buffer, " ", self->tag, self->value.b)' ha allocato un buffer statico di 256 byte ("char buffer[256]"), mentre il risultato potrebbe superare questo valore. Per verificare la vulnerabilità delle applicazioni alla vulnerabilità, puoi provare a passare il valore "1e300", che, se elaborato dal metodo c_double.from_param, porterà a un arresto anomalo, poiché il numero risultante contiene 308 caratteri e non rientra in un Buffer da 256 byte. Esempio di codice problematico: import ctypes; x = ctypes.c_double.from_param(1e300); rep(x)

Il problema rimane irrisolto in Debian, Ubuntu e FreeBSD, ma è già stato risolto in Arch Linux, Fedora, SUSE. In RHEL, la vulnerabilità non si verifica a causa dell'assemblaggio del pacchetto in modalità FORTIFY_SOURCE, che blocca tali overflow del buffer nelle funzioni di stringa.

Fonte: opennet.ru

Aggiungi un commento