Уязвимости в OpenSMTPD, позволяющие удалённо и локально получить права root
24 февраля 2020 года
Компания Qualys выявила ещё одну удалённую критическую уязвимость (CVE-2020-8794) в почтовом сервере OpenSMTPD, развиваемом проектом OpenBSD. Как и выявленная в конце января уязвимость, новая проблема даёт возможность удалённо выполнить произвольные команды shell на сервере с правами пользователя root. Уязвимость устранена в выпуске OpenSMTPD 6.6.4p1.
Проблема вызвана ошибкой в коде, осуществляющем доставку почты на удалённый почтовый сервер (не в коде, обрабатывающем входящие соединения). Атака возможна как на стороне клиента, так и на стороне сервера. На стороне клиента атака возможна в конфигурации 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 также выявлена ещё одна уязвимость (CVE-2020-8793), которая позволяет локальному пользователю прочитать первую строку любого файла в системе. Например, можно прочитать первую строку /etc/master.passwd, в которой размещается хэш пароля пользователя root. Уязвимость также позволяет прочитать всё содержимое файла, принадлежащего другому пользователю, если этот файл находится в одной ФС с каталогом /var/spool/smtpd/. Проблема не эксплуатируема во многих дистрибутивах Linux, в которых значение /proc/sys/fs/protected_hardlinks выставлено в 1.
Проблема является следствием неполного устранения проблем, озвученных в процессе аудита, проведённого Qualys в 2015 году. Атакующий может добиться выполнения своего кода с правами группы "_smtpq", выставив переменную "PATH=." и разместив в текущем каталоге скрипт с именем makemap (утилита smtpctl запускает makemap без явного указания пути). Получив доступ к группе "_smtpq" атакующий затем может вызвать состояние гонки (создать большой файл в каталоге offline и отправить сигнал SIGSTOP) и, до завершения обработки, подменить файл в каталоге offline на жёсткую символическую ссылку, указывающую на целевой файл, содержимое которого нужно прочитать.
Примечательно, что в Fedora 31 уязвимость позволяет сразу получить привилегии группы root, так как процесс smtpctl снабжён флагом setgid root, вместо setgid smtpq. Получив доступ к группе root можно перезаписать содержимое /var/lib/sss/mc/passwd и получить полный root-доступ в системе. Неверный setgid исправлен в обновлении пакета opensmtpd-6.6.2p1-1.fc31, выпущенном 9 февраля.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.