Рождественский эксплойт для Nvvsvc.exe

Английский специалист по ИТ-безопасности Питер Винтер-Смит (Peter Winter-Smith) сделал рождественский подарок сообществу, опубликовав 25 декабря интересный эксплойт для Nvidia Display Driver Service (Nvvsvc.exe), в том числе подробное описание уязвимости и код самого эксплойта.

В Nvvsvc.exe происходит переполнение буфера из-за некорректного проведения операции memmove. Эксплойт использует эту ошибку и позволяет обойти механизмы защиты памяти DEP и ASLR, после чего становится возможным выполнение произвольного кода со стороны любого авторизованного пользователя или удалённого пользователя в домене Windows.

Некорректное проведение операции memmove происходит таким образом: эта функция переносит данные из буфера received-data в буфер response-buf, не проверяя их. При этом возможно определить, с какого места в буфере received-data начинается считывание данных, если внедрить строку переменной длины, которая одновременно является частью протокола и сообщает количество байтов, скопированных в буфер. Дело в том, что в именованный конвейер pipensvr поступает в точности такое же количество байтов, какое передаётся в буфер, а не фиксированное число с максимальным значением байтов, которые буфер способен принять. За счёт этой утечки данных становится возможным считывание стека, путём копирования данных с конца буфера received-data, через буфер received-data, который изначально имеет значение, равное нулю. Получается, что путём последовательного считывания можно получить всё содержимое стека, а именно: locals, received-data, response-buf, stack cookie, return address, arg space, etc.

Опубликованный эксплойт осуществляет последующую эксплуатацию уязвимости, внедряя в память исполняемый код, используя данные stack cookie. Эксплойт проверен под Win7/x64, на компьютере Dell XPS 15 с видеокартой NVidia GT540M и последней версией драйверов.