Atualizações corretivas para os intérpretes Perl 5.40.2 e 5.38.4 foram publicadas, corrigindo a vulnerabilidade (CVE-2024-56406) que causa transbordamento de buffer ao transliterar caracteres não ASCII formatados de forma especial usando o operador "tr/.../...". Existe a possibilidade de exploração da vulnerabilidade para executar código arbitrário no sistema. O problema ocorre nas versões estáveis do Perl a partir de 2021 e afeta os ramos Perl 5.34, 5.36, 5.38 e 5.40. As distribuições podem acompanhar a correção da vulnerabilidade nas seguintes páginas: Debian, Ubuntu, Fedora, Arch, FreeBSD. As distribuições baseadas em RHEL 9, SUSE 15 e openSUSE Leap 15.6 não são vulneráveis, pois incluem as versões Perl 5.32 e 5.26.
A vulnerabilidade afeta programas que utilizam dados externos não validados no lado esquerdo do operador "tr", onde uma variável com os dados para substituição de caracteres é especificada (por exemplo, "$external_string =~ tr/a/b/"). Na função S_do_trans_invmap() que permite o funcionamento do operador, ao processar determinados bytes não ASCII, ocorre uma referência à memória fora do buffer alocado. O transbordamento ocorre porque algumas sequências de bytes no conjunto de dados de origem podem ser convertidas em sequências UTF-8, as quais requerem dois bytes em vez de um.
É notável que a vulnerabilidade surgiu após a mudança implementada em 2020 que eliminou a verificação adicional para garantia de alocação de memória suficiente, sob a justificativa de que o arredondamento do tamanho para cima é suficiente durante o cálculo. Para verificar a presença da vulnerabilidade, você pode executar o código: perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/; ' Segmentation fault (core dumped)
Fonte: opennet.ru
