Qmail pochta serveridagi masofadan turib foydalanish mumkin bo'lgan zaiflik

Qualys xavfsizlik tadqiqotchilari ko'rsatdi imkoniyat ekspluatatsiya qmail pochta serveridagi zaifliklar, mashhur 2005 yilda (CVE-2005-1513), lekin tuzatilmagan bo'lib qoldi, chunki qmail muallifi standart konfiguratsiyadagi tizimlarga hujum qilish uchun ishlatilishi mumkin bo'lgan ishlaydigan ekspluatatsiyani yaratish haqiqatga to'g'ri kelmaydi, deb ta'kidladi. Qualys bu taxminni rad etadigan va maxsus ishlab chiqilgan xabarni yuborish orqali serverda masofaviy kod bajarilishini boshlash imkonini beruvchi ekspluatatsiyani tayyorlay oldi.

Muammo stralloc_readyplus() funksiyasidagi butun sonning to‘lib ketishidan kelib chiqadi, bu juda katta xabarni qayta ishlashda yuzaga kelishi mumkin. Operatsiya 64 Gb dan ortiq virtual xotiraga ega 4 bitli tizimni talab qildi. Zaiflik dastlab 2005 yilda tahlil qilinganda, Daniel J. Bernshteyn koddagi ajratilgan massivning o'lchami har doim 32 bitli qiymat ichida bo'lishi haqidagi taxmin hech kim har bir jarayonga gigabayt xotira bermasligiga asoslanadi, deb ta'kidladi. Oxirgi 15 yil ichida serverlardagi 64-bitli tizimlar 32-bitli tizimlarni almashtirdi va taqdim etilgan xotira miqdori va tarmoq oʻtkazish qobiliyati keskin oshdi.

Qmail paketini ta'minlovchilar Bernshteynning eslatmasini inobatga olishdi va qmail-smtpd jarayonini boshlashda mavjud xotirani cheklashdi (masalan, Debian 10 7MB cheklovni o'rnatadi). Ammo Qualys muhandislari bu etarli emasligini va qmail-smtpd-dan tashqari, barcha sinovdan o'tgan paketlarda cheklanmagan holda qolgan qmail-local jarayoniga masofaviy hujumni amalga oshirish mumkinligini aniqladilar. Buning isboti sifatida standart konfiguratsiyada qmail yordamida Debian paketiga hujum qilish uchun mos ekspluatatsiya prototipi tayyorlandi.
Hujum paytida masofaviy kod bajarilishini tashkil qilish uchun server 4 Gb bo'sh disk maydoni va 8 Gb tezkor xotirani talab qiladi.
Ekspluatatsiya sizga tizimdagi istalgan foydalanuvchining huquqlari bilan har qanday qobiq buyruqlarini ishga tushirishga imkon beradi, "/home" katalogida o'z pastki katalogiga ega bo'lmagan ildiz va tizim foydalanuvchilari bundan mustasno (qmail-local jarayoni huquqlar bilan ishga tushiriladi). yetkazib berish amalga oshiriladigan mahalliy foydalanuvchi).

Hujum amalga oshiriladi
taxminan 4 GB va 576 MB hajmdagi bir nechta sarlavhali satrlarni o'z ichiga olgan juda katta pochta xabarini yuborish orqali. Bunday satrni qmail-localda qayta ishlash mahalliy foydalanuvchiga xabar yetkazishga urinayotganda butun sonning to‘lib ketishiga olib keladi. Butun sonning to'lib ketishi ma'lumotlarni nusxalashda bufer to'lib ketishiga va xotira sahifalarini libc kodi bilan qayta yozish imkoniyatiga olib keladi. Uzatilgan ma'lumotlarning joylashuvini o'zgartirish orqali "open ()" funksiyasining manzilini "tizim ()" funksiyasining manzili bilan almashtirib, qayta yozish ham mumkin.

Keyinchalik, qmesearch() ni qmail-local-da chaqirish jarayonida open() funksiyasi orqali “.qmail-kengaytma” fayli ochiladi, bu funksiyaning amalda bajarilishiga olib keladi.
system(".qmail-kengaytma"). Ammo faylning "kengaytma" qismi qabul qiluvchining manzili asosida yaratilganligi sababli (masalan, "localuser-extension@localdomain"), tajovuzkorlar "localuser-;command" foydalanuvchisini ko'rsatib, buyruqni ishga tushirishni tashkil qilishlari mumkin. ;@localdomain” xabarni qabul qiluvchi sifatida.

Kod tahlili davomida Debian paketining bir qismi bo'lgan qo'shimcha qmail-verify patchida ham ikkita zaiflik aniqlandi. Birinchi zaiflik (CVE-2020-3811) elektron pochta manzilini tekshirishni chetlab o'tish imkonini beradi, ikkinchisi (CVE-2020-3812) mahalliy ma'lumotlarning chiqib ketishiga olib keladi. Xususan, birinchi zaiflik buyruqni jo‘natish uchun ekspluatatsiyada foydalanilgan manzilning to‘g‘riligini tekshirishni chetlab o‘tish imkonini beradi (tasdiqlash domensiz manzillar uchun ishlamaydi, masalan, “localuser-;command;”). Ikkinchi zaiflik mahalliy ishlov beruvchiga to'g'ridan-to'g'ri qo'ng'iroq qilish orqali tizimda fayllar va kataloglar mavjudligini tekshirish uchun ishlatilishi mumkin, shu jumladan faqat root uchun foydalanish mumkin (qmail-verify root huquqlari bilan ishlaydi).

Muammoni hal qilish uchun Bernshteyn qmail jarayonlarini mavjud xotirada umumiy chegara bilan (“softlimit -m12345678”) ishga tushirishni tavsiya qildi, bu holda muammo bloklanadi. Muqobil himoya usuli sifatida “nazorat/maʼlumotlar baytlari” fayli orqali qayta ishlangan xabarning maksimal hajmini cheklash ham qayd etilgan (sukut boʻyicha u standart sozlamalar bilan yaratilmagan, qmail zaif boʻlib qoladi). Bundan tashqari, "nazorat/ma'lumotlar baytlari" tizim foydalanuvchilarining mahalliy hujumlaridan himoya qilmaydi, chunki chegara faqat qmail-smtpd da hisobga olinadi.

Muammo paketga ta'sir qiladi netqmail, Debian omborlariga kiritilgan. Ushbu paket uchun 2005-yildagi eski zaifliklarni (alloc() funksiya kodiga qattiq xotira chegaralarini qo‘shish orqali) va qmail-verify’dagi yangi muammolarni bartaraf qiluvchi yamoqlar to‘plami tayyorlangan. Alohida tayyorlangan qmail-verify patchining yangilangan versiyasi. Dasturchilar filiallari notqmail eski muammolarni bloklash uchun o'zlarining yamoqlarini tayyorladilar, shuningdek, koddagi barcha mumkin bo'lgan butun sonlarni yo'q qilish uchun ishlay boshladilar.

Manba: opennet.ru

a Izoh qo'shish