
PoC para explotar el controlador dispatcher de Lenovo (LnvMSRIO.sys) (CVE-2025-8061)
Este es un concepto básico de prueba para explotar el controlador dispatcher de Lenovo (LnvMSRIO.sys) (CVE-2025-8061). Vulnerabilidades encontradas por Luis Casvella (fuente: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
La idea principal de este PoC es explotar únicamente las primitivas de lectura/escritura, para robar el token del sistema de ntoskrnl.exe. Para ello, el PoC utiliza Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/) para poder traducir direcciones virtuales a direcciones físicas en modo usuario.
Al usar Superfetch, podemos traducir direcciones virtuales a físicas para proporcionarlas directamente al controlador vulnerable, lo que nos permite leer y escribir cualquier dirección que queramos. Con eso, el PoC simplemente sobrescribirá el inicio de la función NtAddAtom definida en ntoskrnl.exe con un pequeño shellcode para saltar al shellcode de modo usuario, definido en nuestro código Rust (steal_kernel_token_shellcode_fn en base.rs) mediante ensamblado en línea. Este pequeño shellcode se genera en generate_jmp_user_shellcode y, como podemos ver, desactivará el bit 20 de CR4 para inhabilitar SMEP, para luego llamar a nuestro shellcode de espacio de usuario (para robar el token del sistema) y finalmente reactivar SMEP.
Con todo esto, obtendremos nuestra cmd de sistema.
IMPORTANTE: se requiere ejecutar como administrador para consultar Superfetch.
Se ha probado en Windows 10 (22h2) y Windows 11 (25h2). Ajusta los offsets según sea necesario para tu versión de Windows.