Малварь как искусство Повышение привилегий через StorSvc (CVE-2024-26238)


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 125
Репутация
8 243
Одна из последний критичных уязвимостей винды:

Предлагаю рассмотреть как можно проэксплуатировать.)

StorSvc — это служба, которая работает от имени NT AUTHORITY\SYSTEM и пытается загрузить отсутствующую библиотеку SprintCSP.dll при вызове локального метода SvcRebootToFlashingMode через RPC.

Описание RPC-метод StorSvc.dll!SvcRebootToFlashingMode вызывает StorSvc.dll!InitResetPhone, который также вызывает StorSvc.dll!ResetPhoneWorkerCallback, пытающийся загрузить SprintCSP.dll, как показано на изображении ниже:

1716734936416.png

Поскольку эта DLL отсутствует, она загружается в соответствии с порядком поиска DLL, и мы можем воспользоваться этим поведением, поместив вредоносную DLL в папку, доступную для записи, которая содержится в системном пути %PATH%. В результате вредоносная DLL должна быть выполнена с привилегиями SYSTEM.

Стоит отметить, что служба запускается от имени NT AUTHORITY\SYSTEM в группе служб LocalSystemNetworkRestricted, которая обладает следующими привилегиями:

Имя привилегииОписаниеСостояние
SeTcbPrivilegeДействовать как часть операционной системыВключено
SeLoadDriverPrivilegeЗагрузка и выгрузка драйверов устройствОтключено
SeBackupPrivilegeРезервное копирование файлов и каталоговОтключено
SeRestorePrivilegeВосстановление файлов и каталоговОтключено
SeSystemEnvironmentPrivilegeИзменение значений среды прошивкиОтключено
SeChangeNotifyPrivilegeОбход проверки обходаВключено
SeManageVolumePrivilegeВыполнение задач обслуживания томовВключено

Командная строка, соответствующая этой службе, выглядит так: C:\Windows\System32\svchost.exe -k LocalSystemNetworkRestricted -p -s StorSvc.

Как можно проэксплуатировать:
В этом репозитории мы предоставляем два различных исходных кода:

  • RpcClient.exe: который инициирует вызов RPC.
  • SprintCSP.dll: которую можно разместить для эксплуатации захвата DLL. Этот PoC выполняет команду whoami и записывает результат в C:\ProgramData\whoamiall.txt. Если вы хотите расширить функциональность этого PoC, вы можете изменить функцию DoStuff() в файле main.c.
Предоставленный эксплойт должен работать по умолчанию и был протестирован на Windows 10, Windows 11, Windows Server 2019 и Windows Server 2022. Чтобы он работал, необходимо изменить макрос #define в файле storsvc_c.c, чтобы эксплойт был адаптирован к операционной системе целевой машины.

После инициирования эксплойта необходимо остановить или перезагрузить службу, что уже делает SprintCSP.dll.

Шаги:
  1. Найдите доступный для записи системный путь с помощью команды reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -v Path.
  2. Скопируйте SprintCSP.dll в доступный для записи путь.
  3. Выполните RpcClient.exe.
  4. Проверьте файл C:\ProgramData\whoamiall.txt.

Демонстрация:
 
Последнее редактирование:

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 125
Репутация
8 243
RUXIM (Reusable UX Integration Manager) – это компонент, используемый Центром обновления Windows в Windows 10. PLUGScheduler – это запланированная задача, часть RUXIM, расположенная в \Microsoft\Windows\WindowsUpdate\RUXIM и выполняющаяся от имени SYSTEM.

Проблема(ы) Исполняемый файл PLUGScheduler.exe выполняет операции с файлами, такие как удаление и переименование, от имени SYSTEM в каталоге, где обычные пользователи имеют частичный контроль. Это приводит к возможности произвольной записи файлов от имени SYSTEM.

Хронология

ДатаОписание
2024.01.22Уведомление отправлено в MSRC
2024.02.01Уязвимость подтверждена MSRC
2024.05.14Уязвимости присвоен CVE-2024-26238 и исправлена в KB5037768
2024.05.24Публичный релиз

ТЕХНИЧЕСКИЕ ДЕТАЛИ​


Описание Когда запускается запланированная задача PLUGScheduler, выполняется исполняемый файл C:\Program Files\RUXIM\PLUGScheduler.exe от имени SYSTEM.

Этот файл создает папку C:\ProgramData\PLUG\Logs, если она не существует. Затем он удаляет файл RUXIMLog.050.etl и переименовывает все файлы с форматом RUXIMLog.XXX.etl. В частности, файл RUXIMLog.049.etl сначала переименовывается в RUXIMLog.050.etl, затем RUXIMLog.048.etl в RUXIMLog.049.etl и так далее, пока RUXIMLog.001.etl не будет переименован в RUXIMLog.002.etl.

