Vulnerabilidad en Python al manejar números fraccionarios no validados en ctypes

Están disponibles las versiones correctivas del lenguaje de programación Python 3.7.10 y 3.6.13, que corrigen una vulnerabilidad (CVE-2021-3177) que podría provocar la ejecución de código al procesar números de coma flotante no validados en controladores que llaman a funciones C utilizando el mecanismo ctypes. . El problema también afecta a las ramas Python 3.8 y 3.9, pero las actualizaciones para ellas aún se encuentran en estado de candidato de lanzamiento (lanzamiento programado para el 1 de marzo).

El problema es causado por un desbordamiento del búfer en la función ctypes PyCArg_repr(), que ocurre debido al uso inseguro de sprintf. En particular, para procesar el resultado de la transformación 'sprintf(buffer, " ", self->tag, self->value.b)' asignó un búfer estático de 256 bytes ("char buffer[256]"), mientras que el resultado podría exceder este valor. Para verificar la vulnerabilidad de las aplicaciones a la vulnerabilidad, puede intentar pasar el valor "1e300", que, cuando se procesa con el método c_double.from_param, provocará un bloqueo, ya que el número resultante contiene 308 caracteres y no cabe en un Búfer de 256 bytes. Ejemplo de código problemático: importar ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

El problema sigue sin solucionarse en Debian, Ubuntu y FreeBSD, pero ya se ha solucionado en Arch Linux, Fedora, SUSE. En RHEL, la vulnerabilidad no ocurre debido al ensamblaje del paquete en modo FORTIFY_SOURCE, que bloquea dichos desbordamientos del búfer en funciones de cadena.

Fuente: opennet.ru

Añadir un comentario