Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
MSRMapper — Mapper manuale di driver kernel per Windows x64 che sfrutta CVE-2025-8061 in LnvMSRIO.sys di Lenovo per eseguire un attacco BYOVD, mappando driver PE64 nel ring 0. | Kitploit
Strumenti/GitHubGitHub/ull0a/msrmapper
Escalation di PrivilegiMemory ForensicsExploitReverse EngineeringShellcodePost-ExploitRed TeamingSviluppo PayloadBinary Exploitation
GitHubull0a/msrmapper

MSRMapper

Mapper manuale di driver kernel per Windows x64 che sfrutta CVE-2025-8061 in LnvMSRIO.sys di Lenovo per eseguire un attacco BYOVD, mappando driver PE64 nel ring 0.

18h 20m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

MSRMapper

Mapper manuale BYOVD per Windows x64 · CVE-2025-8061


MSRMapper in esecuzione

Panoramica

MSRMapper è un mapper manuale di driver kernel per Windows x64 che sfrutta CVE-2025-8061 nel driver vulnerabile Lenovo LnvMSRIO.sys per eseguire un attacco BYOVD (Bring Your Own Vulnerable Driver).

Il progetto mappa un driver PE64 direttamente nella memoria del kernel senza utilizzare sc create o un servizio, ed esegue il suo DriverEntry in ring 0. L'intero processo si basa su:

  • Lettura/scrittura di MSR e memoria fisica tramite LnvMSRIO.sys.
  • Risoluzione dei simboli del kernel tramite file PDB usando DbgHelp.
  • Traduzione VA → PA tramite la classe SuperfetchPfnQuery di NtQuerySystemInformation.
  • Hijacking temporaneo di LSTAR per eseguire shellcode in ring 0.
  • Hooking temporaneo di NtAddAtom per chiamare funzioni del kernel come ExAllocatePoolWithTag, RtlCopyMemory e DriverEntry.

Stato: Testato su Windows 10 22H2 (OS Build 19045.6466). Il driver viene mappato con successo e DriverEntry restituisce STATUS_SUCCESS (0x0).


Funzionalità

  • Mapping manuale di PE64 nel kernel usando ExAllocatePoolWithTag.
  • Risoluzione dei simboli del kernel (KiSystemCall64, NtAddAtom, ecc.) scaricando i PDB dal Microsoft Symbol Server.
  • Traduzione VA → PA con Superfetch (NtQuerySystemInformation classe 0x4F), senza necessità di un page-table walker personalizzato.
  • Lettura/scrittura di MSR (LSTAR, FMASK) e memoria fisica tramite LnvMSRIO.sys.
  • Shellcode generato dinamicamente che:
    • Ripristina l'LSTAR originale.
    • Chiama MmGetPhysicalAddress per ottenere il PA di NtAddAtom.
    • Restituisce il controllo alla modalità utente tramite swapgs; sysret.
  • Hook temporaneo di ( a 12 byte) per chiamare funzioni arbitrarie del kernel.

Come Funziona

1. Inizializzazione

  • Apre \\.\WinMsrDev (servizio esposto da LnvMSRIO.sys).
  • Ottiene la base di ntoskrnl tramite EnumDeviceDrivers e la convalida con LSTAR.
  • Inizializza PdbResolver per risolvere gli RVA dei simboli del kernel.

2. Ottenere il PA di NtAddAtom

  • Costruisce uno shellcode che verrà eseguito in ring 0 quando LSTAR viene dirottato.
  • Scrive il gadget swapgs; iretq in LSTAR.
  • Prepara lo stack con PrepareStack e abilita AC=1 in modalità utente tramite EnableACUserMode.
  • Alla syscall, la CPU salta al gadget, esegue lo shellcode, chiama MmGetPhysicalAddress(NtAddAtom) e memorizza il PA in un buffer utente.
  • Lo shellcode ripristina LSTAR e ritorna alla modalità utente con swapgs; sysret.

3. Mapping del Driver

  • Alloca pool non paginato con ExAllocatePoolWithTag (invocato tramite l'hook temporaneo di NtAddAtom).
  • Copia l'immagine PE nel pool con RtlCopyMemory.
  • Applica le rilocazioni, risolve gli import e corregge il security cookie.
  • Chiama DriverEntry con DriverObject = NULL e RegistryPath = NULL.

4. Pulizia

  • Ripristina i byte originali di NtAddAtom.
  • Ripristina gli MSR originali.
  • Chiude l'handle del driver vulnerabile.

Requisiti

  • Windows 10/11 x64 (testato su 22H2).
  • Visual Studio 2022 con:
    • Sviluppo desktop con C++.
    • MASM (Microsoft Macro Assembler) per compilare i file .asm.
  • Windows SDK e WDK (se devi compilare il driver payload).
  • LnvMSRIO.sys vulnerabile (CVE-2025-8061) installato e il servizio WinMsrDev in esecuzione.
  • Privilegi di Amministratore.
  • Accesso a Internet la prima volta per scaricare i PDB Microsoft, oppure una cache locale in C:\Symbols.
  • CMake 3.20 o superiore.

Compilazione

Questo progetto utilizza CMake. Per compilare dalla riga di comando:

  1. Genera la soluzione Visual Studio 2022:

    root@kitploit:~
    cmake -B build -G "Visual Studio 17 2022" -A x64
    
  2. Compila in modalità Release:

    root@kitploit:~
    cmake --build build --config Release
    

I binari di output saranno in build/bin/Release/ (o un percorso simile a seconda della configurazione CMake).

In alternativa, puoi aprire il file build/KernelLoader.sln generato in Visual Studio 2022 e compilare da lì.

Assicurati che ShellcodeAsm.asm e EnableAC.asm siano compilati con MASM. Il file CMakeLists.txt fornito gestisce questo automaticamente.

Se devi modificare la configurazione di compilazione, modifica CMakeLists.txt.

Utilizzo

  1. Installa e avvia il servizio LnvMSRIO.sys:

    root@kitploit:~
    sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
    sc start WinMsrDev
    
  2. Esegui KernelLoader.exe come Amministratore:

    root@kitploit:~
    KernelLoader.exe
    
  3. Per visualizzare l'output DbgPrint del driver mappato, usa DebugView (Sysinternals) come Amministratore con:

    • Capture → Capture Kernel
    • Options → Enable Verbose Kernel Output
    • Se necessario, regola il filtro in:
      root@kitploit:~
      HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
      
      creando un DWORD chiamato Default con valore .

Note

  • Il messaggio DBGHELP: ... - unmatched che appare in alcuni log di PdbResolver è solo estetico. Il PDB viene caricato a una base virtuale artificiale e SymFromName funziona comunque correttamente. Non influisce sulla risoluzione dei simboli.
  • Su Windows 11 24H2, EnumDeviceDrivers può restituire una base errata. Questo progetto calcola la base reale con LSTAR - KiSystemCall64.
  • L'hook di NtAddAtom è temporaneo e viene ripristinato dopo ogni chiamata. Tuttavia, usalo solo in ambienti controllati.
  • Lo shellcode presuppone che SMEP/SMAP siano abilitati. Vengono temporaneamente disabilitati tramite CR4 e ripristinati prima di ritornare alla modalità utente.
Scarica lo strumento
NtAddAtom
jmp rax
  • Ripristino automatico dell'hook e degli MSR originali.
  • Supporto a Windows 11 24H2, dove EnumDeviceDrivers può restituire una base errata; la base reale del kernel viene calcolata con LSTAR - KiSystemCall64.
  • 0xFFFFFFFF