Изследователи по сигурността от Qualys
Проблемът е причинен от целочислено препълване във функцията stralloc_readyplus(), което може да възникне при обработка на много голямо съобщение. Операцията изисква 64-битова система с повече от 4GB виртуална памет. Когато уязвимостта беше първоначално анализирана през 2005 г., Daniel J. Bernstein твърди, че предположението в кода, че размерът на разпределения масив винаги е в рамките на 32-битова стойност, се основава на факта, че никой не предоставя гигабайти памет за всеки процес. През последните 15 години 64-битовите системи на сървърите замениха 32-битовите системи и обемът на предоставената памет и честотната лента на мрежата се увеличиха драстично.
Поддържащите пакета qmail взеха под внимание бележката на Bernstein и ограничиха наличната памет при стартиране на процеса qmail-smtpd (например в Debian 10 ограничението е зададено на 7MB). Но инженерите от Qualys установиха, че това не е достатъчно и в допълнение към qmail-smtpd може да се извърши отдалечена атака върху процеса qmail-local, който остава неограничен във всички тествани пакети. Като доказателство беше подготвен прототип на експлойт, който беше подходящ за атака на пакета Debian с qmail в конфигурацията по подразбиране.
За да организира отдалечено изпълнение на код по време на атака, сървърът изисква 4GB свободно дисково пространство и 8GB RAM.
Експлойтът ви позволява да изпълнявате всякакви команди на shell с правата на всеки потребител в системата, с изключение на root и системни потребители, които нямат собствена поддиректория в директорията „/home“ (процесът qmail-local се стартира с права на местния потребител, на когото се извършва доставката).
Атаката е извършена
чрез изпращане на много голямо имейл съобщение, включително няколко заглавни реда, с размери приблизително 4GB и 576MB. Обработката на такъв низ в qmail-local води до целочислено препълване при опит за доставяне на съобщение до локалния потребител. След това препълването на целите числа води до препълване на буфера при копиране на данни и възможност за презаписване на страници с памет с libc код. Чрез манипулиране на оформлението на предаваните данни също е възможно да се пренапише адресът на функцията „open()“, като се замени с адреса на функцията „system()“.
След това, в процеса на извикване на qmesearch() в qmail-local, файлът „.qmail-extension“ се отваря чрез функцията open(), което води до действителното изпълнение на функцията
система(".qmail-разширение"). Но тъй като частта „разширение“ на файла се генерира въз основа на адреса на получателя (например „localuser-extension@localdomain“), атакуващите могат да уредят командата да бъде изпратена за изпълнение, като посочат потребителя „localuser-;command ;@localdomain” като получател на съобщението.
По време на анализа на кода бяха идентифицирани и две уязвимости в допълнителната корекция за qmail-verify, която е част от пакета за Debian. Първа уязвимост (
За да се заобиколи проблема, Bernstein препоръчва стартиране на qmail процеси с общо ограничение на наличната памет („softlimit -m12345678“), в който случай проблемът се блокира. Като алтернативен метод за защита се споменава и ограничаване на максималния размер на обработеното съобщение чрез файла “control/databytes” (по подразбиране той не се създава с настройки по подразбиране, qmail остава уязвим). Освен това "control/databytes" не предпазва от локални атаки от системни потребители, тъй като ограничението се взема предвид само от qmail-smtpd.
Проблемът засяга пакета
Източник: opennet.ru