Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этой статье речь пойдет об уязвимости, позволяющей выполнить локальное повышение привилегий (LPE) в операционных системах семейства Windows. Баг напрямую связан с NTLM-аутентификацией, поэтому сначала поговорим о том, как она устроена, а потом перейдем непосредственно к разбору CVE-2023-21746.
Предположим, пользователь хочет получить доступ к файловому ресурсу на другом компьютере или сервере. Аутентификация выполняется в четыре этапа:
Рассмотрим локальную аутентификацию NTLM, которая начинается с аутентификации пользователя на самой машине.
Эта аутентификация выполняется следующим образом:
Далее срабатывает рассмотренный выше механизм, основанный на модели клиент — сервер.
Локальная аутентификация NTLM — это частный случай, она применяется, когда клиентская и серверная части работают на одной машине.
Клиент получает учетные данные вошедшего в систему пользователя и создает запрос, содержащий имя рабочей станции и домена клиента.
Сообщение типа 1. Клиент посылает это сообщение для начала соединения. Оно используется для согласования параметров аутентификации, как и раньше, но также содержит имя клиентской машины и ее домен. Сервер может проверить имя и домен клиента, и, если они совпадают с его собственными, начинается процесс локальной аутентификации.
Сообщение типа 2. Сервер создает контекст безопасности, вызывая функцию AcceptSecurityContext (NTLM)
, и в этом сообщении отправляет клиенту его идентификатор. Затем клиент может использовать идентификатор контекста безопасности, чтобы связать себя с соединением.
Сообщение 3-го типа. Клиент получает токен и передает его в InitializeSecurityContext (NTLM)
. Если InitializeSecurityContext (NTLM)
возвращает SEC_E_OK
, то взаимная аутентификация завершена и можно начинать защищенный сеанс. Если же он возвращает код ошибки, то переговоры о взаимной аутентификации завершаются. В противном случае токен безопасности, возвращенный InitializeSecurityContext (NTLM)
, отправляется клиенту и шаги 2 и 3 повторяются.
LocalPotato использует недостаток в механизме локальной аутентификации NTLM. Эксплоит обманывает привилегированный процесс и заставляет аутентифицировать сеанс, запущенный хакером. В результате атакующий получает соединение, предоставляющее ему доступ к любым ресурсам с привилегиями обманутого процесса.
«Картошка» работает следующим образом:
До сих пор мы использовали LocalPotato для записи любых файлов на целевую машину. Чтобы получить привилегированную оболочку, нам нужно выяснить, как использовать произвольную запись для выполнения команды.
Источник: xakep.ru