Opublikowano wydanie pakietu XZ Utils 5.8.1, które zawiera bibliotekę liblzma oraz narzędzia do obsługi skompresowanych danych w formacie '.xz'. XZ Utils 5.8.1 jest pierwszym znaczącym wydaniem po incydencie związanym z odkryciem backdoora umożliwiającego dostęp przez sshd. W zeszłym tygodniu w Git stworzono znacznik 5.8.0, ale wydanie nie zostało ogłoszone oficjalnie ze względu na problemy z wydajnością i zgodnością ze starszymi wersjami GNU make, które ujawniono po publikacji znacznika.
W aktualizacji XZ Utils 5.8.1 rozwiązano problem (CVE-2025-31115), który prowadził do awarii podczas próby dekompresji specjalnie stworzonych archiwów. Luka bezpieczeństwa była spowodowana dostępem do już zwolnionego obszaru pamięci (use after free). Atakujący może uzyskać zapis swoich wartości pod adresem obliczanym jako 'wskaźnik zerowy + przesunięcie'. Problem jest traktowany jako niezamierzony błąd, ponieważ zmiana, która go spowodowała, została wprowadzona do kodu na długo przed przybyciem do projektu dewelopera Jia Tan, którego działalność doprowadziła do wprowadzenia backdoora.
Problem ujawnia się od wydania XZ Utils 5.3.3alpha podczas dekodowania w trybie wielowątkowym (problem nie dotyczy jednoprocesorowego dekodera). Oprócz standardowych narzędzi w pakiecie xz, luka ujawnia się także w zewnętrznych programach korzystających z funkcji lzma_stream_decoder_mt z biblioteki liblzma. Luka została usunięta w wydaniu XZ Utils 5.8.1 oraz przeniesiona do stabilnych gałęzi 5.4 i 5.6. Aktualizacje w dystrybucjach można śledzić na następujących stronach: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Jako rozwiązanie można wyłączyć dekodowanie plików w trybie wielowątkowym, używając opcji '—decompress —threads=1' podczas uruchamiania xz lub korzystając z narzędzia xzdec.
Wśród zmian funkcjonalnych w gałęzi XZ Utils 5.8 można zauważyć:
- Do dekodera LZMA/LZMA2 dodano możliwość wykorzystania instrukcji SSE2 zamiast funkcji memcpy() w systemach 32- i 64-bitowych x86. Zmiana ta pozwoliła na skrócenie czasu dekodowania o 5% przy kompilacji z Glibc i o 15% przy kompilacji z musl przy rozpakowywaniu plików o bardzo wysokim poziomie kompresji.
- W liblzma zwiększono szybkość kodowania w 64-bitowych systemach PowerPC i RISC-V.
- W lzma/bcj.h dodano niskopoziomowe API filtrów BCJ (Branch/Call/Jump) dla systemów RISC-V, ARM64 i x86.
- Przepisano kod obliczania CLMUL CRC dla systemów x86, x86-64 i E2K.
- Na platformach z procesorami LoongArch wykorzystano instrukcje do przyspieszenia obliczeń sum kontrolnych CRC32.
- W narzędziu «xz» zapewniono wywołanie funkcji fsync() do opróżnienia pamięci podręcznych plików dla wynikowego pliku przed usunięciem pliku źródłowego. Aby wyłączyć synchronizację przed usunięciem, wprowadzono opcję «—no-sync».
- W narzędziach xz, xzdec i lzmainfo przy wyświetlaniu informacji na ekranie zapewniono zamianę nieczytelnych znaków na znak zapytania.
- W xz i xzdec na platformie Linux wprowadzono wsparcie dla wersji 5 i 6 mechanizmu Landlock w celu izolacji procesu.
- Dodano skrypt do sprawdzania licencji build-aux/license-check.sh.
- Ogłoszono za przestarzałe skrypty lzcmp, lzdiff, lzless, lzmore, lzgrep, lzegrep i lzfgrep, zrealizowane jako nadbudowy nad narzędziem xz.
Źródło: opennet.ru
