Kerentanan akar dina kernel Linux sareng panolakan jasa dina systemd

Panaliti kaamanan ti Qualys parantos ngungkabkeun detil ngeunaan dua kerentanan anu mangaruhan kernel Linux sareng manajer sistem systemd. A kerentanan dina kernel (CVE-2021-33909) ngamungkinkeun pamaké lokal pikeun ngahontal palaksanaan kode jeung hak root ngaliwatan manipulasi diréktori kacida nested.

Bahaya kerentanan ieu diperparah ku kanyataan yén panaliti tiasa nyiapkeun eksploitasi kerja anu dianggo dina Ubuntu 20.04/20.10/21.04, Debian 11 sareng Fedora 34 dina konfigurasi standar. Ieu dicatet yén sebaran séjén teu acan diuji, tapi sacara téoritis ogé rentan ka masalah jeung bisa diserang. Kodeu pinuh ku eksploitasi dijanjikeun bakal diterbitkeun saatos masalahna dileungitkeun dimana-mana, tapi ayeuna ngan ukur prototipe fungsionalitas terbatas anu sayogi, nyababkeun sistem nabrak. Masalahna parantos aya ti saprak Juli 2014 sareng mangaruhan sékrési kernel mimitian ti 3.16. Perbaikan kerentanan dikoordinasikeun sareng komunitas sareng ditampi kana kernel dina 19 Juli. Distribusi utama parantos ngahasilkeun apdet kana bungkusan kernel na (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

Kerentanan disababkeun ku gagalna mariksa hasil ukuran_t kana konversi int sateuacan ngajalankeun operasi dina kode seq_file, anu nyiptakeun file tina sekuen rékaman. Gagalna mariksa tiasa nyababkeun tulisan kaluar ka panyangga nalika nyiptakeun, dipasang, sareng ngahapus struktur diréktori anu sarang pisan (ukuran jalur langkung ageung ti 1 GB). Hasilna, panyerang bisa ngahontal 10-bait string "//dihapus" ditulis dina hiji offset tina "-2 GB - 10 bait" nunjuk ka wewengkon geuwat saméméh panyangga disadiakeun.

Eksploitasi anu disiapkeun butuh mémori 5 GB sareng 1 juta inode gratis pikeun beroperasi. Eksploitasi jalan ku nelepon mkdir () pikeun nyieun hirarki ngeunaan sajuta subdirectories pikeun ngahontal ukuran jalur file ngaleuwihan 1 GB. diréktori ieu dipasang via bind-Gunung dina spasi ngaran pamaké misah, nu satutasna fungsi rmdir () dijalankeun pikeun nyabut eta. Dina paralel, thread dijieun nu beban program eBPF leutik, nu diblokir di panggung sanggeus mariksa pseudocode eBPF, tapi saméméh kompilasi JIT na.

Dina namespace userid unprivileged, file /proc/self/mountinfo dibuka sarta pathname panjang tina diréktori mengikat-dipasang dibaca, hasilna string "//dihapus" keur ditulis ka wewengkon saméméh mimiti panyangga. Posisi pikeun nulis garis dipilih supados nimpa instruksi dina program eBPF anu parantos diuji tapi henteu acan disusun.

Salajengna, dina tingkat program eBPF, uncontrolled out-of-buffer writing ditransformasikeun kana kamampuhan dikawasa maca jeung nulis kana struktur kernel séjén ngaliwatan manipulasi btf jeung map_push_elem struktur. Hasilna, eksploitasi nangtukeun lokasi panyangga modprobe_path [] dina mémori kernel sareng nimpa jalur "/ sbin / modprobe" di jerona, anu ngamungkinkeun anjeun ngamimitian peluncuran file anu tiasa dieksekusi kalayan hak akar upami aya. request_module () nelepon, nu dieksekusi, Contona, nalika nyieun netlink stop kontak.

Peneliti nyadiakeun sababaraha workarounds nu mujarab ngan pikeun mangpaatkeun husus, tapi teu ngaleungitkeun masalah sorangan. Disarankeun pikeun nyetel "/proc/sys/kernel/unprivileged_userns_clone" ka 0 pikeun nganonaktipkeun diréktori dipasang dina spasi ngaran pamaké ID misah, sarta "/proc/sys/kernel/unprivileged_bpf_disabled" ka 1 pikeun nganonaktipkeun loading program eBPF kana kernel.

Éta noteworthy yén bari analisa hiji serangan alternatif ngalibetkeun pamakéan mékanisme FUSE tinimbang meungkeut-gundukan mun Gunung diréktori badag, peneliti datang di sakuliah kerentanan sejen (CVE-2021-33910) mangaruhan manajer sistem systemd. Tétéla yén nalika nyobian masang diréktori kalayan ukuran jalur anu langkung ti 8 MB via FUSE, prosés initialization kontrol (PID1) kaluar tina mémori tumpukan sareng ngadat, anu nempatkeun sistem dina kaayaan "panik".

Masalahna nyaéta systemd ngalacak sareng ngémutan eusi /proc/self/mountinfo, sareng ngolah unggal titik gunung dina fungsi unit_name_path_escape (), anu ngalaksanakeun operasi strdupa () anu nempatkeun data dina tumpukan tinimbang dina mémori anu dialokasikeun sacara dinamis. . Kusabab ukuran tumpukan maksimum diwatesan via RLIMIT_STACK, ngolah badag teuing jalur ka titik Gunung ngabalukarkeun prosés PID1 ngadat jeung ngeureunkeun sistem. Pikeun serangan, anjeun tiasa nganggo modul FUSE pangbasajanna dina kombinasi kalayan ngagunakeun diréktori kacida nested salaku titik Gunung, ukuran jalur nu ngaleuwihan 8 MB.

Masalahna parantos muncul ti saprak systemd 220 (April 2015), parantos dibenerkeun dina gudang systemd utama sareng dibereskeun dina distribusi (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Utamana, dina release systemd 248 eksploitasi henteu jalan kusabab bug dina kode systemd anu nyababkeun ngolah /proc/self/mountinfo gagal. Éta ogé pikaresepeun yén dina 2018, kaayaan anu sami timbul sareng nalika nyobian nyerat eksploitasi pikeun kerentanan CVE-2018-14634 dina kernel Linux, peneliti Qualys mendakan tilu kerentanan kritis dina systemd.

sumber: opennet.ru

Tambahkeun komentar