Kemas kini Exim 4.94.2 dengan pembaikan untuk 10 kelemahan yang boleh dieksploitasi dari jauh

Pengeluaran pelayan mel Exim 4.94.2 telah diterbitkan dengan penghapusan 21 kelemahan (CVE-2020-28007-CVE-2020-28026, CVE-2021-27216), yang telah dikenal pasti oleh Qualys dan dibentangkan di bawah nama kod 21Kuku. 10 masalah boleh dieksploitasi dari jauh (termasuk melaksanakan kod dengan hak akar) melalui manipulasi arahan SMTP apabila berinteraksi dengan pelayan.

Semua versi Exim, yang sejarahnya telah dijejaki dalam Git sejak 2004, dipengaruhi oleh masalah tersebut. Prototaip eksploitasi yang berfungsi telah disediakan untuk 4 kelemahan tempatan dan 3 masalah terpencil. Eksploitasi untuk kelemahan tempatan (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) membolehkan anda meningkatkan keistimewaan anda kepada pengguna akar. Dua isu jauh (CVE-2020-28020, CVE-2020-28018) membenarkan kod dilaksanakan tanpa pengesahan sebagai pengguna Exim (anda boleh mendapatkan akses root dengan mengeksploitasi salah satu kelemahan setempat).

Kerentanan CVE-2020-28021 membenarkan pelaksanaan kod jauh segera dengan hak akar, tetapi memerlukan akses yang disahkan (pengguna mesti menubuhkan sesi yang disahkan, selepas itu mereka boleh mengeksploitasi kelemahan melalui manipulasi parameter AUTH dalam arahan MAIL FROM). Masalahnya disebabkan oleh fakta bahawa penyerang boleh mencapai penggantian rentetan dalam pengepala fail kili dengan menulis nilai authenticated_sender tanpa melarikan diri dengan betul aksara khas (contohnya, dengan menghantar arahan β€œMAIL FROM:<> AUTH=Raven+0AReyes ”).

Selain itu, diperhatikan bahawa satu lagi kelemahan jauh, CVE-2020-28017, boleh dieksploitasi untuk melaksanakan kod dengan hak pengguna "exim" tanpa pengesahan, tetapi memerlukan lebih daripada 25 GB memori. Untuk baki 13 kelemahan, eksploitasi berpotensi juga disediakan, tetapi usaha ke arah ini masih belum dijalankan.

Pembangun Exim telah dimaklumkan tentang masalah itu pada Oktober tahun lalu dan menghabiskan lebih daripada 6 bulan untuk membangunkan pembaikan. Semua pentadbir disyorkan untuk mengemas kini Exim dengan segera pada pelayan mel mereka kepada versi 4.94.2. Semua versi Exim sebelum keluaran 4.94.2 telah diisytiharkan usang. Penerbitan versi baharu telah diselaraskan dengan pengedaran yang menerbitkan kemas kini pakej secara serentak: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE dan Fedora. RHEL dan CentOS tidak terjejas oleh masalah itu, kerana Exim tidak disertakan dalam repositori pakej standard mereka (EPEL belum mempunyai kemas kini).

Kerentanan yang dialih keluar:

  • CVE-2020-28017: Limpahan integer dalam fungsi receive_add_recipient();
  • CVE-2020-28020: Limpahan integer dalam fungsi receive_msg();
  • CVE-2020-28023: Di luar sempadan dibaca dalam smtp_setup_msg();
  • CVE-2020-28021: Penggantian baris baharu dalam pengepala fail kili;
  • CVE-2020-28022: Tulis dan baca di kawasan di luar penimbal yang diperuntukkan dalam fungsi extract_option();
  • CVE-2020-28026: Pemangkasan rentetan dan penggantian dalam spool_read_header();
  • CVE-2020-28019: Ranap apabila menetapkan semula penunjuk fungsi selepas ralat BDAT berlaku;
  • CVE-2020-28024: Aliran bawah penampan dalam fungsi smtp_ungetc();
  • CVE-2020-28018: Akses penimbal percuma selepas penggunaan dalam tls-openssl.c
  • CVE-2020-28025: Bacaan di luar sempadan dalam fungsi pdkim_finish_bodyhash().

Kelemahan setempat:

  • CVE-2020-28007: Serangan pautan simbolik dalam direktori log Exim;
  • CVE-2020-28008: Serangan direktori kili;
  • CVE-2020-28014: Penciptaan fail sewenang-wenangnya;
  • CVE-2021-27216: Pemadaman fail sewenang-wenangnya;
  • CVE-2020-28011: Limpahan penimbal dalam queue_run();
  • CVE-2020-28010: Tulis di luar sempadan dalam main();
  • CVE-2020-28013: Limpahan penimbal dalam fungsi parse_fix_phrase();
  • CVE-2020-28016: Tulis di luar sempadan dalam parse_fix_phrase();
  • CVE-2020-28015: Penggantian baris baharu dalam pengepala fail kili;
  • CVE-2020-28012: Bendera close-on-exec tiada untuk paip istimewa tanpa nama;
  • CVE-2020-28009: Limpahan integer dalam fungsi get_stdinput().



Sumber: opennet.ru

Tambah komen