Отдалечено експлоатирана уязвимост в пощенския сървър qmail

Изследователите по сигурността от компанията Qualys беше показано възможност за експлоатация уязвимости в пощенския сървър qmail, известния още от 2005 година (CVE-2005-1513), но оставаща неизправена, тъй като авторът на qmail твърдеше, че е нереалистично да се създаде работещ експлойти, който може да се използва за атака на системи с конфигурация по подразбиране. В Qualys успяха да подготвят експлоит, който опровергава това предположение и позволява иницииране на дистанционното изпълнение на код на сървера чрез изпращане на специално форматирано съобщение.

Проблемът е причинен от препълване на цяло число във функцията stralloc_readyplus(), което може да се случи при обработка на много голямо съобщение. За експлоатация беше необходима 64-битова система с обем на виртуалната памет над 4ГБ. При първоначалното разглеждане на уязвимостта през 2005 година Даниел Бернщейн (Daniel J. Bernstein) твърдеше, че предположението в кода, че размерът на заделената маса винаги попада в 32-битова стойност, се основава на факта, че никой не предоставя гигабайти памет на всеки процес. През последните 15 години 64-битовите системи на сървърите замениха 32-битовите, значително нараснаха обемите на предлаганата памет и пропускната способност на мрежите.

Придружаващите пакети с qmail взеха предвид забележката на Бернщейн и при стартиране на процеса qmail-smtpd ограничават достъпната памет (например, в Debian 10 се задава лимит от 7MB). Но инженерите от Qualys установиха, че това е недостатъчно и освен qmail-smtpd, дистанционна атака може да бъде извършена върху процеса qmail-local, който във всички проверени пакети остава неограничен. Като доказателство беше подготвен прототип на експлоит, подходящ за атака на пакета с qmail, доставян в Debian с конфигурация по подразбиране.
За организиране на дистанционно изпълнение на код по време на атаката е необходимо на сървера да има 4ГБ свободно пространство на диска и 8ГБ RAM.
Експлоитът позволява да се стартират всякакви shell-команди с правата на всеки потребител в системата, с изключение на root и системни потребители, които нямат свой подкаталог в каталога "\/home" (процесът qmail-local се стартира с правата на локален потребител, на който се осъществява доставката).

Атаката се извършва
чрез платформата за изпращане на много голямо имейл съобщение, включващо няколко реда в заглавието, с размер около 4GB и 576MB. Обработката на такава линия в qmail-local води до цяло числово преливане при опит за доставка на съобщението на локален потребител. Цялостното преливане след това води до преливане на буфера при копирането на данни и възможност за презапис на страници в паметта с кода на libc. Чрез манипулации с компоновката на предаваните данни е възможно, в частност, да се презапише адресът на функцията „open()“, заменяйки я с адреса на функцията „system()“.

След това, в процеса на извикване на qmesearch() в qmail-local се отваря файлът „.qmail-extension“ чрез функцията open(), което води до фактическото изпълнение на функцията
system(«.qmail-extension»). Но тъй като част от файла „extension“ се образува на основата на адреса на получателя (например, „localuser-extension@localdomain“), атакуващите могат да организират предаване на команда за изпълнение, посочвайки потребителя „localuser-;command;@localdomain“ като получател на съобщението.

В хода на анализа на кода също са открити две уязвимости в допълнителния патч qmail-verify, който е част от пакета за Debian. Първата уязвимост (CVE-2020-3811) позволява заобикаляне на проверката на имейл адреса, а второто (CVE-2020-3812) води до изтичане на локална информация. По-специално, първата уязвимост позволява заобикаляне на проверката на коректността на адреса, използван в експлозита за предаване на команда (проверката не сработва за адреси без домейн, като „localuser-;command;“). Втората уязвимост може да се използва за проверка на наличността на файлове и директории в системата, вкл. достъпни само за root (qmail-verify се стартира с права на root) чрез директно обръщение към локалния обработвач.

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

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

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster