Kerentanan yang boleh dieksploitasi dari jauh dalam pelayan mel qmail

Penyelidik keselamatan dari Qualys menunjukkan peluang Operasi kelemahan dalam pelayan mel qmail, terkenal kembali pada tahun 2005 (CVE-2005-1513), tetapi kekal tidak ditambal kerana pengarang qmail berhujah bahawa adalah tidak realistik untuk mencipta eksploitasi kerja yang boleh digunakan untuk menyerang sistem dalam konfigurasi lalai. Qualys dapat menyediakan eksploitasi yang menyangkal andaian ini dan membenarkan seseorang untuk memulakan pelaksanaan kod jauh pada pelayan dengan menghantar mesej yang direka khas.

Masalahnya disebabkan oleh limpahan integer dalam fungsi stralloc_readyplus(), yang boleh berlaku apabila memproses mesej yang sangat besar. Operasi memerlukan sistem 64-bit dengan lebih daripada 4GB memori maya. Apabila kelemahan asalnya dianalisis pada tahun 2005, Daniel J. Bernstein berhujah bahawa andaian dalam kod bahawa saiz tatasusunan yang diperuntukkan sentiasa dalam nilai 32-bit adalah berdasarkan fakta bahawa tiada siapa yang menyediakan memori gigabait untuk setiap proses. Sepanjang 15 tahun yang lalu, sistem 64-bit pada pelayan telah menggantikan sistem 32-bit, dan jumlah memori yang dibekalkan dan lebar jalur rangkaian telah meningkat secara mendadak.

Penyelenggara pakej qmail mengambil kira nota Bernstein dan mengehadkan memori yang tersedia apabila memulakan proses qmail-smtpd (contohnya, dalam Debian 10 had ditetapkan kepada 7MB). Tetapi jurutera dari Qualys mendapati bahawa ini tidak mencukupi dan, sebagai tambahan kepada qmail-smtpd, serangan jauh boleh dilakukan pada proses qmail-local, yang kekal tidak terhad dalam semua pakej yang diuji. Sebagai bukti, prototaip eksploitasi telah disediakan yang sesuai untuk menyerang pakej Debian dengan qmail dalam konfigurasi lalai.
Untuk mengatur pelaksanaan kod jauh semasa serangan, pelayan memerlukan 4GB ruang cakera kosong dan 8GB RAM.
Eksploit membolehkan anda menjalankan sebarang arahan shell dengan hak mana-mana pengguna dalam sistem, kecuali pengguna root dan sistem yang tidak mempunyai subdirektori mereka sendiri dalam direktori "/home" (proses qmail-local dilancarkan dengan hak pengguna tempatan yang kepadanya penghantaran dijalankan).

Serangan dilakukan
melalui penghantaran mesej mel yang sangat besar, termasuk beberapa baris pengepala, berukuran lebih kurang 4GB dan 576MB. Memproses rentetan sedemikian dalam qmail-local menghasilkan limpahan integer apabila cuba menghantar mesej kepada pengguna tempatan. Limpahan integer kemudiannya membawa kepada limpahan penimbal apabila menyalin data dan kemungkinan menimpa halaman memori dengan kod libc. Dengan memanipulasi susun atur data yang dihantar, ia juga mungkin untuk menulis semula alamat fungsi "open()", menggantikannya dengan alamat fungsi "system()".

Seterusnya, dalam proses memanggil qmesearch() dalam qmail-local, fail ".qmail-extension" dibuka melalui fungsi open(), yang membawa kepada pelaksanaan sebenar fungsi
sistem(".qmail-extension"). Tetapi memandangkan bahagian "sambungan" fail dijana berdasarkan alamat penerima (contohnya, "pengguna tempatan-sambungan@domaintempatan"), penyerang boleh mengatur supaya perintah itu dihantar untuk dijalankan dengan menyatakan pengguna "pengguna tempatan-;perintah ;@localdomain” sebagai penerima mesej.

Semasa analisis kod, dua kelemahan juga dikenal pasti dalam tampung pengesahan qmail tambahan, yang merupakan sebahagian daripada pakej untuk Debian. Kerentanan pertama (CVE-2020 3811-) membolehkan anda memintas pengesahan alamat e-mel, dan yang kedua (CVE-2020 3812-) membawa kepada kebocoran maklumat tempatan. Khususnya, kelemahan pertama membolehkan anda memintas pengesahan ketepatan alamat yang digunakan dalam eksploit untuk menghantar arahan (pengesahan tidak berfungsi untuk alamat tanpa domain, seperti "pengguna tempatan-;perintah;"). Kerentanan kedua boleh digunakan untuk menyemak kehadiran fail dan direktori pada sistem, termasuk yang hanya boleh diakses oleh root (qmail-verify berjalan dengan hak root), melalui panggilan terus kepada pengendali tempatan.

Untuk mengatasi masalah tersebut, Bernstein mengesyorkan menjalankan proses qmail dengan jumlah had pada memori yang tersedia ("softlimit -m12345678"), dalam hal ini masalah disekat. Sebagai kaedah perlindungan alternatif, mengehadkan saiz maksimum mesej yang diproses melalui fail "kawalan/bait data" juga disebut (secara lalai ia tidak dibuat dengan tetapan lalai qmail kekal terdedah). Selain itu, "kawalan/bait data" tidak melindungi daripada serangan tempatan daripada pengguna sistem, kerana had hanya diambil kira oleh qmail-smtpd.

Masalahnya menjejaskan pakej netqmail, termasuk dalam repositori Debian. Satu set patch telah disediakan untuk pakej ini, menghapuskan kedua-dua kelemahan lama dari 2005 (dengan menambahkan had memori keras pada kod fungsi alloc()) dan masalah baharu dalam qmail-verify. Secara berasingan disediakan versi kemas kini tampung qmail-verify. pemaju cawangan notqmail menyediakan patch mereka sendiri untuk menyekat masalah lama, dan juga mula berusaha untuk menghapuskan semua kemungkinan limpahan integer dalam kod.

Sumber: opennet.ru

Tambah komen