Критична уязвимост в Exim, която позволява кодът да бъде изпълнен на сървъра с root права

В пощенския сървър на Exim идентифицирани критична уязвимост (CVE-2019 10149-), което може да доведе до отдалечено изпълнение на код на сървъра с root права при обработка на специално изработена заявка. Възможността за използване на проблема беше отбелязана във версии от 4.87 до 4.91 включително или при изграждане с опцията EXPERIMENTAL_EVENT.

В конфигурацията по подразбиране атаката може да бъде извършена без ненужни усложнения от локален потребител, тъй като се прилага ACL „verify = recipient“, който извършва допълнителни проверки за външни адреси. Отдалечена атака може да възникне, когато настройките се променят, като например действа като вторичен MX за друг домейн, премахване на ACL „verify=recipient“ или определени промени в local_part_suffix). Възможна е и отдалечена атака, ако атакуващият е в състояние да поддържа връзката със сървъра отворена в продължение на 7 дни (например изпращане на един байт на минута, за да заобиколи изчакване). В същото време е възможно да има по-прости вектори на атака за отдалечено използване на проблема.

Уязвимостта е причинена от неправилна проверка на адреса на получателя във функцията deliver_message(), дефинирана във файла /src/deliver.c. Чрез манипулиране на форматирането на адреса, атакуващият може да постигне заместване на своите данни в аргументите на команда, извикана чрез функцията execv() с root права. Работата не изисква използването на сложни техники, използвани за препълване на буфер или повреда на паметта; просто заместване на знаци е достатъчно.

Проблемът е свързан с използването на конструкцията за преобразуване на адреси:

достави_локалначаст = разшири_низ(
string_sprintf("${local_part:%s}", нов->адрес));
достави_домейн = разшири_низ(
string_sprintf("${domain:%s}", нов->адрес));

Функцията expand_string() е прекалено сложен комбиниращ инструмент, включително разпознаване на командата „${run{command arguments}“, което води до стартиране на външен манипулатор. По този начин, за да атакува в рамките на SMTP сесия, локалният потребител трябва само да изпрати команда като „RCPT TO „username+${run{...}}@localhost”“, където localhost е един от хостовете от списъка с local_domains, и потребителско име е името на съществуващ локален потребител.

Ако сървърът работи като реле за поща, достатъчно е дистанционно да изпратите командата „RCPT TO „${run{...}}@relaydomain.com““, където relaydomain.com е един от хостовете, изброени в relay_to_domains раздел с настройки. Тъй като Exim не по подразбиране премахва режима на привилегии (deliver_drop_privilege = false), командите, предадени чрез "${run{...}}" ще бъдат изпълнени като root.

Трябва да се отбележи, че уязвимостта беше елиминиран в изданието 4.92, пуснато през февруари, без да се подчертава, че корекцията може да доведе до проблеми със сигурността. Няма причина да се смята, че е имало умишлено прикриване на уязвимостта от разработчиците на Exim, тъй като проблемът е отстранен по време корекции грешка, която възниква, когато се предават неправилни адреси, и уязвимостта е идентифицирана от Qualys по време на одит на промените в Exim.

Корекция за предишни версии, които продължават да се използват в дистрибуции, в момента е налична само като пластир. Коригиращи издания за предишни клонове за отстраняване на проблема са планирани за 11 юни. Актуализациите на пакетите са готови за Debian, Ubuntu, openSUSE. Arch Linux и Fedora Те доставят версия 4.92, в която проблема не се появява. Проблем с RHEL и CentOS не е податлив, тъй като Exim не е включен в редовното им хранилище на пакети.

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

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