Специалисты из компании Qualys Security обнаружили в почтовом сервере OpenSMTPD критическую уязвимость (CVE-2020-7247), эксплуатация которой позволяет злоумышленнику удаленно выполнять shell-команды на сервере с правами суперпользователя.
Исследователи описали два варианта атаки, первый из которых работает в заводской конфигурации OpenSMTPD. Проблема может быть проэксплуатирована локально, когда атакующий имеет возможность обратиться к локальному сетевому интерфейсу (loopback) на сервере. Второй вариант может быть осуществлен в том случае, если OpenSMTPD настроен на прием внешних сетевых запросов. Исследователи разработали PoC-код для данной уязвимости, который успешно работает как с вариантом OpenSMTPD из состава OpenBSD 6.6, так и с портативной версией для других ОС.
Проблема связана с ошибкой в функции smtp_mailaddr() для проверки корректности значений в полях «MAIL FROM» и «RCPT TO», определяющих отправителя/получателя. Суть уязвимости заключается в наличии логической ошибке в smtp_mailaddr(), из-за которой в случае передачи пустого домена в email функция возвращает успешный код проверки, даже если часть адреса до «@» содержит недопустимые символы.
Далее при подготовке строки функцией mda_expand_token() экранируются не все возможные спецсимволы shell, а только спецсимволы допустимые в почтовом адресе. Таким образом, для запуска команды достаточно использовать в локальной части email символ «;» и пробел, которые не входят в набор MAILADDR_ESCAPE и не экранируются.
Уязвимость была исправлена в версии OpenSMTPD 6.6.2. Пользователям настоятельно рекомендуется установить обновление.