
PoC для эксплуатации диспетчерского драйвера Lenovo (LnvMSRIO.sys) (CVE-2025-8061)
Это базовый proof-of-concept (PoC) для эксплуатации драйвера Lenovo Dispatcher (LnvMSRIO.sys) (CVE-2025-8061). Уязвимости обнаружены Luis Casvella (источник: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
Основная идея этого PoC — использовать только примитивы чтения/записи, чтобы похитить системный токен из ntoskrnl.exe. Для этого PoC использует Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/), чтобы иметь возможность преобразовывать виртуальные адреса в физические в пользовательском режиме.
С помощью Superfetch мы можем преобразовывать виртуальные адреса в физические и напрямую передавать их уязвимому драйверу, что позволяет читать и записывать любой нужный адрес. Далее PoC просто перезаписывает начало функции NtAddAtom, определённой в ntoskrnl.exe, небольшим шеллкодом, который переходит к шеллкоду в пользовательском режиме, определённому в нашем rust-коде (steal_kernel_token_shellcode_fn в base.rs) с помощью встроенного ассемблера. Этот небольшой шеллкод генерируется в generate_jmp_user_shellcode, и, как можно видеть, он сбрасывает 20-й бит в CR4 для отключения SMEP, затем вызывает наш пользовательский шеллкод (для кражи системного токена) и, наконец, снова включает SMEP.
Благодаря всему этому мы получим системную cmd.
ВАЖНО: для обращения к Superfetch требуется запуск от имени администратора.
Протестировано на Windows 10 (22h2) и Windows 11 (25h2). Настройте смещения в соответствии с вашей версией Windows.