
PoC per sfruttare il driver dispatcher Lenovo (LnvMSRIO.sys) (CVE-2025-8061)
Questa è una proof of concept di base per sfruttare il driver dispatcher di Lenovo (LnvMSRIO.sys) (CVE-2025-8061). Le vulnerabilità sono state trovate da Luis Casvella (fonte: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
L'idea principale di questa PoC è sfruttare solo le primitive di lettura/scrittura per rubare il token di sistema da ntoskrnl.exe. Per fare ciò, la PoC usa Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/) per poter tradurre gli indirizzi virtuali in indirizzi fisici in modalità utente.
Usando Superfetch, possiamo tradurre gli indirizzi virtuali in fisici per fornirli direttamente al driver vulnerabile, il che ci permette di leggere e scrivere qualsiasi indirizzo vogliamo. Con questo, la PoC sovrascriverà semplicemente l'inizio della funzione NtAddAtom definita in ntoskrnl.exe con un piccolo shellcode per saltare allo shellcode in modalità utente, definito nel nostro codice Rust (steal_kernel_token_shellcode_fn in base.rs) usando assembly inline. Questo piccolo shellcode è generato in generate_jmp_user_shellcode e, come possiamo vedere, azzererà il bit 20 in CR4 per disabilitare SMEP, per poi chiamare il nostro shellcode in userland (per rubare il token di sistema) e infine riabilitare SMEP.
Con tutto questo, otterremo la nostra cmd di sistema.
IMPORTANTE: per interrogare Superfetch è richiesta l'esecuzione come amministratore.
È stato testato su Windows 10 (22h2) e Windows 11 (25h2). Regola gli offset in base alla tua versione di Windows.