Уязвимость затрагивает программы, использующие непроверенные внешние данные в левой части оператора "tr", в которой указывается переменная с данными для замены символов (например, "$external_string =~ tr/a/b/"). В обеспечивающей работу оператора функции S_do_trans_invmap() при обработке некоторых не-ASCII байтов происходит обращение к памяти вне выделенного буфера. Переполнение возникает из-за того, что некоторые последовательности байтов в исходном наборе данных могут быть преобразованы в последовательности UTF-8, для которых требуется два байта вместо одного.
Примечательно, что уязвимость возникла после добавленного в 2020 году изменения, убирающего дополнительную проверку достаточного выделения памяти под предлогом того, что при расчёте размера можно обойтись округлением размера в большую сторону. Для проверки наличия уязвимости можно выполнить код:
Код:
perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;'
Segmentation fault (core dumped)
Источник: https://www.opennet.ru/opennews/art.shtml?num=63068
(opennet.ru, основная лента)