Анализ 0day-уязвимости Windows: от повышения прав в win32k до рисков безопасности Web3

robot
Генерация тезисов в процессе

Анализ и использование уязвимости 0day в системе Windows от Microsoft

Недавно в безопасности обновления, выпущенного Microsoft, был исправлен уязвимость повышения привилегий win32k, которая активно эксплуатируется. Эта уязвимость в основном затрагивает ранние версии операционной системы Windows, и, похоже, не может быть вызвана в Windows 11. В этой статье будет проанализировано, как в текущей безопасной среде злоумышленники могут продолжать использовать такие уязвимости. Следующий анализ выполнен в среде Windows Server 2016.

Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровне

Фон уязвимости

0day уязвимость относится к нераскрытой и неустраненной безопасности уязвимости, аналогичной концепции T+0 в финансовых рынках. Если такие уязвимости будут злоупотреблены, они могут нанести серьезный ущерб. Обнаруженная уязвимость 0day в системе Windows позволяет злоумышленникам получить полный контроль над системой, что может привести к кражам информации, разрушению систем, внедрению вредоносного ПО и другим атакам. С точки зрения Web3 это может привести к краже приватных ключей, перемещению цифровых активов и даже угрожать всей экосистеме Web3, основанной на инфраструктуре Web2.

Numen эксклюзив: уязвимость 0day Microsoft может разрушить Web3 на системном + физическом уровне

Анализ патча

Анализ кода патча показал, что он в основном исправляет проблему с обработкой счётчика ссылок на объекты. Исходя из комментариев к исходному коду win32k, можно понять, что оригинальный код блокировал только объект окна, но не блокировал объект меню в окне, что могло привести к неправильному обращению к объекту меню.

Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровнях

Проверка концепции эксплуатации уязвимостей ( PoC )

Анализ показывает, что состояние MenuItemState в функции xxxEnableMenuItem может возвращать главное меню окна или подменю. Мы создали специальную четырехуровневую структуру меню, содержащую следующие характеристики:

  1. Идентификатор самого нижнего уровня меню D должен быть типом системного меню.
  2. Верхнее меню A также должно быть системным меню, но необходимо удалить элементы с тем же ID, что и у меню D.
  3. Удалите ссылку на меню C в меню B.
  4. Наличие меню B, похоже, способствует выпуску меню C.

При активации уязвимости, при возврате на пользовательский уровень из xxxRedrawTitle, необходимо удалить связь между меню C и B, освободив меню C. Это приводит к тому, что последующая ссылка на недействительный объект меню C в функции xxxEnableMenuItem.

Numen эксклюзив: уязвимость 0day Microsoft может изменить игру Web3 на системном и физическом уровнях

Использование уязвимости ( Exp )

Общая идея

Рассмотрите два возможных направления использования:

  1. Выполнение shell-кода: см. ранние уязвимости, такие как CVE-2017-0263, но в новых версиях Windows могут возникнуть множество препятствий.

  2. Использование примитивов чтения и записи для изменения токена: в последние годы все еще существует открытый exp, который можно использовать в качестве примера, в основном необходимо решить вопрос, как впервые контролировать значение cbwndextra.

Мы используем второй вариант, разделив exp на два этапа: управление значением cbwndextra и создание стабильных примитивов чтения и записи.

![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровне](https://img-cdn.gateio.im/webp-social/moments-1cc94ddafacec491507491eef9195858.webp01

) Первоначальная запись данных

Используйте имя объекта класса окна WNDClass для захвата и освобождения памяти объекта меню. Найдите место для записи данных в функции xxxRedrawWindow и управляйте данными памяти предыдущего объекта, чтобы удовлетворить проверку флага в функции.

![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-697c5814db02534f63b44c0d1d692f83.webp(

) стабильная память

Разработать макет памяти для трех последовательных объектов HWND по 0x250 байт, освободить промежуточный объект и занять его объектом HWNDClass. Передние и задние объекты HWND используются для проверки через функции и реализации операций чтения и записи. Точная локализация расположения объектов осуществляется через утечку адреса ядровой дескриптора.

![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b0942592135ac96c6279544a62022329.webp(

) Реализация примитивов чтения и записи

Для произвольного чтения используется функция GetMenuBarInfo, для произвольной записи используется функция SetClassLongPtr. За исключением записи TOKEN, все другие операции записи выполняются через объект класса первого окна.

![Numen эксклюзив: уязвимость 0day от Microsoft может разрушить Web3 игру на системном и физическом уровнях]###https://img-cdn.gateio.im/webp-social/moments-b06b098af4f07260fdc03a75da160706.webp(

Заключение

  1. Microsoft использует Rust для переписывания кода win32k, что в будущем может полностью решить такие уязвимости.

  2. Эксплуатация таких уязвимостей в основном зависит от утечки адресов дескрипторов стека, что по-прежнему представляет собой угрозу безопасности для устаревших систем.

  3. Обнаружение этой уязвимости, возможно, стало результатом более тщательной проверки покрытия кода.

  4. Мониторинг аномального распределения памяти и чтения/записи данных окна помогает выявить аналогичные уязвимости.

Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Награда
  • 6
  • Поделиться
комментарий
0/400
TestnetNomadvip
· 9ч назад
Что ты говоришь о Rust?
Посмотреть ОригиналОтветить0
StealthDeployervip
· 9ч назад
Давно перешел на Linux, мудро.
Посмотреть ОригиналОтветить0
CryptoMotivatorvip
· 9ч назад
Опять что-то натворили, этот баг у Microsoft действительно традиционный.
Посмотреть ОригиналОтветить0
LiquidatedDreamsvip
· 9ч назад
Постоянно использовать Microsoft — это ловушка.
Посмотреть ОригиналОтветить0
MondayYoloFridayCryvip
· 9ч назад
Я самый слабый розничный инвестор в Web3

Комментарий к статье:

rust сможет спасти win? Это смешно.
Посмотреть ОригиналОтветить0
CrashHotlinevip
· 9ч назад
Снова возникла проблема с этим мусорным WinXP.
Посмотреть ОригиналОтветить0
  • Закрепить