Пожалуйста, обратите внимание, что пользователь заблокирован
Основная причина уязвимости ядра, приводящей к повышению привилегий - 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. Эксплуатация уязвимости
Ниже приведен процесс разработки:
Функция MNGetpItem продолжала обращаться к члену spmenu объекта tagPOPUPMENU, вызывая уязвимость разыменования нулевого указателя.
3. Патч
В ежемесячных исправлениях в марте Microsoft исправляла путаницу с типом окна (не NULL для типа MENU) и проверяла состояние объекта popupMenu. Сравнение кода было проведено до и после исправления следующим образом:
До:
После:
4. Заключение
Посредством созданного POC обнаруживается, что уязвимость срабатывает, когда при определенных обстоятельствах вызывается функция NtUserMNDragOver, что вызывает разыменование указателя NULL в win32k! MNGetpItemFromIndex. Уязвимость использует модуль драйвера ядра Windows win32k.sys для повышения локальных привилегий. После этого он может преодолеть ограничения пользовательских привилегий. Между тем, он также может помочь злоумышленникам выйти из песочницы, чтобы полностью контролировать компьютер жертвы.
Источник: hххp://blogs.360.cn/post/RootCause_CVE-2019-0808_EN.html
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. Эксплуатация уязвимости
Ниже приведен процесс разработки:
- Шаг 1. Сначала необходимо настроить глобальную функцию перехвата сообщений для перехвата сообщения MN_FINDMENUWINDOWFROMPOINT, отправленного xxxMNFindWindowFromPoint.
- Шаг 2: Создан пункт меню с функцией перетаскивания и специальной ручкой окна hpwn для резервного копирования.
- Шаг 3: Войдите в функцию NtUserMNDragOver, перетаскивая меню или непосредственно вызывая соответствующий системный вызов.
- Шаг 4. Последовательность вызовов функций: NtUserMNDragOver -> xxxMNMouseMove -> xxxMNFindWindowFromPoint. xxxMNFindWindowFromPoint отправил в окно сообщение MN_FINDMENUWINDOWFROMPOINT и получил возвращенный дескриптор окна. Поскольку была установлена глобальная функция перехвата сообщений, поток выполнения вернулся на уровень пользователя.
- Шаг 5: Функция оконной процедуры окна меню была заменена, поэтому глобальная функция ловушки сообщений вошла в функцию FakeWindowProc после выполнения. Здесь он возвращается непосредственно к дескриптору окна hpwn, который был подготовлен заранее.
- Шаг 6: После того, как функция xxxMNFindWindowFromPoint получила дескриптор окна, она напрямую вернула соответствующий объект окна и передала его в функцию xxxMNUpdateDraggingInfo. Следует отметить, что объект окна, полученный здесь, является поддельным объектом окна hpwn. Внутренний элемент tagPOPUPMENU не был установлен полностью, поэтому большинство членов имеют значение «0»!
- Шаг 7: После того, как функция xxxMNUpdateDraggingInfo получила объект окна, она получила доступ к своему объекту-члену tagPOPUPMENU через функцию MNGetpItem.
Функция MNGetpItem продолжала обращаться к члену spmenu объекта tagPOPUPMENU, вызывая уязвимость разыменования нулевого указателя.
3. Патч
В ежемесячных исправлениях в марте Microsoft исправляла путаницу с типом окна (не NULL для типа MENU) и проверяла состояние объекта popupMenu. Сравнение кода было проведено до и после исправления следующим образом:
До:
После:
4. Заключение
Посредством созданного POC обнаруживается, что уязвимость срабатывает, когда при определенных обстоятельствах вызывается функция NtUserMNDragOver, что вызывает разыменование указателя NULL в win32k! MNGetpItemFromIndex. Уязвимость использует модуль драйвера ядра Windows win32k.sys для повышения локальных привилегий. После этого он может преодолеть ограничения пользовательских привилегий. Между тем, он также может помочь злоумышленникам выйти из песочницы, чтобы полностью контролировать компьютер жертвы.
Источник: hххp://blogs.360.cn/post/RootCause_CVE-2019-0808_EN.html
Последнее редактирование: