LPE, Windows 7 & Windows Server 2008, CVE-2019-0808

weaver

HDD-drive
Модератор
Регистрация
19.12.2018
Сообщения
41
Оценка реакций
25
Баллы
18
Основная причина уязвимости ядра, приводящей к повышению привилегий - CVE-2019-0808

By Chengdu Security Response Center of 360 Core Security

Ежемесячные обновления безопасности, выпущенные Microsoft 12 марта 2019 года, исправляли две уязвимости нулевого дня для Windows, которые использовались в дикой природе. CVE-2019-0808 был одним из них, который был обнаружен группой анализа угроз Google и передан в Microsoft. По словам Microsoft, эта уязвимость, затрагивающая компоненты Win32k, позволяет злоумышленникам повысить привилегии и выполнить произвольный код в режиме ядра. Анализ Google говорит, что уязвимость затрагивает только Windows 7 и Windows Server 2008. Windows 10 не будет затронута, потому что Microsoft ввела меры по снижению уязвимости в последней версии операционной системы. Учитывая, что некоторые пользователи все еще используют Windows 7, и эта уязвимость в сочетании с Chrome RCE (CVE-2019-5786) использовалась для реальных APT-атак, поэтому этот 0day, скорее всего, будет использоваться для выполнения крупномасштабных атак и создания реальных угроза. Таким образом, 360 Core Security Technique Center разработал POC и воспроизвел процесс запуска уязвимости, чтобы поставщики безопасности могли ссылаться на увеличение соответствующих мер защиты.

1. Основные причины
После получения объекта окна меню, возвращенного функцией оконной процедуры, функция xxxMNFindWindowFromPoint не проверяет действительность своего члена tagPOPUPMENU, в результате чего последующая функция MNGetpItemFromIndex вызывает задержку указателя NULL.

2. Эксплуатация уязвимости
image.png

Ниже приведен процесс разработки:
  • Шаг 1. Сначала необходимо настроить глобальную функцию перехвата сообщений для перехвата сообщения MN_FINDMENUWINDOWFROMPOINT, отправленного xxxMNFindWindowFromPoint.
    image.png
  • Шаг 2: Создан пункт меню с функцией перетаскивания и специальной ручкой окна hpwn для резервного копирования.
    image.png
image.png

  • Шаг 3: Войдите в функцию NtUserMNDragOver, перетаскивая меню или непосредственно вызывая соответствующий системный вызов.
image.png

  • Шаг 4. Последовательность вызовов функций: NtUserMNDragOver -> xxxMNMouseMove -> xxxMNFindWindowFromPoint. xxxMNFindWindowFromPoint отправил в окно сообщение MN_FINDMENUWINDOWFROMPOINT и получил возвращенный дескриптор окна. Поскольку была установлена глобальная функция перехвата сообщений, поток выполнения вернулся на уровень пользователя.
image.png

  • Шаг 5: Функция оконной процедуры окна меню была заменена, поэтому глобальная функция ловушки сообщений вошла в функцию FakeWindowProc после выполнения. Здесь он возвращается непосредственно к дескриптору окна hpwn, который был подготовлен заранее.
image.png

  • Шаг 6: После того, как функция xxxMNFindWindowFromPoint получила дескриптор окна, она напрямую вернула соответствующий объект окна и передала его в функцию xxxMNUpdateDraggingInfo. Следует отметить, что объект окна, полученный здесь, является поддельным объектом окна hpwn. Внутренний элемент tagPOPUPMENU не был установлен полностью, поэтому большинство членов имеют значение «0»!
image.png

  • Шаг 7: После того, как функция xxxMNUpdateDraggingInfo получила объект окна, она получила доступ к своему объекту-члену tagPOPUPMENU через функцию MNGetpItem.
image.png


Функция MNGetpItem продолжала обращаться к члену spmenu объекта tagPOPUPMENU, вызывая уязвимость разыменования нулевого указателя.

image.png


image.png


3. Патч
В ежемесячных исправлениях в марте Microsoft исправляла путаницу с типом окна (не NULL для типа MENU) и проверяла состояние объекта popupMenu. Сравнение кода было проведено до и после исправления следующим образом:

До:
image.png


После:
image.png


4. Заключение
Посредством созданного POC обнаруживается, что уязвимость срабатывает, когда при определенных обстоятельствах вызывается функция NtUserMNDragOver, что вызывает разыменование указателя NULL в win32k! MNGetpItemFromIndex. Уязвимость использует модуль драйвера ядра Windows win32k.sys для повышения локальных привилегий. После этого он может преодолеть ограничения пользовательских привилегий. Между тем, он также может помочь злоумышленникам выйти из песочницы, чтобы полностью контролировать компьютер жертвы.

Источник: hххp://blogs.360.cn/post/RootCause_CVE-2019-0808_EN.html
 
Последнее редактирование:

weaver

HDD-drive
Модератор
Регистрация
19.12.2018
Сообщения
41
Оценка реакций
25
Баллы
18
Вверх