Публикувани са коригиращи обновления на интерпретатора 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
