Компания Qualys
Проблема вызвана ошибкой в коде, осуществляющем доставку почты на удалённый почтовый сервер (не в коде, обрабатывающем входящие соединения). Атака возможна как на стороне клиента, так и на стороне сервера. На стороне клиента атака возможна в конфигурации OpenSMTPD по умолчанию, в которой OpenSMTPD принимает запросы только на внутреннем сетевом интерфейсе (localhost) и отправляет почтовые сообщения на внешние серверы. Для эксплуатации уязвимости достаточно, чтобы в процессе доставки письма OpenSMTPD установил сеанс с почтовым сервером, подконтрольным атакующему, или чтобы атакующий мог вклиниться в соединение клиента (MITM или перенаправление в ходе атак через DNS или BGP).
Для атаки на стороне сервера необходимо, чтобы OpenSMTPD был настроен на приём внешних сетевых запросов от других почтовых серверов или обслуживал сторонние сервисы, позволяющие отправить запрос на произвольный email (например, формы подтверждения адреса на сайтах). Например, злоумышленник может соединиться с сервером OpenSMTPD и отправить некорректное письмо (несуществующему пользователю), которое приведёт к ответной отправке письма с кодом ошибки (bounce) на сервер атакующего. Злоумышленник может эксплуатировать уязвимость в момент, когда OpenSMTPD подсоединиться для доставки уведомления на сервер атакующего. Внедрённые в ходе атаки shell-команды помещаются в файл, который выполняется с правами root при перезапуске OpenSMTPD, поэтому атакующий для заверения атаки должен дождаться перезапуска OpenSMTPD или инициировать крах OpenSMTPD.
Проблема присутствует в функции mta_io() в коде для разбора многострочного ответа, возвращаемого удалённым сервером после установки соединения (например, «250-ENHANCEDSTATUSCODES» и «250 HELP»). В OpenSMTPD рассчитано, что первая строка включает трёхзначное число и текст, разделённые символом «-«, а вторая строка трёхзначное число и текст, разделённые пробелом. Если во второй строке после трёхзначного числа не следует пробел и текст, указатель, используемый для определения текста, устанавливается на байт, следующий за символом ‘\0’ и предпринимается попытка копирования в буфер данных, следующих после конца строки.
По просьбе проекта OpenBSD публикация деталей об эксплуатации уязвимости отложена до 26 февраля, чтобы дать пользователям возможность обновить свои системы. Проблема присутствует в кодовой базе с декабря 2015 года, но эксплуатация до выполнения кода с правами root возможна с мая 2018 года. Исследователями подготовлен рабочий прототип эксплоита, который успешно протестирован в сборках OpenSMTPD для OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) и Fedora 31.
В OpenSMTPD также
Проблема является следствием неполного устранения
Примечательно, что в Fedora 31 уязвимость позволяет сразу получить привилегии группы root, так как процесс smtpctl снабжён флагом setgid root, вместо setgid smtpq. Получив доступ к группе root можно перезаписать содержимое /var/lib/sss/mc/passwd и получить полный root-доступ в системе.
Источник: opennet.ru