Публикувани са коригиращи актуализации на интерпретатора Perl 5.40.2 и 5.38.4, в които е отстранена уязвимост (CVE-2024-56406), водеща до преливане на буфера при транслитерация на специално форматирани не-ASCII символи с помощта на оператора „tr/.../...“. Не се изключва възможността за експлоатация на уязвимостта с цел изпълнение на собствен код в системата. Проблемът се проявява в стабилни версии на Perl от 2021 година насам и засяга клоновете Perl 5.34, 5.36, 5.38 и 5.40. Можете да следите отстраняването на уязвимостта в дистрибутивите на следните страници: Debian, Ubuntu, Fedora, Arch, FreeBSD. Дистрибутивите, базирани на RHEL 9, SUSE 15 и openSUSE Leap 15.6, не са податливи на уязвимостта, тъй като включват версии Perl 5.32 и 5.26.
Уязвимостта засяга програми, използващи непроверени външни данни в лявата част на оператора „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)
Източник: opennet.ru
