
Lenovo Diagnostics Driver EoP - произвольное чтение/запись
Некорректный контроль доступа в драйвере Lenovo Diagnostics позволяет непривилегированному пользователю отправлять IOCTL-запросы к устройству для выполнения произвольного чтения/записи физической/виртуальной памяти.
Спасибо ch3rn0byl за помощь (и я на все 100% стащил две его функции).
IOCTL 0x222000:
IOCTL 0x222008/0x22200C:
IOCTL 0x222010:
IOCTL 0x222014:
Запись через MmMapIoSpace
Этот IOCTL копирует значение из указателя, переданного во входном буфере, в отображаемую физическую память
Чтобы разрешить MmPteBase и другие предусловия, находится физическое «swap»-пространство путём поиска 8 нулевых байтов в диапазоне физической памяти 0x1000 - 0x10000.
Как только это пространство найдено, виртуальная память копируется в это «swap»-пространство через IOCTL 0x222014 и считывается обратно с помощью IOCTL 0x222010.
На данный момент ВСЕ операции чтения виртуальной памяти выполняются через это «swap»-пространство.
Лучший ли это способ выполнять виртуальное чтение/запись? Вероятно, нет.
Работает ли это? Да.
Ах да, и смотрите за своими смещениями — тестировалось на Windows 11 21H2 с отключённым HVCI.