Уязвимости в OpenBSD, позволяющие повысить привилегии и обойти аутентификацию в smtpd, ldapd и radiusd
5 декабря 2019 года
Компания Qualys выявила четыре уязвимости в OpenBSD, одна из которых позволяет удалённо подключиться без аутентификации к некоторым сетевым сервисам, а три остальные повысить свои привилегии в системе. В отчёте Qualys отмечена быстрая реакция разработчиков OpenBSD - все проблемы были устранены в OpenBSD 6.5 и OpenBSD 6.6 в течение 40 часов после приватного уведомления.
Удалённо эксплуатируемая уязвимость вызвана ошибкой при организации вызова обработчика аутентификации в библиотеке libc, которая вызывает программу /usr/libexec/auth/login_style с передачей аргументов в командной строке. В том числе при вызове login_style при помощи опционального параметра "-s service" допускается передача названия протокола. В случае использования в начале имени пользователя символа "-", данное имя будет обработано как опция при запуске login_style. Соответственно, если указать при аутентификации в качестве имени пользователя "-schallenge" или "-schallenge:passwd" то login_style воспримет обращение как запрос использования обработчика S/Key.
Проблема в том, что протокол S/Key в login_style поддерживается лишь формально, а фактически игнорируется с выводом признака успешной аутентификации. Таким образом, атакующий может, представившись пользователем "-schallenge", обойти аутентификацию и получить доступ без указания пароля или ключей. Потенциально проблеме подвержены все сетевые сервисы, использующие штатные вызовы libc для проведения аутентификации. Например, возможность обращения в обход аутентификации подтверждена в smtpd (AUTH PLAIN), ldapd и radiusd.
В sshd уязвимость не проявляется, так как в нём имеется дополнительная защита с проверкой присутствия пользователя в системе. Тем не менее, sshd можно использовать для проверки подверженности системы уязвимости - при обращении с именем пользователя "-sresponse:passwd" соединение зависает, так как sshd ждёт от login_passwd возвращения параметров вызова (challenge), а login_passwd ждет передачи недостающих параметров (имя "-sresponse" воспринимается как опция). Потенциально локальный атакующий может попытаться обойти аутентификацию в утилите su, но передача имени "-sresponse" приводит к краху процесса из-за возвращения нулевого указателя при выполнении функции getpwnam_r("-schallenge", ...).
Другие уязвимости:
- CVE-2019-19520 - локальное повышение привилегий через манипуляции с утилитой xlock, поставляемой с флагом sgid, меняющим группу на "auth". В коде xlock переопределение путей к библиотекам запрещается только при смене идентификатора пользователя (suid), что позволяет атакующему изменить переменную окружения "LIBGL_DRIVERS_PATH" и организовать загрузку своей разделяемой библиотеки, код которой будет выполнен после повышения привилегий до группы "auth".
- CVE-2019-19522 - позволяет локальному пользователю, входящему в группу "auth", запустить код с правами root при включении в системе аутентификации через S/Key или YubiKey (по умолчанию не активны). Вхождение в группу "auth", доступ к которой может быть получен через эксплуатацию вышеотмеченной уязвимости в xlock, позволяет записать файлы в каталоги /etc/skey и /var/db/yubikey. Например, атакующий может добавить новый файл /etc/skey/root для генерации одноразовых ключей для аутентификации под пользователем root через S/Key.
- CVE-2019-19519 - возможность повышения лимитов на ресурсы через манипуляции с утилитой su. При указании опции "-L", подразумевающей цикличное повторение попыток аутентификации в случае неудачи, класс пользователя устанавливается только один раз и не сбрасывается при следующих попытках. Атакующий может выполнить "su -l -L" и при первой попытке ввести чужой логин с другим классом учётной записи, но при второй попытке успешно аутентифицироваться под собой. В этой ситуации пользователю будут установлены лимиты, соответствующие классу пользователя, указанного при первой попытке (например, максимальное число процессов или размер памяти для процесса). Метод работает только для заимствования лимитов от непривилегированных пользователей, так как для пользователя root необходимо присутствие в группе wheel).
Дополнительно можно отметить реализацию в OpenBSD нового метода проверки допустимости обращения к системным вызовам, дополнительно усложняющего эксплуатацию уязвимостей. Метод допускает выполнение системных вызовов, только если к ним обращаются из предварительно зарегистрированных областей памяти. Для пометки областей памяти предложен новый системный вызов msyscall().
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.