Kerentanan yang dapat dieksploitasi dari jarak jauh di server email qmail

Peneliti keamanan dari Qualys menunjukkan kesempatan Operasi kerentanan di server email qmail, terkenal pada tahun 2005 (CVE-2005-1513), namun masih belum ditambal karena pembuat qmail berpendapat bahwa tidak realistis untuk membuat eksploitasi yang berfungsi yang dapat digunakan untuk menyerang sistem dalam konfigurasi default. Qualys mampu menyiapkan eksploitasi yang membantah asumsi ini dan memungkinkan seseorang untuk memulai eksekusi kode jarak jauh di server dengan mengirimkan pesan yang dirancang khusus.

Masalah ini disebabkan oleh kelebihan bilangan bulat pada fungsi stralloc_readyplus(), yang dapat terjadi saat memproses pesan yang sangat besar. Pengoperasiannya memerlukan sistem 64-bit dengan memori virtual lebih dari 4 GB. Ketika kerentanan pertama kali dianalisis pada tahun 2005, Daniel J. Bernstein berpendapat bahwa asumsi dalam kode bahwa ukuran array yang dialokasikan selalu dalam nilai 32-bit didasarkan pada fakta bahwa tidak ada yang menyediakan memori gigabyte untuk setiap proses. Selama 15 tahun terakhir, sistem 64-bit di server telah menggantikan sistem 32-bit, dan jumlah memori yang disediakan serta bandwidth jaringan telah meningkat secara dramatis.

Pengelola paket qmail mempertimbangkan catatan Bernstein dan membatasi memori yang tersedia saat memulai proses qmail-smtpd (misalnya, di Debian 10 batasnya disetel ke 7MB). Namun para insinyur dari Qualys menemukan bahwa ini tidak cukup dan, selain qmail-smtpd, serangan jarak jauh dapat dilakukan pada proses qmail-local, yang tetap tidak dibatasi di semua paket yang diuji. Sebagai buktinya, telah disiapkan prototype eksploit yang cocok untuk menyerang paket Debian dengan qmail pada konfigurasi default.
Untuk mengatur eksekusi kode jarak jauh selama serangan, server memerlukan ruang disk kosong sebesar 4 GB dan RAM 8 GB.
Eksploitasi memungkinkan Anda menjalankan perintah shell apa pun dengan hak pengguna mana pun di sistem, kecuali untuk pengguna root dan sistem yang tidak memiliki subdirektori sendiri di direktori “/home” (proses qmail-local diluncurkan dengan hak dari pengguna lokal kepada siapa pengiriman dilakukan).

Serangan itu dilakukan
melalui pengiriman pesan email yang sangat besar, termasuk beberapa baris header, berukuran sekitar 4GB dan 576MB. Memproses string seperti itu di qmail-local menghasilkan integer overflow ketika mencoba mengirimkan pesan ke pengguna lokal. Overflow integer kemudian menyebabkan buffer overflow saat menyalin data dan kemungkinan menimpa halaman memori dengan kode libc. Dengan memanipulasi tata letak data yang dikirimkan, dimungkinkan juga untuk menulis ulang alamat fungsi “open()”, menggantinya dengan alamat fungsi “system()”.

Selanjutnya, dalam proses pemanggilan qmesearch() di qmail-local, file “.qmail-extension” dibuka melalui fungsi open(), yang mengarah ke eksekusi fungsi yang sebenarnya
sistem(".qmail-ekstensi"). Namun karena bagian “ekstensi” file dibuat berdasarkan alamat penerima (misalnya, “localuser-extension@localdomain”), penyerang dapat mengatur agar perintah dikirim agar dijalankan dengan menentukan pengguna “localuser-;command ;@localdomain” sebagai penerima pesan.

Selama analisis kode, dua kerentanan juga diidentifikasi dalam patch verifikasi qmail tambahan, yang merupakan bagian dari paket untuk Debian. Kerentanan pertama (CVE-2020-3811) memungkinkan Anda melewati verifikasi alamat email, dan yang kedua (CVE-2020-3812) menyebabkan kebocoran informasi lokal. Secara khusus, kerentanan pertama memungkinkan Anda untuk melewati verifikasi kebenaran alamat yang digunakan dalam eksploitasi untuk mengirim perintah (verifikasi tidak berfungsi untuk alamat tanpa domain, seperti “localuser-;command;”). Kerentanan kedua dapat digunakan untuk memeriksa keberadaan file dan direktori pada sistem, termasuk yang hanya dapat diakses oleh root (qmail-verify dijalankan dengan hak root), melalui panggilan langsung ke pengendali lokal.

Untuk mengatasi masalah ini, Bernstein merekomendasikan untuk menjalankan proses qmail dengan batas total memori yang tersedia (“softlimit -m12345678”), dalam hal ini masalah akan diblokir. Sebagai metode perlindungan alternatif, pembatasan ukuran maksimum pesan yang diproses melalui file “control/databytes” juga disebutkan (secara default tidak dibuat dengan pengaturan default qmail tetap rentan). Selain itu, "kontrol/databytes" tidak melindungi terhadap serangan lokal dari pengguna sistem, karena batasnya hanya diperhitungkan oleh qmail-smtpd.

Masalahnya mempengaruhi paket netqmail, termasuk dalam repositori Debian. Serangkaian tambalan telah disiapkan untuk paket ini, menghilangkan kerentanan lama dari tahun 2005 (dengan menambahkan batas memori keras ke kode fungsi alloc()) dan masalah baru di verifikasi qmail. Terpisah siap versi terbaru dari patch verifikasi qmail. Pengembang ranting bukanqmail menyiapkan tambalan mereka sendiri untuk memblokir masalah lama, dan juga mulai bekerja untuk menghilangkan semua kemungkinan integer overflows dalam kode.

Sumber: opennet.ru

Tambah komentar