Безбедносни истражувачи од Qualys
Проблемот е предизвикан од прелевање на цел број во функцијата stralloc_readyplus(), што може да се појави при обработка на многу голема порака. Операцијата бараше 64-битен систем со повеќе од 4 GB виртуелна меморија. Кога ранливоста првично беше анализирана во 2005 година, Даниел Џ. Бернштајн тврдеше дека претпоставката во кодот дека големината на доделената низа е секогаш во рамките на 32-битна вредност се заснова на фактот дека никој не обезбедува гигабајти меморија за секој процес. Во текот на изминатите 15 години, 64-битните системи на серверите ги заменија 32-битните системи, а количината на испорачаната меморија и мрежниот опсег драстично се зголемија.
Одржувачите на пакетот qmail ја зедоа предвид белешката на Бернштајн и ја ограничија достапната меморија при започнување на процесот qmail-smtpd (на пример, во Debian 10 границата е поставена на 7MB). Но, инженерите од Qualys открија дека тоа не е доволно и, покрај qmail-smtpd, може да се изврши далечински напад врз qmail-локалниот процес, кој остана неограничен во сите тестирани пакети. Како доказ, беше подготвен прототип за експлоатација кој беше погоден за напад на пакетот Debian со qmail во стандардната конфигурација.
За да организира далечинско извршување на код за време на напад, на серверот му требаат 4 GB слободен простор на дискот и 8 GB RAM.
Експлоатот ви овозможува да извршите какви било команди на школка со правата на кој било корисник во системот, освен за root и системски корисници кои немаат сопствен поддиректориум во директориумот „/home“ (процесот qmail-local се стартува со правата на локалниот корисник до кој се врши испорака).
Нападот е извршен
преку испраќање многу голема пошта порака, вклучувајќи неколку линии за заглавие, со големина од приближно 4GB и 576MB. Обработката на таква низа во qmail-local резултира со прелевање на цел број при обид да се достави порака до локалниот корисник. Прелевање на цел број потоа доведува до прелевање на баферот при копирање податоци и можност за препишување мемориски страници со libc код. Со манипулирање со распоредот на пренесените податоци, исто така е можно да се препише адресата на функцијата „open()“, заменувајќи ја со адресата на функцијата „system()“.
Следно, во процесот на повикување qmesearch() во qmail-local, датотеката „.qmail-extension“ се отвора преку функцијата open(), што доведува до вистинско извршување на функцијата
system(".qmail-екстензија"). Но, бидејќи делот „продолжување“ од датотеката се генерира врз основа на адресата на примачот (на пример, „localuser-extension@localdomain“), напаѓачите можат да организираат да се испрати командата да се изврши со наведување на корисникот „localuser-;command“ ;@localdomain“ како примач на пораката.
За време на анализата на кодот, исто така беа идентификувани две пропусти во дополнителната закрпа за qmail-verify, која е дел од пакетот за Debian. Првата ранливост (
За да се реши проблемот, Бернштајн препорача да се извршуваат процесите на qmail со вкупно ограничување на достапната меморија („softlimit -m12345678“), во кој случај проблемот е блокиран. Како алтернативен метод за заштита, се споменува и ограничувањето на максималната големина на обработената порака преку датотеката „control/databytes“ (по дифолт не е креирана со стандардните поставки qmail останува ранлива). Дополнително, „контрола/бајти на податоци“ не заштитува од локални напади од корисници на системот, бидејќи ограничувањето се зема предвид само од qmail-smtpd.
Проблемот влијае на пакетот
Извор: opennet.ru