Vulnerabilidade en Python ao manexar números fraccionarios non validados en ctypes

Están dispoñibles versións correctivas da linguaxe de programación Python 3.7.10 e 3.6.13, que corrixen unha vulnerabilidade (CVE-2021-3177) que podería levar á execución de código ao procesar números de coma flotante non validados en controladores que chaman a funcións C mediante o mecanismo ctypes. . O problema tamén afecta ás ramas de Python 3.8 e 3.9, pero as actualizacións para elas aínda están en estado de candidato á versión (lanzamento programado para o 1 de marzo).

O problema é causado por un desbordamento do búfer na función ctypes PyCArg_repr(), que ocorre debido ao uso non seguro de sprintf. En particular, para procesar o resultado da transformación 'sprintf(buffer, " ", self->tag, self->value.b)' asignou un búfer estático de 256 bytes ("car buffer[256]"), mentres que o resultado podería superar este valor. Para comprobar a vulnerabilidade das aplicacións á vulnerabilidade, pode tentar pasar o valor "1e300", que, cando se procesa polo método c_double.from_param, provocará un fallo, xa que o número resultante contén 308 caracteres e non encaixa nun Buffer de 256 bytes. Exemplo de código problemático: importar ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

O problema segue sen solucionarse en Debian, Ubuntu e FreeBSD, pero xa se solucionou en Arch Linux, Fedora, SUSE. En RHEL, a vulnerabilidade non se produce debido á montaxe do paquete no modo FORTIFY_SOURCE, que bloquea tales desbordamentos do búfer nas funcións de cadea.

Fonte: opennet.ru

Engadir un comentario