Exim-dagi muhim zaiflik, bu kodni serverda ildiz huquqlari bilan bajarishga imkon beradi

Exim pochta serverida aniqlangan kriticheskaya zaiflik (CVE-2019-10149), bu maxsus tayyorlangan so'rovni qayta ishlashda ildiz huquqlariga ega serverda masofaviy kod bajarilishiga olib kelishi mumkin. Muammodan foydalanish ehtimoli 4.87 dan 4.91 gacha bo'lgan versiyalarda yoki EXPERIMENTAL_EVENT opsiyasi bilan qurishda qayd etilgan.

Standart konfiguratsiyada hujum mahalliy foydalanuvchi tomonidan keraksiz asoratlarsiz amalga oshirilishi mumkin, chunki tashqi manzillar uchun qo'shimcha tekshiruvlarni amalga oshiradigan "verify = oluvchi" ACL qo'llaniladi. Boshqa domen uchun ikkilamchi MX vazifasini bajarish, "verify=recipient" ACLni olib tashlash yoki local_part_suffix ga ba'zi o'zgarishlar) kabi sozlamalar o'zgartirilganda masofaviy hujum sodir bo'lishi mumkin. Agar tajovuzkor serverga ulanishni 7 kun davomida ochiq ushlab tursa (masalan, vaqt tugashini chetlab o'tish uchun daqiqada bir bayt yuborish) masofaviy hujum ham mumkin. Shu bilan birga, muammodan uzoqdan foydalanish uchun oddiyroq hujum vektorlari mavjud bo'lishi mumkin.

Zaiflik /src/deliver.c faylida belgilangan yetkazib_message() funksiyasida qabul qiluvchining manzilini noto‘g‘ri tekshirish natijasida yuzaga keladi. Manzil formatini manipulyatsiya qilish orqali tajovuzkor o'z ma'lumotlarini ildiz huquqlariga ega execv() funksiyasi orqali chaqiriladigan buyruq argumentlariga almashtirishga erishishi mumkin. Operatsiya bufer to'lib ketishi yoki xotira buzilishi uchun ishlatiladigan murakkab usullardan foydalanishni talab qilmaydi; oddiy belgilarni almashtirish kifoya.

Muammo manzilni o'zgartirish uchun konstruksiyadan foydalanish bilan bog'liq:

yetkazib_localpart = kengaytirish_string(
string_sprintf("${local_part:%s}", new->manzil));
yetkazib_domen = kengaytirish_string(
string_sprintf("${domen:%s}", yangi->manzil));

expand_string() funksiyasi haddan tashqari murakkab birlashtiruvchi, jumladan, “${run{command arguments}” buyrug‘ini tanib, tashqi ishlov beruvchini ishga tushirishga olib keladi. Shunday qilib, SMTP sessiyasida hujum qilish uchun mahalliy foydalanuvchi faqat “RCPT TO “username+${run{...}}@localhost” kabi buyruq yuborishi kerak, bunda localhost local_domains roʻyxatidagi xostlardan biri hisoblanadi. foydalanuvchi nomi esa mavjud mahalliy foydalanuvchining nomi.

Agar server pochta releyi sifatida ishlayotgan bo'lsa, "RCPT TO "${run{...}}@relaydomain.com" buyrug'ini masofadan yuborish kifoya, bunda relaydomain.com relay_to_domains ro'yxatidagi xostlardan biridir. sozlamalar bo'limi. Exim sukut bo'yicha imtiyoz rejimini o'chirish uchun (deliver_drop_privilege = noto'g'ri), "${run{...}}" orqali uzatilgan buyruqlar root sifatida bajariladi.

Shunisi e'tiborga loyiqki, zaiflik bor edi bartaraf etildi fevral oyida chiqarilgan 4.92 versiyasida, tuzatish xavfsizlik muammolariga olib kelishi mumkinligini ta'kidlamasdan. Exim ishlab chiquvchilari zaiflikni qasddan yashirgan deb ishonish uchun hech qanday asos yo'q, chunki muammo o'z vaqtida hal qilingan. tuzatishlar noto'g'ri manzillar uzatilganda yuzaga keladigan nosozlik va zaiflik Qualys tomonidan Exim-dagi o'zgarishlar auditi paytida aniqlangan.

Distribyutsiyalarda foydalanishda davom etayotgan oldingi versiyalar uchun tuzatish hozircha faqat sifatida mavjud yamoq. Muammoni hal qilish uchun oldingi filiallar uchun tuzatuvchi relizlar 11 iyunga rejalashtirilgan. Paket yangilanishlari tayyor Debian, Ubuntu, openSUSE. Arch Linux и Fedora Ular 4.92 versiyasini taqdim etadilar, unda muammo ko'rinmaydi. RHEL va CentOS muammosi sezgir emas, chunki Exim ularning standart paketlar omboriga kiritilmagan.

Manba: opennet.ru

a Izoh qo'shish