Kerentanan kritis di Exim yang memungkinkan kode dieksekusi di server dengan hak akses root

Di server email Exim diidentifikasi еская kerentanan (CVE-2019-10149), yang dapat menyebabkan eksekusi kode jarak jauh di server dengan hak root saat memproses permintaan yang dibuat khusus. Kemungkinan eksploitasi masalah dicatat dalam versi inklusif 4.87 hingga 4.91 atau saat membangun dengan opsi EXPERIMENTAL_EVENT.

Dalam konfigurasi default, serangan dapat dilakukan tanpa komplikasi yang tidak perlu oleh pengguna lokal, karena ACL “verifikasi = penerima” diterapkan, yang melakukan pemeriksaan tambahan untuk alamat eksternal. Serangan jarak jauh dapat terjadi ketika pengaturan diubah, seperti bertindak sebagai MX sekunder untuk domain lain, menghapus ACL "verify=recipient", atau perubahan tertentu pada local_part_suffix). Serangan jarak jauh juga mungkin terjadi jika penyerang mampu menjaga koneksi ke server tetap terbuka selama 7 hari (misalnya, mengirimkan satu byte per menit untuk melewati batas waktu). Pada saat yang sama, ada kemungkinan bahwa terdapat vektor serangan yang lebih sederhana untuk eksploitasi masalah dari jarak jauh.

Kerentanan ini disebabkan oleh kesalahan verifikasi alamat penerima dalam fungsi delivery_message() yang ditentukan dalam file /src/deliver.c. Dengan memanipulasi pemformatan alamat, penyerang dapat mengganti datanya ke dalam argumen perintah yang dipanggil melalui fungsi execv() dengan hak root. Pengoperasiannya tidak memerlukan penggunaan teknik rumit yang digunakan untuk buffer overflows atau kerusakan memori; substitusi karakter sederhana sudah cukup.

Masalahnya terkait dengan penggunaan konstruk untuk konversi alamat:

kirim_localpart = perluas_string(
string_sprintf("${local_part:%s}", baru->alamat));
kirim_domain = perluas_string(
string_sprintf("${domain:%s}", baru->alamat));

Fungsi expand_string() adalah penggabung yang terlalu rumit, termasuk mengenali perintah “${run{command argument}”, yang mengarah pada peluncuran pengendali eksternal. Jadi, untuk menyerang dalam sesi SMTP, pengguna lokal hanya perlu mengirimkan perintah seperti 'RCPT TO “username+${run{...}}@localhost”', dengan localhost adalah salah satu host dari daftar local_domains, dan nama pengguna adalah nama pengguna lokal yang ada.

Jika server berfungsi sebagai relay email, cukup mengirimkan perintah 'RCPT TO "${run{...}}@relaydomain.com"' dari jarak jauh, di mana relaydomain.com adalah salah satu host yang terdaftar di relay_to_domains bagian pengaturan. Karena Exim tidak secara default menghapus mode hak istimewa (deliver_drop_privilege = false), perintah yang diteruskan melalui "${run{...}}" akan dieksekusi sebagai root.

Patut dicatat bahwa ada kerentanan dihilangkan dalam rilis 4.92 yang dirilis pada bulan Februari, tanpa menekankan bahwa perbaikan tersebut dapat menyebabkan masalah keamanan. Tidak ada alasan untuk percaya bahwa ada penyembunyian kerentanan yang disengaja oleh pengembang Exim, karena masalah telah diperbaiki selama perbaikan kegagalan yang terjadi ketika alamat yang salah dikirimkan, dan kerentanan diidentifikasi oleh Qualys selama audit perubahan di Exim.

Perbaikan untuk versi sebelumnya yang terus digunakan dalam distribusi saat ini hanya tersedia sebagai tambalan. Rilis korektif untuk cabang sebelumnya untuk memperbaiki masalah dijadwalkan pada 11 Juni. Pembaruan paket sudah siap Debian, Ubuntu, openSUSE. Arch Linux и Fedora Mereka menyediakan versi 4.92, di mana masalah tidak muncul. Masalah RHEL dan CentOS tidak rentan, karena Exim tidak disertakan dalam repositori paket regulernya.

Sumber: opennet.ru

Tambah komentar