Разкрити са подробности за критична уязвимост в Exim

Публикувано коригираща версия Exim 4.92.2 с отстраняване на критична уязвимост (CVE-2019-15846), която в конфигурацията по подразбиране може да доведе до отдалечено изпълнение на код от злонамерен потребител с права root. Проблемът се проявява само при включена поддръжка на TLS и се експлоатира чрез предаване на специално оформен клиентски сертификат или модифицирано значение в SNI. Уязвимост е открита от компанията Qualys.

Проблема присъства в обработчика на екраниращи специални символи в стринга (string_interpret_escape() от string.c) и е предизвикана от факта, че символът '\' в края на стринга се интерпретира преди нулевия символ ('\0') и го екранира. При екранирането, последователността '\' и следващият нулев код на края на стринга се обработват като един символ и указателят се премества на данните извън границите на стринга, които се обработват като нейно продължение.

Кодът, който извиква string_interpret_escape(), заделя буфер под стоката, ръководейки се от фактическия размер, и зададеният указател се оказва в област извън границите на буфера. Съответно, при опит за обработка на входния стринг възниква ситуация на четене на данни от област извън границите на заделения буфер, а опитът за запис на разекрания стринг може да доведе до запис извън буфера.

В конфигурацията по подразбиране уязвимостта може да бъде експлоатирана чрез предаване на специално оформени данни в SNI при установяване на защитена връзка с сървъра. Проблемът може също да бъде експлоатиран чрез модификация на стойностите peerdn в конфигурации, настроени за аутентификация по клиентски сертификат или при импортиране на сертификати. Атаката чрез SNI и peerdn е възможна от версия Exim 4.80, в която функцията string_unprinting() е била приложена за разекраниране на съдържанието на peerdn и SNI.

За атака чрез SNI е подготвен прототип на експлоит, работещ на архитектури i386 и amd64 в Linux системи с Glibc. В експлоита се използва наложение на данни върху областта на купчината, което води до презапис на паметта, в която се съхранява името на файла с логовете. Името на файла се заменя с "\/..\/..\/..\/..\/..\/..\/..\/..\/etc\/passwd". След това се презаписва променливата с адреса на изпращача, който първо се запазва в лог, което позволява добавянето на нов потребител в системата.

Актуализации на пакети с отстраняване на уязвимостта са публикувани от дистрибуциите Debian, Ubuntu, Fedora, SUSE/openSUSE и FreeBSD. RHEL и CentOS проблемът не са податливи, тъй като Exim не влиза в техния официален репозиторий на пакети (в EPEL актуализация вече е съставено, но все още не е поставено в публичния репозиторий). В кода на Exim проблемата се решава с един ред патч, деактивираща екраниращото действие на обратния слеш, ако се намира в края на реда.

Като обходен вариант за блокиране на уязвимостта можете да деактивирате поддръжката на TLS или да добавите в
секция ACL „acl_smtp_mail“:

откажи условие = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
откажи условие = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}

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

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