Исправлена ошибка Microsoft Windows — спустя 20 лет
Еще в мае исследователь Google Project Zero Тэвис Орманди обнаружил серьезную ошибку, в первую очередь затрагивающую всех пользователей Microsoft Windows. Ошибка (CVE-2019-1162) конкретно влияет на основную часть платформы текстовых служб. На самом деле этой ошибке уже 20 лет, и при правильном использовании она может дать непривилегированному злоумышленнику полные системные привилегии.
Причина этого объясняется в обширном исследовательском документе Орманди следующим образом:
- 1. Порт ctfmon ALPC доступен между сеансами, что позволяет пользователям компрометировать других пользователей системы.
- 2. UIPI можно обойти, отправив события ввода в окна с более высокой целостностью. Это выход из песочницы AppContainer или IL.
- 3. Клиент msctf отключает UIPI для окон событий Marshal. Насколько я могу судить, в этом нет необходимости, только ctfmon должен отправлять эти сообщения, что уже является высокой целостностью.
- 4. Команда MSG_CALLSTUB не проверяет индекс команды, что позволяет выполнять произвольный код.
- 4а. Откровенно говоря, даже если вы вызываете законную заглушку, вам часто доверяют указатели Marshal через интерфейс.
Ошибка эксплуатируется в следующем сценарии, представленном Ormandy:
* Войдите в сеанс 1 как администратор. * Убедитесь, что у вас нет открытой копии блокнота. * Используйте быстрое переключение пользователей (например, Ctrl-Alt-Del, Switch User) для создания непривилегированного стандартного пользовательского сеанса. * Создайте файл, содержащий следующие команды. BCBCBCBCBCBC setarg 0x10001 0x41414145 setarg 0x201 0x41414146 callstub 0 0 3 quit Выполните следующую команду: PS Z:Home> cat.script.txt |.ctftool.exe * Используйте быстрое переключение пользователей, чтобы вернуться к сеансу 1. * Запустите windbg -cg 'notepad.exe' * Подождите 10 секунд, обратите внимание, что блокнот разыменовывает 0x41414141. Это доказывает, что непривилегированный пользователь может взаимодействовать с процессами в привилегированном сеансе. UIPI можно обойти, отправив события ввода в окна с более высокой целостностью.
Как видно, атаку не так уж сложно осуществить, и вполне логично, что Орманди беспокоился о возможных последующих атаках. Однако, согласно более поздним комментариям Орманди, Microsoft поначалу не уделяла приоритетное внимание исправлению ошибки Windows. Первоначально Microsoft заявляла, что их команда инженеров будет работать над решениями в июне, но после этого компания, по-видимому, проигнорировала любые запросы на обновления или свидетельства наличия решений. По этой причине Орманди обнародовал данные и держал Microsoft в ежовых рукавицах.
Стратегия сработала, так как примерно через три месяца компания запустила серию событий, которые привели к выпуску патча. Теперь это доступно для всех, кто работает под управлением Windows. Не игнорируйте это исправление, так как общедоступная информация о методе атаки подвергает людей большему риску. Всегда есть уловка-22, связанная с раскрытием ошибок для общественности перед исправлением, но если компания не проявляет инициативы по исправлению, не так много других доступных вариантов.