В конце концов, запускается сессия трассировки событий в файл RUXIMLog.001.etl.

Папка C:\ProgramData\PLUG\Logs имеет разрешительные ACL для обычных пользователей. В частности, встроенные пользователи могут:

  • Создавать файлы в папке Logs.
  • Создавать папки в папке Logs.
  • Записывать атрибуты папки Logs.
Возможность записывать атрибуты папки Logs позволяет обычному пользователю добавить точку соединения, чтобы Logs перенаправлялась в каталог объектов \RPC Control. Затем могут быть созданы две символические ссылки Object Manager:
  • \RPC Control\RUXIMLog.049.etl -> C:\path\to\attacker\controlled\file
  • \RPC Control\RUXIMLog.050.etl -> C:\eop.txt
При следующем запуске PLUGScheduler.exe файл RUXIMLog.049.etl будет переименован в RUXIMLog.050.etl. Из-за ранее установленных ссылок файл, контролируемый атакующим, будет перемещен в C:\eop.txt, что приведет к произвольной записи файлов от имени SYSTEM.

Однако для добавления точки соединения в каталог Logs, последний должен быть пустым. Проблема в том, что файлы в папке Logs не могут быть удалены обычными пользователями (только SYSTEM и Администраторы имеют необходимые привилегии). Перед переименованием файла PLUGScheduler.exe использует функцию GetFileAttributesW, чтобы проверить, соответствует ли путь файлу. Если это не так, он ничего не делает и переходит к следующему файлу. Таким образом, если RUXIMLog.001.etl является каталогом, он не будет переименован в RUXIMLog.002.etl.

Рассмотрим следующее содержимое папки Logs:

Logs
|__ RUXIMLog.001.etl (каталог)
|__ RUXIMLog.002.etl (файл)
|__ RUXIMLog.003.etl (файл)

После выполнения PLUGScheduler каталог будет выглядеть следующим образом:

Logs
|__ RUXIMLog.001.etl (каталог)
|__ RUXIMLog.003.etl (файл)
|__ RUXIMLog.004.etl (файл)

После 47 запусков задачи каталог будет выглядеть так:

Logs
|__ RUXIMLog.001.etl (каталог)
|__ RUXIMLog.049.etl (файл)
|__ RUXIMLog.050.etl (файл)

При следующем выполнении задачи файл RUXIMLog.050.etl будет удален, а файл RUXIMLog.049.etl переименован в RUXIMLog.050.etl. Таким образом, через это поведение можно запускать задачу достаточно раз, чтобы все файлы в каталоге C:\ProgramData\PLUG\Logs были удалены.

Последняя оставшаяся проблема – создание каталога RUXIMLog.001.etl, так как файл RUXIMLog.001.etl не может быть удален обычными пользователями.

Существует небольшое временное окно между моментом удаления файла RUXIMLog.001.etl и моментом его повторного создания как файла трассировки событий. Поэтому возможно создать каталог между этими двумя действиями. Гонка условий может быть выиграна легко в несколько попыток, создав запланированную задачу от имени текущего пользователя, которая запускается при каждом входе в систему.

Запланированная задача будет пытаться создать каталог RUXIMLog.001.etl в бесконечном цикле, пока не удастся. Было обнаружено, что для надежного выигрыша гонки программа должна быть скомпилирована как графическое приложение Windows, а не консольное приложение (вероятно, потому что для консольного приложения отображается окно cmd).

Запланированная задача PLUGScheduler запускается при каждом входе в систему, а также раз в день в фиксированное время. Поэтому обычный пользователь может запускать ее, выходя из системы и снова входя. Стратегия эксплуатации следующая:
  1. Настройте запланированную задачу от имени текущего пользователя, с триггером при каждом входе в систему. Эта задача будет пытаться создать каталог RUXIMLog.001.etl в C:\ProgramData\PLUG\Logs. Выйдите из системы и войдите снова, пока гонка условий не будет выиграна и каталог не будет создан (обычно требуется несколько попыток).
  2. Когда каталог создан, выходите из системы и входите снова, пока в C:\ProgramData\PLUG\Logs не останется только одна запись: каталог RUXIMLog.001.etl.
  3. Удалите каталог RUXIMLog.001.etl.
  4. Настройте точку соединения C:\ProgramData\PLUG\Logs -> \RPC Control.
  5. Настройте символическую ссылку Object Manager \RPC Control\RUXIMLog.049.etl -> C:\path\to\attacker\controlled\file.
  6. Настройте символическую ссылку Object Manager \RPC Control\RUXIMLog.050.etl -> C:\eop.txt.
  7. Выйдите из системы и войдите снова: файл, контролируемый атакующим, был перемещен в C:\eop.txt.
Таким образом можно скопировать вредоносную DLL в Path.
 
Верх Низ