Kerentanan kritikal dalam Exim membenarkan kod dilaksanakan pada pelayan sebagai akar

Dalam pelayan mel Exim dikenalpasti kritikal kelemahan (CVE-2019 10149-), yang boleh membawa kepada pelaksanaan kod jauh pada pelayan dengan hak akar apabila memproses permintaan yang dibuat khas. Kemungkinan eksploitasi masalah telah dinyatakan dalam versi dari 4.87 hingga 4.91 inklusif atau apabila membina dengan pilihan EXPERIMENTAL_EVENT.

Dalam konfigurasi lalai, serangan boleh dilakukan tanpa komplikasi yang tidak perlu oleh pengguna tempatan, kerana ACL "sahkan = penerima" digunakan, yang melakukan pemeriksaan tambahan untuk alamat luaran. Serangan jauh boleh berlaku apabila tetapan ditukar, seperti bertindak sebagai MX sekunder untuk domain lain, mengalih keluar ACL "sahkan=penerima" atau perubahan tertentu pada local_part_suffix). Serangan jauh juga boleh dilakukan jika penyerang dapat memastikan sambungan ke pelayan dibuka selama 7 hari (contohnya, menghantar satu bait seminit untuk memintas tamat masa). Pada masa yang sama, ada kemungkinan terdapat vektor serangan yang lebih mudah untuk eksploitasi jauh masalah.

Kerentanan disebabkan oleh pengesahan alamat penerima yang salah dalam fungsi deliver_message() yang ditakrifkan dalam fail /src/deliver.c. Dengan memanipulasi pemformatan alamat, penyerang boleh mencapai penggantian datanya ke dalam hujah perintah yang dipanggil melalui fungsi execv() dengan hak akar. Operasi tidak memerlukan penggunaan teknik kompleks yang digunakan untuk limpahan penimbal atau kerosakan memori; penggantian aksara mudah sudah memadai.

Masalahnya berkaitan dengan penggunaan konstruk untuk penukaran alamat:

deliver_localpart = kembangkan_string(
string_sprintf("${local_part:%s}", baru->alamat));
deliver_domain = kembangkan_string(
string_sprintf("${domain:%s}", baru->alamat));

Fungsi expand_string() ialah penggabung yang terlalu rumit, termasuk mengenali perintah "${run{command arguments}", yang membawa kepada pelancaran pengendali luaran. Oleh itu, untuk menyerang dalam sesi SMTP, pengguna tempatan hanya perlu menghantar arahan seperti 'RCPT TO β€œusername+${run{...}}@localhost”', di mana localhost ialah salah satu hos daripada senarai local_domains, dan nama pengguna ialah nama pengguna tempatan sedia ada.

Jika pelayan berfungsi sebagai penyampai mel, cukup untuk menghantar arahan 'RCPT KEPADA "${run{...}}@relaydomain.com" dari jauh, di mana relaydomain.com ialah salah satu hos yang disenaraikan dalam relay_to_domains bahagian tetapan. Memandangkan Exim tidak lalai untuk menggugurkan mod keistimewaan (deliver_drop_privilege = false), arahan yang dihantar melalui "${run{...}}" akan dilaksanakan sebagai root.

Perlu diperhatikan bahawa kelemahan itu dihapuskan dalam keluaran 4.92 yang dikeluarkan pada bulan Februari, tanpa menekankan bahawa pembetulan itu mungkin membawa kepada masalah keselamatan. Tidak ada sebab untuk mempercayai bahawa terdapat penyembunyian yang sengaja tentang kelemahan oleh pembangun Exim, kerana masalah itu telah dibetulkan semasa pembetulan kegagalan yang berlaku apabila alamat yang salah dihantar, dan kelemahan telah dikenal pasti oleh Qualys semasa audit perubahan dalam Exim.

Pembetulan untuk versi terdahulu yang terus digunakan dalam pengedaran pada masa ini hanya tersedia sebagai tampalan. Keluaran pembetulan untuk cawangan sebelumnya untuk menyelesaikan masalah dijadualkan pada 11 Jun. Kemas kini pakej sedia untuk Debian, Ubuntu, openSUSE. Arch Linux ΠΈ Fedora Mereka membekalkan versi 4.92, di mana masalah tidak muncul. Masalah RHEL dan CentOS tidak terdedah, kerana Exim tidak termasuk dalam repositori pakej biasa mereka.

Sumber: opennet.ru

Tambah komen