Já estão disponíveis as versões corretivas do Python 3.7.10 e 3.6.13, que resolvem uma vulnerabilidade (CVE-2021-3177) que poderia levar à execução de código ao lidar com números de ponto flutuante não verificados em manipuladores que chamam funções C usando o mecanismo ctypes. O problema também afeta o Python 3.8 e 3.9, mas as atualizações para essas versões estão atualmente em fase de lançamento candidato (o lançamento está previsto para 1º de março).
O problema é causado por um estouro de buffer na função ctypes PyCArg_repr(), que ocorre devido ao uso inseguro de sprintf. Especificamente, o processamento do resultado de 'sprintf(buffer, " O método `c_double.from_param` aloca um buffer estático de 256 bytes ("char buffer[256]"), enquanto o resultado pode exceder esse valor. Para testar a vulnerabilidade de aplicações, você pode tentar passar o valor "1e300", que, quando processado pelo método `c_double.from_param`, causará uma falha, já que o número resultante contém 308 dígitos e não cabe em um buffer de 256 bytes. Um exemplo de código problemático: `import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)`
O problema permanece sem solução em Debian, Ubuntu e FreeBSD, mas já foi corrigido no Arch. Linux, Fedora, SUSE. No RHEL, a vulnerabilidade não se manifesta devido aos pacotes serem compilados no modo FORTIFY_SOURCE, que bloqueia esses estouros de buffer em funções de string.
Fonte: opennet.ru
