
PoC para explorar o driver dispatcher da Lenovo (LnvMSRIO.sys) (CVE-2025-8061)
Esta é uma prova de conceito básica para explorar o driver lenovo dispatcher (LnvMSRIO.sys) (CVE-2025-8061). Vulnerabilidades encontradas por Luis Casvella (fonte: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
A ideia principal deste poc é explorar apenas as primitivas de leitura/escrita, para roubar o token do sistema do ntoskrnl.exe. Para isso, o poc usa o Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/) para conseguir traduzir endereços virtuais para endereços físicos no modo de usuário.
Ao usar o superfetch, podemos traduzir endereços virtuais para físicos para fornecê-los diretamente ao driver vulnerável, o que nos permite ler e escrever qualquer endereço que quisermos. Com isso, o poc irá apenas sobrescrever o início da função NtAddAtom definida no ntoskrnl.exe com um pequeno shellcode para saltar para o shellcode em modo de usuário, definido em nosso código rust (steal_kernel_token_shellcode_fn em base.rs) usando assembly inline. Esse pequeno shellcode é gerado em generate_jmp_user_shellcode, e como podemos ver, ele irá desabilitar o bit 20 no CR4 para desativar o SMEP, para então chamar nosso shellcode de userland (para roubar o token do sistema) e finalmente reabilitar o SMEP.
Com tudo isso, obteremos nosso cmd de sistema.
IMPORTANTE: é necessário executar como administrador para consultar o superfetch.
Foi testado no Windows 10 (22h2) e no Windows 11 (25h2). Ajuste os offsets conforme necessário para sua versão do Windows.