Kerentanan ROOT ing kernel Linux lan penolakan layanan ing systemd

Peneliti keamanan saka Qualys wis ngumumake rincian rong kerentanan sing mengaruhi kernel Linux lan manajer sistem sistem. Kerentanan ing kernel (CVE-2021-33909) ngidini pangguna lokal entuk eksekusi kode kanthi hak root liwat manipulasi direktori bersarang banget.

Bebaya kerentanan saya tambah amarga para peneliti bisa nyiapake eksploitasi sing bisa digunakake ing Ubuntu 20.04/20.10/21.04, Debian 11 lan Fedora 34 ing konfigurasi standar. Kacathet yen distribusi liyane durung dites, nanging kanthi teoritis uga rentan kanggo masalah kasebut lan bisa diserang. Kode lengkap eksploitasi dijanjekake bakal diterbitake sawise masalah diilangi ing endi wae, nanging saiki mung ana prototipe fungsi winates, nyebabake sistem kasebut nabrak. Masalah kasebut wis ana wiwit Juli 2014 lan mengaruhi rilis kernel wiwit 3.16. Perbaikan kerentanan dikoordinasi karo komunitas lan ditampa ing kernel tanggal 19 Juli. Distribusi utama wis nggawe nganyari kanggo paket kernel (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Kerentanan kasebut disebabake amarga gagal mriksa asil konversi size_t menyang int sadurunge nindakake operasi ing kode seq_file, sing nggawe file saka urutan rekaman. Gagal mriksa bisa nyebabake tulisan sing metu saka buffer nalika nggawe, masang, lan mbusak struktur direktori banget (ukuran path luwih saka 1 GB). AkibatΓ©, panyerang bisa entuk string 10-byte "//deleted" ditulis ing offset saka "-2 GB - 10 bait" pointing menyang wilayah langsung sadurunge buffer diparengake.

Eksploitasi sing disiapake mbutuhake memori 5 GB lan 1 yuta inode gratis kanggo operate. Eksploitasi dianggo kanthi nelpon mkdir () kanggo nggawe hirarki watara yuta subdirektori kanggo entuk ukuran path file ngluwihi 1 GB. Direktori iki dipasang liwat bind-mount ing spasi jeneng pangguna sing kapisah, sawise fungsi rmdir () mbukak kanggo mbusak. Ing podo karo, benang digawe sing ngemot program eBPF cilik, sing diblokir ing panggung sawise mriksa pseudocode eBPF, nanging sadurunge kompilasi JIT.

Ing ruang jeneng userid sing ora duwe hak istimewa, file /proc/self/mountinfo dibukak lan pathname dawa saka direktori bind-mounted diwaca, nyebabake string "//deleted" ditulis ing area kasebut sadurunge wiwitan buffer. Posisi kanggo nulis baris dipilih supaya nimpa instruksi ing program eBPF sing wis diuji nanging durung dikompilasi.

Sabanjure, ing tingkat program eBPF, tulisan metu-saka-buffer sing ora dikendhaleni diowahi dadi kemampuan sing bisa dikontrol kanggo maca lan nulis menyang struktur kernel liyane liwat manipulasi struktur btf lan map_push_elem. AkibatΓ©, exploit nemtokake lokasi buffer modprobe_path [] ing memori kernel lan nimpa "/ sbin / modprobe" path ing, sing ngijini sampeyan kanggo miwiti Bukak sembarang file eksekusi karo hak ROOT ing acara a request_module () telpon, kang kaleksanan, contone, nalika nggawe netlink soket.

Peneliti nyedhiyakake sawetara solusi sing efektif mung kanggo eksploitasi tartamtu, nanging ora ngilangi masalah kasebut dhewe. Disaranake nyetel "/proc/sys/kernel/unprivileged_userns_clone" dadi 0 kanggo mateni direktori pemasangan ing ruang jeneng ID pangguna sing kapisah, lan "/proc/sys/kernel/unprivileged_bpf_disabled" dadi 1 kanggo mateni loading program eBPF menyang kernel.

Wigati dicathet yen nalika nganalisa serangan alternatif sing nggunakake mekanisme FUSE tinimbang bind-mound kanggo masang direktori gedhe, para peneliti nemokake kerentanan liyane (CVE-2021-33910) sing mengaruhi manajer sistem sistem. Ternyata nalika nyoba masang direktori kanthi ukuran path luwih saka 8 MB liwat FUSE, proses initialization kontrol (PID1) metu saka memori tumpukan lan kacilakan, sing ndadekake sistem kasebut "gupuh".

Masalahe yaiku systemd nglacak lan ngurai isi / proc / self / mountinfo, lan ngolah saben titik gunung ing fungsi unit_name_path_escape (), sing nindakake operasi strdupa () sing nempatake data ing tumpukan tinimbang ing memori sing dialokasiake kanthi dinamis . Wiwit ukuran tumpukan maksimum diwatesi liwat RLIMIT_STACK, ngolah dalan gedhe banget menyang titik gunung nyebabake proses PID1 nabrak lan mungkasi sistem. Kanggo serangan, sampeyan bisa nggunakake modul FUSE paling prasaja ing kombinasi karo nggunakake direktori Highly nested minangka titik gunung, ukuran path kang ngluwihi 8 MB.

Masalah wis katon wiwit systemd 220 (April 2015), wis didandani ing repositori systemd utama lan tetep ing distribusi (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Utamane, ing release systemd 248 eksploitasi ora bisa digunakake amarga bug ing kode systemd sing nyebabake pangolahan /proc/self/mountinfo gagal. Sampeyan uga menarik yen ing 2018, ana kahanan sing padha lan nalika nyoba nulis eksploitasi kanggo kerentanan CVE-2018-14634 ing kernel Linux, peneliti Qualys nemokake telung kerentanan kritis ing systemd.

Source: opennet.ru

Add a comment