È stato pubblicato il rilascio del pacchetto XZ Utils 5.8.1, che include la libreria liblzma e strumenti per lavorare con dati compressi nel formato '.xz'. XZ Utils 5.8.1 rappresenta il primo rilascio significativo dopo l'incidente legato alla scoperta di un backdoor che permetteva l'accesso tramite sshd. La scorsa settimana è stato creato in Git il tag 5.8.0, ma il rilascio non è stato annunciato ufficialmente a causa di problemi di prestazioni e compatibilità con le versioni precedenti di GNU make emersi dopo la pubblicazione del tag.
Nell'aggiornamento XZ Utils 5.8.1 è stata risolta una vulnerabilità (CVE-2025-31115) che portava a un crash quando si cercava di estrarre archivi appositamente formati. Questa vulnerabilità era causata da un accesso a una zona di memoria già liberata (use after free). Un attaccante potrebbe ottenere la scrittura del proprio valore all'indirizzo calcolato come 'puntatore nullo + offset'. Si considera che il problema sia stato causato da un errore non intenzionale, poiché la modifica che ha provocato il problema è stata introdotta nel codice molto prima dell'arrivo del sviluppatore Jia Tan, il cui operato ha portato all'inserimento del backdoor.
Il problema si manifesta a partire dalla versione XZ Utils 5.3.3alpha durante la decodifica in modalità multi-thread (il decodificatore in single-thread non è interessato). Oltre agli strumenti standard del pacchetto xz, la vulnerabilità si presenta anche in programmi di terze parti che utilizzano la funzione lzma_stream_decoder_mt della libreria liblzma. La vulnerabilità è stata risolta nel rilascio di XZ Utils 5.8.1 ed è stata trasferita anche nei rami stabili 5.4 e 5.6. È possibile seguire le aggiornamenti nei vari distribuzioni sulle seguenti pagine: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Come soluzione alternativa per la protezione, è possibile disabilitare la decodifica di file in modalità multi-thread, utilizzando al lancio xz le opzioni '--decompress --threads=1' o utilizzando l'utility xzdec.
Tra le modifiche funzionali nella serie XZ Utils 5.8 si possono notare:
- È stata aggiunta nel decodificatore LZMA/LZMA2 la possibilità di utilizzare istruzioni SSE2 al posto della funzione memcpy() su sistemi x86 a 32 e 64 bit. Questa modifica ha permesso di ridurre il tempo di decodifica fino al 5% con la compilazione con Glibc e fino al 15% con la compilazione con musl durante l'estrazione di file con un elevato livello di compressione.
- In liblzma è stata aumentata la velocità di codifica su sistemi PowerPC e RISC-V a 64 bit.
- In lzma/bcj.h è stato aggiunto un API low-level per i filtri BCJ (Branch/Call/Jump) per i sistemi RISC-V, ARM64 e x86.
- Il codice per il calcolo del CRC CLMUL per i sistemi x86, x86-64 ed E2K è stato riscritto.
- Su piattaforme con processori LoongArch sono state utilizzate istruzioni per accelerare il calcolo dei checksum CRC32.
- Nell'utility 'xz' è stata garantita la chiamata della funzione fsync() per svuotare i cache dei file per il file risultante prima della cancellazione del file sorgente. Per disabilitare la sincronizzazione prima della cancellazione è stata implementata l'opzione '--no-sync'.
- Nelle utility xz, xzdec e lzmainfo, durante l'output di informazioni a schermo, è stata assicurata la sostituzione dei caratteri non stampabili con un punto interrogativo.
- In xz e xzdec sulla piattaforma Linux è stata implementata la supporto delle versioni 5 e 6 del meccanismo Landlock per l'isolamento del processo.
- È stato aggiunto uno script per il controllo delle licenze build-aux/license-check.sh.
- Sono stati dichiarati obsoleti gli script lzcmp, lzdiff, lzless, lzmore, lzgrep, lzegrep e lzfgrep, implementati come wrapper per l'utility xz.
Fonte: opennet.ru
