XZ Utils (раніше LZMA Utils ) — це набір програм для стиснення даних без втрат, що працюють з командного рядка. До нього входять програми lzma та xz для Unix-подібних операційних систем, а також починаючи з версії 5.0, для Microsoft Windows. Для стиснення/декомпресії використовується LZMA2.
XZ Utils починався як Unix-порт LZMA SDK розробленого Ігорем Павловим[en] для 7zip. Портування мало на меті адаптувати lzma2 до інтеграції з Unix-подібними програмами та середовищем.
У березні 2024 року в дистрибутиві 5.6 XZ Utils було виявлено бекдор (детальніше далі).[2]
У більшості випадків xz досягає вищого ступеню стиснення, ніж такі альтернативи, як gzip і bzip2. Швидкість декомпресії вища ніж bzip2, але нижча, ніж gzip. Стиснення може бути значно повільнішим, ніж gzip та bzip2, особливо для високих рівнів стиснення. XZ найкраще використовувати, коли швидкість стиснення не така важлива як менший розмір архіву.[3][4]
XZ Utils складається з двох основних компонентів:
Існують різні комбінації команд, наприклад:
lzma
(для xz --format=lzma
)unxz
(для xz --decompress
; аналог gunzip
)xzcat
(для unxz --stdout
; аналог zcat
)Починаючи з версії 5.2.0 (2014 рік) xz підтримує багатопотокове стиснення (опція -T
)[5][6]. Починаючи з версії 5.4.0 реалізована багатопотокова декомпресія.[5]
xz може стискати та розпаковувати як формати файлів .xz, так і .lzma, але оскільки формат .lzma вже застарілий, xz за замовчуванням стискає в .xz.
Розробник lzip розкритикував формат xz як вибір для довготривалого зберігання архівних даних, тому що формат дуже вразливий до таких помилок як пошкодження пам'яті, помилки при читанні, або перегортання бітів.[7]
Задля сумісності з популярними інструментами стиснення UNIX gzip та bzip2, утілити з XZ utils були перероблені так, щоб їх поведінка і властивості формату файлу були схожими.
Подібно до gzip і bzip, xz і lzma можуть стискати лише окремі файли (або потоки даних) як вхідні дані. Вони не можуть об’єднати кілька файлів в один архів – для цього спочатку використовується програма архівування без стиснення, наприклад tar, cpio.
Стиснення архіву:
xz my_archive.tar # створює my_archive.tar.xz lzma my_archive.tar # створює до my_archive.tar.lzma
Розпакування архіву:
unxz my_archive.tar.xz # створює my_archive.tar unlzma my_archive.tar.lzma # створює my_archive.tar
GNU-версія tar починаючи з версії 1.22 має прозору підтримку архівів, стиснутих за допомогою lzma та xz. З'являються опції --xz
або -J
для стиснення xz та --lzma
для стиснення LZMA.
Створення архіву та його стиснення:
tar -c --xz -f мій_архів.tar.xz /деякий_каталог # створює мій_архів.tar.xz tar -c --lzma -f мій_архів.tar.lzma /деякий_каталог # створює мій_архів.tar.lzma
tar -x --xz -f мій_архів.tar.xz # розпаковує /деякий_каталог tar -x --lzma -f мій_архів.tar.lzma # розпаковує /деякий_каталог
tar cJf keep.txz keep # архівує, а потім стискає каталог. /keep/ у файл ./keep.txz tar xJf keep.txz # розпаковує та витягає файл ./keep.txz створює каталог ./keep/
29 березня 2024 року в списку розсилки Openwall було опубліковано тему[8], в який автор дослідив що код liblzma потенційно скомпрометований супроводжувачем. Інциденту було привласнено ідентифікатор CVE-2024-3094 в базі загальних вразливостей і вразливостей
Відомо, що шкідливий код міститься у версіях 5.6.0 і 5.6.1.
Як зазначила компанія Red Hat в повідомленні
Це втручання за відповідних обставин потенційно може дозволити зловмиснику зламати автентифікацію sshd і отримати неавторизований доступ до всієї системи віддалено.[9]
Шкідливий механізм складається з наступних кроків та компонентів:
RSA_public_decrypt
на її шкідливу версію. Зазвичай OpenSSH не завантажує liblzma, але у великій кількості дистрибутивів Linux OpenSSH побудований так, що змушує завантажувати libsystemd, який, у свою чергу завантажує lzma.[10]build-to-host.m4
. Модифікована версія витягує з тестових файлів скрипт, який виконує фактичну ін'єкцію бінарного кода в функцію.[10]liblzma
. Схоже, що файл виконує ін’єкцію лише тоді, коли система, на якій будується є системою x86-64 Linux та використовує glibc, а GCC збирається через dpkg або rpm.[10]Поки що невідомо, чи цей бекдор був навмисно розміщений супроводжувачем, чи супроводжувач був скомпрометований.[11]
Список дистрибутивів Linux на яки це вплинуло це дистрибутиви які мають політику використання найновіших версій бібліотек, такі як Debian unstable [12], Arch Linux [13], Fedora Rawhide [14], Kali Linux [15]. Цей бекдор не був впроваджений в популярних серверних дистрибутивах як Red Hat Enterprise Linux [16], SUSE Linux Enterprise [17], Amazon Linux [18].