Уязвимости в OpenBSD, позволяющие повысить привилегии и обойти аутентификацию в smtpd, ldapd и radiusd
Компания Qualys выявила четыре уязвимости в OpenBSD, одна из которых позволяет удалённо подключиться без аутентификации к некоторым сетевым сервисам, а три остальные повысить свои привилегии в системе. В отчёте Qualys отмечена быстрая реакция разработчиков OpenBSD - все проблемы были устранены в OpenBSD 6.5 и OpenBSD 6.6 в течение 40 часов после приватного уведомления.
Удалённо эксплуатируемая уязвимость вызвана ошибкой при организации вызова обработчика аутентификации в библиотеке libc, которая вызывает программу /usr/libexec/auth/loginstyle с передачей аргументов в командной строке. В том числе при вызове loginstyle при помощи опционального параметра "-s service" допускается передача названия протокола. В случае использования в начале имени пользователя символа "-", данное имя будет обработано как опция при запуске loginstyle. Соответственно, если указать при аутентификации в качестве имени пользователя "-schallenge" или "-schallenge:passwd" то loginstyle воспримет обращение как запрос использования обработчика S/Key.
Проблема в том, что протокол S/Key в loginstyle поддерживается лишь формально, а фактически игнорируется с выводом признака успешной аутентификации. Таким образом, атакующий может, представившись пользователем "-schallenge", обойти аутентификацию и получить доступ без указания пароля или ключей. Потенциально проблеме подвержены все сетевые сервисы, использующие штатные вызовы libc для проведения аутентификации. Например, возможность обращения в обход аутентификации подтверждена в smtpd (AUTH PLAIN), ldapd и radiusd.
В sshd уязвимость не проявляется, так как в нём имеется дополнительная защита с проверкой присутствия пользователя в системе. Тем не менее, sshd можно использовать для проверки подверженности системы уязвимости - при обращении с именем пользователя "-sresponse:passwd" соединение зависает, так как sshd ждёт от loginpasswd возвращения параметров вызова (challenge), а loginpasswd ждет передачи недостающих параметров (имя "-sresponse" воспринимается как опция). Потенциально локальный атакующий может попытаться обойти аутентификацию в утилите su, но передача имени "-sresponse" приводит к краху процесса из-за возвращения нулевого указателя при выполнении функции getpwnamr("-schallenge", ...).
Другие уязвимости:
- CVE-2019-19520 - локальное повышение привилегий через манипуляции с утилитой xlock, поставляемой с флагом sgid, меняющим группу на "auth". В коде xlock переопределение путей к библиотекам запрещается только при смене идентификатора пользователя (suid), что позволяет атакующему изменить переменную окружения "LIBGLDRIVERSPATH" и организовать загрузку своей разделяемой библиотеки, код которой будет выполнен после повышения привилегий до группы "auth".
- CVE-2019-19522 - позволяет локальному пользователю, входящему в группу "auth", запустить код с правами root при включении в системе аутентификации через S/Key или YubiKey (по умолчанию не активны). Вхождение в группу "auth", доступ к которой может быть получен через эксплуатацию вышеотмеченной уязвимости в xlock, позволяет записать файлы в каталоги /etc/skey и /var/db/yubikey. Например, атакующий может добавить новый файл /etc/skey/root для генерации одноразовых ключей для аутентификации под пользователем root через S/Key.
➡️ https://nsprg.ru/vis08
Компания Qualys выявила четыре уязвимости в OpenBSD, одна из которых позволяет удалённо подключиться без аутентификации к некоторым сетевым сервисам, а три остальные повысить свои привилегии в системе. В отчёте Qualys отмечена быстрая реакция разработчиков OpenBSD - все проблемы были устранены в OpenBSD 6.5 и OpenBSD 6.6 в течение 40 часов после приватного уведомления.
Удалённо эксплуатируемая уязвимость вызвана ошибкой при организации вызова обработчика аутентификации в библиотеке libc, которая вызывает программу /usr/libexec/auth/loginstyle с передачей аргументов в командной строке. В том числе при вызове loginstyle при помощи опционального параметра "-s service" допускается передача названия протокола. В случае использования в начале имени пользователя символа "-", данное имя будет обработано как опция при запуске loginstyle. Соответственно, если указать при аутентификации в качестве имени пользователя "-schallenge" или "-schallenge:passwd" то loginstyle воспримет обращение как запрос использования обработчика S/Key.
Проблема в том, что протокол S/Key в loginstyle поддерживается лишь формально, а фактически игнорируется с выводом признака успешной аутентификации. Таким образом, атакующий может, представившись пользователем "-schallenge", обойти аутентификацию и получить доступ без указания пароля или ключей. Потенциально проблеме подвержены все сетевые сервисы, использующие штатные вызовы libc для проведения аутентификации. Например, возможность обращения в обход аутентификации подтверждена в smtpd (AUTH PLAIN), ldapd и radiusd.
В sshd уязвимость не проявляется, так как в нём имеется дополнительная защита с проверкой присутствия пользователя в системе. Тем не менее, sshd можно использовать для проверки подверженности системы уязвимости - при обращении с именем пользователя "-sresponse:passwd" соединение зависает, так как sshd ждёт от loginpasswd возвращения параметров вызова (challenge), а loginpasswd ждет передачи недостающих параметров (имя "-sresponse" воспринимается как опция). Потенциально локальный атакующий может попытаться обойти аутентификацию в утилите su, но передача имени "-sresponse" приводит к краху процесса из-за возвращения нулевого указателя при выполнении функции getpwnamr("-schallenge", ...).
Другие уязвимости:
- CVE-2019-19520 - локальное повышение привилегий через манипуляции с утилитой xlock, поставляемой с флагом sgid, меняющим группу на "auth". В коде xlock переопределение путей к библиотекам запрещается только при смене идентификатора пользователя (suid), что позволяет атакующему изменить переменную окружения "LIBGLDRIVERSPATH" и организовать загрузку своей разделяемой библиотеки, код которой будет выполнен после повышения привилегий до группы "auth".
- CVE-2019-19522 - позволяет локальному пользователю, входящему в группу "auth", запустить код с правами root при включении в системе аутентификации через S/Key или YubiKey (по умолчанию не активны). Вхождение в группу "auth", доступ к которой может быть получен через эксплуатацию вышеотмеченной уязвимости в xlock, позволяет записать файлы в каталоги /etc/skey и /var/db/yubikey. Например, атакующий может добавить новый файл /etc/skey/root для генерации одноразовых ключей для аутентификации под пользователем root через S/Key.
➡️ https://nsprg.ru/vis08