
PoC zum Ausnutzen des Lenovo Dispatcher-Treibers (LnvMSRIO.sys) (CVE-2025-8061)
Dies ist ein grundlegender Proof of Concept, um den Lenovo Dispatcher Treiber (LnvMSRIO.sys) (CVE-2025-8061) auszunutzen. Die Schwachstellen wurden von Luis Casvella entdeckt (Quelle: https://blog.quarkslab.com/exploiting-lenovo-driver-cve-2025-8061.html).
Die Hauptidee dieses PoC ist es, nur die Lese-/Schreib-Primitive auszunutzen, um das System-Token von ntoskrnl.exe zu stehlen. Dazu verwendet der PoC Superfetch/PFN (https://www.outflank.nl/blog/2023/12/14/mapping-virtual-to-physical-adresses-using-superfetch/), um virtuelle Adressen im Benutzermodus in physische Adressen übersetzen zu können.
Durch die Verwendung von Superfetch können wir virtuelle in physische Adressen übersetzen und sie direkt dem verwundbaren Treiber bereitstellen, was uns erlaubt, jede beliebige Adresse zu lesen und zu schreiben. Damit überschreibt der PoC einfach den Anfang der in ntoskrnl.exe definierten NtAddAtom-Funktion mit einem kleinen Shellcode, um zu einem Userspace-Shellcode zu springen, der in unserem Rust-Code definiert ist (steal_kernel_token_shellcode_fn in base.rs) und Inline-Assembly verwendet. Dieser kleine Shellcode wird in generate_jmp_user_shellcode erzeugt, und wie wir sehen können, setzt er das 20. Bit in CR4 zurück, um SMEP zu deaktivieren, dann unseren Userspace-Shellcode aufruft (um das System-Token zu stehlen) und schließlich SMEP wieder aktiviert.
Mit all dem erhalten wir unsere System-Eingabeaufforderung.
WICHTIG: Zum Abfragen von Superfetch sind Administratorrechte erforderlich.
Es wurde unter Windows 10 (22h2) und Windows 11 (25h2) getestet. Passen Sie die Offsets entsprechend Ihrer Windows-Version an.