Дистанционно използваема уязвимост в пощенския сървър на qmail

Изследователи по сигурността от Qualys шоу възможност експлоатация уязвимости в пощенския сървър на qmail, известен през 2005 г. (CVE-2005-1513), но остана без корекция, защото авторът на qmail твърди, че е нереалистично да се създаде работещ експлойт, който може да се използва за атака на системи в конфигурацията по подразбиране. 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. Първа уязвимост (CVE-2020 3811-) ви позволява да заобиколите проверката на имейл адреса, а вторият (CVE-2020 3812-) води до изтичане на местна информация. По-специално, първата уязвимост ви позволява да заобиколите проверката на коректността на адреса, използван в експлойта, за да изпратите команда (проверката не работи за адреси без домейн, като „localuser-;command;“). Втората уязвимост може да се използва за проверка на наличието на файлове и директории в системата, включително тези, достъпни само за root (qmail-verify работи с root права), чрез директно извикване на локалния манипулатор.

За да се заобиколи проблема, Bernstein препоръчва стартиране на qmail процеси с общо ограничение на наличната памет („softlimit -m12345678“), в който случай проблемът се блокира. Като алтернативен метод за защита се споменава и ограничаване на максималния размер на обработеното съобщение чрез файла “control/databytes” (по подразбиране той не се създава с настройки по подразбиране, qmail остава уязвим). Освен това "control/databytes" не предпазва от локални атаки от системни потребители, тъй като ограничението се взема предвид само от qmail-smtpd.

Проблемът засяга пакета netqmail, включени в хранилищата на Debian. За този пакет е подготвен набор от корекции, елиминиращи както стари уязвимости от 2005 г. (чрез добавяне на твърди ограничения на паметта към кода на функцията alloc(), така и нови проблеми в qmail-verify. Отделно подготвени актуализирана версия на корекцията за проверка на qmail. Разработчици клонове notqmail подготвиха свои собствени пачове за блокиране на стари проблеми и също започнаха да работят за премахване на всички възможни целочислени преливания в кода.

Източник: opennet.ru

Добавяне на нов коментар