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

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

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

Съпътстващите пакети с qmail взеха предвид бележката на Бернстейн и при стартиране на процеса 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(), което води до действително стартиране на функцията
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