È stato pubblicato il 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 è stato il primo rilascio significativo dopo l'incidente legato alla scoperta di un backdoor che organizzava l'accesso tramite sshd. La scorsa settimana è stato creato un tag 5.8.0 in Git, ma il rilascio non è stato annunciato ufficialmente a causa dei problemi di prestazioni e compatibilità con le vecchie versioni di GNU make, emersi dopo la pubblicazione del tag.
Nell'aggiornamento XZ Utils 5.8.1 è stata risolta una vulnerabilità (CVE-2025-31115) che causava il crash durante il tentativo di estrazione di archivi appositamente formattati. La vulnerabilità è causata da un accesso a una porzione di memoria già liberata (use after free). Un attaccante può riuscire a scrivere il proprio valore all'indirizzo calcolato come «puntatore nullo + offset». Il problema è considerato un errore involontario, poiché la modifica che lo ha generato è stata apportata al codice molto prima che il progettista Jia Tan entrasse nel progetto, le cui attività hanno portato all'introduzione del backdoor.
Il problema si manifesta a partire dal rilascio di XZ Utils 5.3.3alpha durante la decodifica in modalità multi-thread (la questione non coinvolge i decodificatori single-thread). Oltre agli strumenti standard del pacchetto xz, la vulnerabilità si manifesta anche in programmi di terze parti che utilizzano la funzione lzma_stream_decoder_mt della libreria liblzma. La vulnerabilità è stata risolta nella versione XZ Utils 5.8.1 e trasferita anche nei rami stabili 5.4 e 5.6. È possibile monitorare gli aggiornamenti nei pacchetti distribuiti 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 di xz le opzioni «—decompress —threads=1» o applicando lo strumento xzdec.
Tra le modifiche funzionali nella versione XZ Utils 5.8 si possono notare:
- Nel decodificatore LZMA/LZMA2 è stata aggiunta la possibilità di utilizzare istruzioni SSE2 al posto della funzione memcpy() su sistemi x86 a 32 e 64 bit. Questa modifica ha consentito di ridurre il tempo di decodifica fino al 5% durante la compilazione con Glibc e fino al 15% durante la compilazione con musl quando si estraggono file con un livello di compressione molto elevato.
- Nella liblzma è stata aumentata la velocità di codifica sui sistemi a 64 bit PowerPC e RISC-V.
- Nel file lzma/bcj.h è stata aggiunta un'API a basso livello per filtri BCJ (Branch/Call/Jump) per sistemi RISC-V, ARM64 e x86.
- È stato riscritto il codice per il calcolo del CRC CLMUL per i sistemi x86, x86-64 ed E2K.
- Sulle piattaforme con processori LoongArch sono state implementate istruzioni per velocizzare il calcolo dei checksum CRC32.
- Nell'utilità «xz» è stata assicurata la chiamata della funzione fsync() per svuotare le cache dei file per il file risultante prima di eliminare il file originale. Per disattivare la sincronizzazione prima dell'eliminazione è stata implementata l'opzione «—no-sync».
- Negli strumenti xz, xzdec e lzmainfo, durante la visualizzazione delle informazioni sullo schermo, è stata garantita la sostituzione dei caratteri non stampabili con il punto interrogativo.
- In xz e xzdec, sulla piattaforma Linux, è stato implementato il supporto per le 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, realizzati come estensioni dell'utilità xz.
Fonte: opennet.ru
