Vulnerabilidade em Python ao lidar com números fracionários não validados em ctypes

Estão disponíveis versões corretivas da linguagem de programação Python 3.7.10 e 3.6.13, que corrigem uma vulnerabilidade (CVE-2021-3177) que pode levar à execução de código ao processar números de ponto flutuante não validados em manipuladores que chamam funções C usando o mecanismo ctypes . O problema também afeta as ramificações Python 3.8 e 3.9, mas as atualizações para elas ainda estão no status de release candidate (lançamento agendado para 1º de março).

O problema é causado por um buffer overflow na função ctypes PyCArg_repr(), que ocorre devido ao uso inseguro do sprintf. Em particular, para processar o resultado da transformação 'sprintf(buffer, " ", self->tag, self->value.b)' alocou um buffer estático de 256 bytes ("char buffer[256]"), enquanto o resultado pode exceder esse valor. Para verificar a vulnerabilidade dos aplicativos à vulnerabilidade, você pode tentar passar o valor “1e300”, que, quando processado pelo método c_double.from_param, causará um travamento, pois o número resultante contém 308 caracteres e não cabe em um Buffer de 256 bytes. Exemplo de código problemático: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

O problema permanece sem solução no Debian, Ubuntu e FreeBSD, mas já foi corrigido no Arch Linux, Fedora, SUSE. No RHEL, a vulnerabilidade não ocorre devido à montagem de pacotes no modo FORTIFY_SOURCE, que bloqueia tais buffer overflows em funções de string.

Fonte: opennet.ru

Adicionar um comentário