Kerentanan di OpenSMTPD yang memungkinkan eksekusi kode jarak jauh dengan hak akses root

Di server email yang dikembangkan oleh proyek OpenBSD BukaSMTPD diidentifikasi kerentanan kritis (CVE-2020-7247), yang memungkinkan Anda menjalankan perintah shell dari jarak jauh di server dengan hak pengguna root. Kerentanan diidentifikasi selama audit ulang yang dilakukan oleh Qualys Security (audit OpenSMTPD sebelumnya diadakan pada tahun 2015, dan kerentanan baru telah hadir sejak Mei 2018). Masalah dihilangkan dalam rilis OpenSMTPD 6.6.2. Seluruh pengguna disarankan untuk segera menginstall update tersebut (untuk OpenBSD, patch dapat diinstal melalui syspatch).

Dua opsi serangan diusulkan. Opsi pertama berfungsi dalam konfigurasi OpenSMTPD default (hanya menerima permintaan dari localhost) dan memungkinkan Anda mengeksploitasi masalah secara lokal, ketika penyerang dapat mengakses antarmuka jaringan lokal (loopback) di server (misalnya, pada sistem hosting) . Opsi kedua terjadi ketika OpenSMTPD dikonfigurasi untuk menerima permintaan jaringan eksternal (server email yang menerima email pihak ketiga). Para peneliti telah menyiapkan prototipe eksploitasi yang berhasil bekerja dengan versi OpenSMTPD yang disertakan dalam OpenBSD 6.6 dan dengan versi portabel untuk sistem operasi lain (dilakukan dalam Pengujian Debian).

Masalah ini disebabkan oleh kesalahan pada fungsi smtp_mailaddr(), yang dipanggil untuk memeriksa kebenaran nilai di bidang “MAIL FROM” dan “RCPT TO” yang menentukan pengirim/penerima dan diteruskan selama koneksi dengan server email. Untuk memeriksa bagian alamat email yang muncul sebelum simbol “@”, fungsi smtp_mailaddr() dipanggil
valid_localpart(), yang menerima (MAILADDR_ALLOWED) karakter "!#$%&'*/?^`{|}~+-=_", seperti yang disyaratkan oleh RFC 5322.

Dalam hal ini, pelolosan string secara langsung dilakukan dalam fungsi mda_expand_token(), yang hanya menggantikan karakter “!#$%&'*?`{|}~” (MAILADDR_ESCAPE). Selanjutnya, baris yang disiapkan di mda_expand_token() digunakan saat memanggil agen pengiriman (MDA) menggunakan perintah 'execle("/bin/sh", "/bin/sh", "-c", mda_command,...' .Dalam hal menempatkan surat ke mbox melalui /bin/sh, baris “/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}” diluncurkan, dengan nilai “% {mbox.from}” menyertakan data yang lolos dari parameter "MAIL FROM".

Inti dari kerentanannya adalah smtp_mailaddr() memiliki kesalahan logika, yang menyebabkan, jika domain kosong dikirim ke email, fungsi tersebut mengembalikan kode verifikasi yang berhasil, meskipun bagian alamat sebelum “@” berisi karakter yang tidak valid . Selanjutnya, saat menyiapkan string, fungsi mda_expand_token() tidak menghindari semua kemungkinan karakter khusus shell, tetapi hanya karakter khusus yang diperbolehkan di alamat email. Jadi, untuk menjalankan perintah Anda, cukup menggunakan simbol “;” di bagian lokal email. dan spasi, yang tidak termasuk dalam kumpulan MAILADDR_ESCAPE dan tidak di-escape. Misalnya:

$nc 127.0.0.1 25

HELO profesor.falken
EMAIL DARI:
RCPT KE:
DATA
.
QUIT

Setelah sesi ini, OpenSMTPD, ketika dikirimkan ke mbox, akan meluncurkan perintah melalui shell

/usr/libexec/mail.local -f ;tidur 66; akar

Pada saat yang sama, kemungkinan serangan dibatasi oleh fakta bahwa bagian lokal dari alamat tidak boleh melebihi 64 karakter, dan karakter khusus '$' dan '|' diganti dengan “:” saat melarikan diri. Untuk melewati batasan ini, kami menggunakan fakta bahwa isi surat dikirimkan setelah menjalankan /usr/libexec/mail.local melalui aliran input, yaitu. Dengan memanipulasi alamat, Anda hanya dapat meluncurkan juru bahasa perintah sh dan menggunakan isi surat sebagai serangkaian instruksi. Karena header SMTP layanan ditunjukkan di awal surat, disarankan untuk menggunakan perintah read dalam satu lingkaran untuk melewatinya. Eksploitasi yang berfungsi terlihat seperti ini:

$nc 192.168.56.143 25

HELO profesor.falken
MAIL DARI:
RCPT KE:[email dilindungi]>
DATA
#0
#1
...
#d
untuk saya di W O P R; Mengerjakan
gema -n "($i) " && id || merusak
selesai > /root/x."`id -u`.""$$"
.
QUIT

Sumber: opennet.ru

Tambah komentar