Kijöttek a Perl 5.40.2 és 5.38.4 fordító frissítései, amelyek orvosolják a (CVE-2024-56406) sebezhetőséget, amely puffer-túlcsordulást okozhat a speciálisan formázott nem-ASCII karakterek transzliterálása során a «tr/.../.../» operátor használatakor. Nem zárható ki annak a lehetősége, hogy a sebezhetőséggel visszaélve saját kódot futtathassanak a rendszeren. A probléma a Perl stabil kiadásaiban 2021 óta megjelenik, és a Perl 5.34, 5.36, 5.38 és 5.40 ágakat érinti. A sebezhetőség kijavítását a következő disztribúciókban lehet nyomon követni: Debian, Ubuntu, Fedora, Arch, FreeBSD. Az RHEL 9, SUSE 15 és openSUSE Leap 15.6 alapú disztribúciók nem érzékenyek a sebezhetőségre, mivel Perl 5.32 és 5.26 verziókat tartalmaznak.
A sebezhetőség azokkal a programokkal kapcsolatos, amelyek nem ellenőrzött külső adatokat használnak a «tr» operátor bal oldalán, ahol egy változóban meg van határozva a karakterek cseréjéhez szükséges adat (például «$external_string =~ tr/a/b/»). Az operátort kiszolgáló S_do_trans_invmap() függvényben, bizonyos nem-ASCII bájtok feldolgozása során memória-területet is elérünk a lefoglalt pufferen kívül. A puffer-túlcsordulás azért következik be, mert az adatforrásban szereplő egyes bájt-sorozatok UTF-8 sorozatokká alakulhatnak, amelyekhez egy bájt helyett két bájt szükséges.
Érdekes, hogy a sebezhetőség egy 2020-ban bevezetett módosítás után keletkezett, amely eltávolította a memória elegendő lefoglalására irányuló további ellenőrzést azzal az indokkal, hogy a méret kiszámításához elegendő a méret felfelé kerekítése. A sebezhetőség ellenőrzésére a következő kódot futtathatjuk: perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' Szegmensképzési hiba (core dumped)
Forrás: opennet.ru
