Sono stati pubblicati aggiornamenti correttivi per l'interprete Perl 5.40.2 e 5.38.4, che risolvono una vulnerabilità (CVE-2024-56406) che porta a un overflow del buffer durante la traslitterazione di caratteri non ASCII formattati specificamente utilizzando l'operatore «tr/../../». Non si esclude la possibilità di sfruttare la vulnerabilità per eseguire codice arbitrario nel sistema. Il problema si manifesta nelle versioni stabili di Perl a partire dal 2021 e interessa i rami Perl 5.34, 5.36, 5.38 e 5.40. Si possono monitorare le risoluzioni delle vulnerabilità nei seguenti repository: Debian, Ubuntu, Fedora, Arch, FreeBSD. Le distribuzioni basate su RHEL 9, SUSE 15 e openSUSE Leap 15.6 non sono vulnerabili, poiché includono le versioni di Perl 5.32 e 5.26.
La vulnerabilità riguarda i programmi che utilizzano dati esterni non verificati nella parte sinistra dell'operatore «tr», dove viene specificata una variabile con i dati per la sostituzione dei caratteri (ad esempio, «$external_string =~ tr/a/b/»). Nella funzione che supporta l'operatore S_do_trans_invmap(), durante l'elaborazione di alcuni byte non ASCII si verifica un accesso alla memoria al di fuori del buffer allocato. L'overflow si verifica perché alcune sequenze di byte nel set di dati originale possono essere convertite in sequenze UTF-8, che richiedono due byte anziché uno.
È notevole che la vulnerabilità sia emersa a seguito di una modifica apportata nel 2020 che rimuoveva un'ulteriore verifica della sufficienza dell'allocazione di memoria, sotto il pretesto che durante il calcolo delle dimensioni era sufficiente arrotondare per eccesso. Per controllare la presenza della vulnerabilità, è possibile eseguire il seguente codice: perl -e ‘$_ = «\x{FF}» x 1000000; tr/\xFF/\x{100}/;’ Segmentation fault (core dumped)
Fonte: opennet.ru
