
Хакер #311. Сетевые протоколы под микроскопом
Английский специалист по ИТ-безопасности Питер Винтер-Смит (Peter Winter-Smith) сделал рождественский подарок сообществу, опубликовав 25 декабря интересный эксплойт для Nvidia Display Driver Service (Nvvsvc.exe), в том числе подробное описание уязвимости и код самого эксплойта.
В Nvvsvc.exe происходит переполнение буфера из-за некорректного проведения операции memmove
. Эксплойт использует эту ошибку и позволяет обойти механизмы защиты памяти DEP и ASLR, после чего становится возможным выполнение произвольного кода со стороны любого авторизованного пользователя или удалённого пользователя в домене Windows.
Некорректное проведение операции memmove
происходит таким образом: эта функция переносит данные из буфера received-data
в буфер response-buf
, не проверяя их. При этом возможно определить, с какого места в буфере received-data
начинается считывание данных, если внедрить строку переменной длины, которая одновременно является частью протокола и сообщает количество байтов, скопированных в буфер. Дело в том, что в именованный конвейер \pipe\nsvr
поступает в точности такое же количество байтов, какое передаётся в буфер, а не фиксированное число с максимальным значением байтов, которые буфер способен принять. За счёт этой утечки данных становится возможным считывание стека, путём копирования данных с конца буфера 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 и последней версией драйверов.