Аналитики Ник Петерсон (Nick Peterson) из Everdox Tech и Неманжа Муласмажич (Nemanja Mulasmajic) из triplefault.io опубликовали отчет о критической уязвимости, которую они обнаружили во всех популярных операционных системах, разработанных под чипсеты Intel и AMD.

Угроза была обнаружена в Windows, macOS, некоторых сборках Linux, FreeBSD, Red Hat, а также гипервизорах VMware и Xen. Она позволяет злоумышленникам выполнять вредоносный код в режиме ядра и контролировать низкоуровневые функции ОС. Расширенный список вендоров и статус уязвимости на их устройствах можно найти на сайте координационного центра CERT.

Уведомление о баге производители получили 30 апреля, и уже на следующий день начали выпускать первые исправления. На экстренное внедрение патчей ушла вся первая неделя мая.

По словам исследователей, баг затронул такое количество продуктов в связи с неточностями в документации по использованию инструкций MOV SS и POP SS. Они отвечают за обработку отладочных прерываний, в том числе немаскируемых (NMI). Из-за непонятного и, возможно, неполного описания этих функций разработчики ОС не смогли правильно настроить процесс взаимодействия с семантикой шлюза прерывания (Interrupt Gate).

Задача POP SS — не допустить ситуации, когда запрошенный стек программы оказался в противоречивом состоянии (inconsistent state), что может быть вызвано прерыванием. Помимо этого, современные системы используют инструкцию Int, чтобы позволять пользовательским приложениям обращаться к ядру. Вызов поступает в процессор в виде стека, который содержит идентификатор целевой программы.

Эксплойт уязвимости заключается в запуске Int, инициирующей прерывание, сразу после POP SS, которая его запрещает. В этой ситуации процессор начинает процедуру устранения ошибки, и чтобы не потерять идентификатор приложения, система пытается выдать ему статус исключения.

Однако вместо того, чтобы делать это до попадания стека в шлюз прерывания, отладчик производит эту операцию после. Баг нарушает работу системы, в некоторых случаях заставляя супервизор ОС (OS supervisor software) использовать данные сторонних программ.

Уязвимость получила идентификатор CVE-2018-8897. Ей нельзя воспользоваться удаленно — для того чтобы запустить код, необходимо предварительно заразить целевое устройство вредоносным ПО или войти в пользовательский аккаунт.

Процесс эксплуатации бага несколько отличается на устройствах под управлением Linux. Злоумышленник может существенно повысить свои привилегии, используя гостевую учетную запись KVM (Kernel-based Virtual Machine). Более того, вмешательство в работу прерываний может вызвать аварийный отказ операционной системы.

Категории: Уязвимости