
PoC pour exploiter le pilote Lenovo Dispatcher (LnvMSRIO.sys) (CVE-2025-8061)
Ceci est une preuve de concept basique pour exploiter le pilote Lenovo Dispatcher (LnvMSRIO.sys) (CVE-2025-8061). Vulnérabilités découvertes par Luis Casvella (source : https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
L'idée principale de ce POC est d'exploiter uniquement les primitives de lecture/écriture pour voler le jeton système depuis ntoskrnl.exe. Pour ce faire, le POC utilise Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/) afin de pouvoir traduire des adresses virtuelles en adresses physiques en mode utilisateur.
En utilisant Superfetch, nous pouvons traduire des adresses virtuelles en adresses physiques pour les fournir directement au pilote vulnérable, ce qui nous permet de lire et d'écrire n'importe quelle adresse. Avec cela, le POC va écraser le début de la fonction NtAddAtom définie dans ntoskrnl.exe avec un petit shellcode pour sauter vers le shellcode en mode utilisateur, défini dans notre code Rust (steal_kernel_token_shellcode_fn dans base.rs) en utilisant de l'assembleur en ligne. Ce petit shellcode est généré dans generate_jmp_user_shellcode, et comme on peut le voir, il va désactiver le 20ᵉ bit dans CR4 pour désactiver SMEP, puis appeler notre shellcode en mode utilisateur (pour voler le jeton système) et enfin réactiver SMEP.
Avec tout cela, nous obtiendrons notre cmd système.
IMPORTANT : l'exécution en tant qu'administrateur est requise pour interroger Superfetch.
Il a été testé sur Windows 10 (22h2) et Windows 11 (25h2). Ajustez les offsets selon votre version de Windows.