Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
MSRMapper — Mapeador manual de controladores de kernel para Windows x64 que explota CVE-2025-8061 en LnvMSRIO.sys de Lenovo para realizar un ataque BYOVD, mapeando controladores PE64 en el anillo 0. | Kitploit
Herramientas/GitHubGitHub/ull0a/msrmapper
Escalada de PrivilegiosForensia de MemoriaExplotaciónIngeniería InversaShellcodePost-ExplotaciónRed TeamingDesarrollo de PayloadsExplotación de Binarios
GitHubull0a/msrmapper

MSRMapper

Mapeador manual de controladores de kernel para Windows x64 que explota CVE-2025-8061 en LnvMSRIO.sys de Lenovo para realizar un ataque BYOVD, mapeando controladores PE64 en el anillo 0.

1hace 8h 20mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

MSRMapper

Mapeador manual BYOVD para Windows x64 · CVE-2025-8061


MSRMapper en ejecución

Descripción general

MSRMapper es un mapeador manual de controladores de kernel para Windows x64 que explota CVE-2025-8061 en el controlador vulnerable de Lenovo LnvMSRIO.sys para realizar un ataque BYOVD (Bring Your Own Vulnerable Driver).

El proyecto mapea un controlador PE64 directamente en la memoria del kernel sin usar sc create ni un servicio, y ejecuta su DriverEntry en ring 0. Todo el proceso se basa en:

  • Lectura/escritura de MSR y memoria física a través de LnvMSRIO.sys.
  • Resolución de símbolos del kernel mediante archivos PDB usando DbgHelp.
  • Traducción VA → PA a través de la clase SuperfetchPfnQuery de NtQuerySystemInformation.
  • Secuestro temporal de LSTAR para ejecutar shellcode en ring 0.
  • Enganche temporal de NtAddAtom para llamar a funciones del kernel como ExAllocatePoolWithTag, RtlCopyMemory y DriverEntry.

Estado: Probado en Windows 10 22H2 (OS Build 19045.6466). El controlador se mapea correctamente y DriverEntry devuelve STATUS_SUCCESS (0x0).


Características

  • Mapeo manual de PE64 en el kernel usando ExAllocatePoolWithTag.
  • Resolución de símbolos del kernel (KiSystemCall64, NtAddAtom, etc.) descargando PDBs desde el Servidor de Símbolos de Microsoft.
  • Traducción VA → PA con Superfetch (NtQuerySystemInformation clase 0x4F), sin necesidad de un recorrido personalizado de tablas de páginas.
  • Lectura/escritura de MSR (LSTAR, FMASK) y memoria física a través de LnvMSRIO.sys.
  • Shellcode generado dinámicamente que:
    • Restaura el LSTAR original.
    • Llama a MmGetPhysicalAddress para obtener la PA de NtAddAtom.
    • Devuelve el control al modo usuario mediante swapgs; sysret.

Cómo funciona

1. Inicialización

  • Abre \\.\WinMsrDev (servicio expuesto por LnvMSRIO.sys).
  • Obtiene la base de ntoskrnl mediante EnumDeviceDrivers y la valida con LSTAR.
  • Inicializa PdbResolver para resolver las RVA de los símbolos del kernel.

2. Obtención de la PA de NtAddAtom

  • Construye un shellcode que se ejecutará en ring 0 cuando se secuestre LSTAR.
  • Escribe el gadget swapgs; iretq en LSTAR.
  • Prepara la pila con PrepareStack y habilita AC=1 en modo usuario mediante EnableACUserMode.
  • En syscall, la CPU salta al gadget, ejecuta el shellcode, llama a MmGetPhysicalAddress(NtAddAtom) y almacena la PA en un búfer de usuario.
  • El shellcode restaura LSTAR y regresa al modo usuario con swapgs; sysret.

3. Mapeo del controlador

  • Asigna pool no paginado con ExAllocatePoolWithTag (invocado a través del enganche temporal de NtAddAtom).
  • Copia la imagen PE en el pool con RtlCopyMemory.
  • Aplica reubicaciones, resuelve importaciones y corrige la cookie de seguridad.
  • Llama a DriverEntry con DriverObject = NULL y RegistryPath = NULL.

4. Limpieza

  • Restaura los bytes originales de NtAddAtom.
  • Restaura los MSR originales.
  • Cierra el handle del controlador vulnerable.

Requisitos

  • Windows 10/11 x64 (probado en 22H2).
  • Visual Studio 2022 con:
    • Desarrollo de escritorio con C++.
    • MASM (Microsoft Macro Assembler) para compilar los archivos .asm.
  • Windows SDK y WDK (si necesitas compilar el controlador de carga útil).
  • LnvMSRIO.sys vulnerable (CVE-2025-8061) instalado y el servicio WinMsrDev en ejecución.
  • Privilegios de Administrador.
  • Acceso a Internet la primera vez para descargar los PDB de Microsoft, o una caché local en C:\Symbols.
  • CMake 3.20 o superior.

Compilación

Este proyecto usa CMake. Para compilar desde la línea de comandos:

  1. Genera la solución de Visual Studio 2022:

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

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

Los binarios de salida estarán en build/bin/Release/ (o una ruta similar según la configuración de CMake).

Alternativamente, puedes abrir el build/KernelLoader.sln generado en Visual Studio 2022 y compilar desde ahí.

Asegúrate de que ShellcodeAsm.asm y EnableAC.asm se compilen con MASM. El CMakeLists.txt proporcionado lo gestiona automáticamente.

Si necesitas ajustar la configuración de compilación, edita CMakeLists.txt.

Uso

  1. Instala e inicia el servicio LnvMSRIO.sys:

    root@kitploit:~
    sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
    sc start WinMsrDev
    
  2. Ejecuta KernelLoader.exe como Administrador:

    root@kitploit:~
    KernelLoader.exe
    
  3. Para ver la salida de DbgPrint del controlador mapeado, usa DebugView (Sysinternals) como Administrador con:

    • Capture → Capture Kernel
    • Options → Enable Verbose Kernel Output
    • Si es necesario, ajusta el filtro en:
      root@kitploit:~
      HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
      
      creando un DWORD llamado Default con valor .

Notas

  • El mensaje DBGHELP: ... - unmatched que aparece en algunos registros de PdbResolver es cosmético. El PDB se carga en una base virtual artificial y SymFromName sigue funcionando correctamente. No afecta a la resolución de símbolos.
  • En Windows 11 24H2, EnumDeviceDrivers puede devolver una base incorrecta. Este proyecto calcula la base real con LSTAR - KiSystemCall64.
  • El enganche de NtAddAtom es temporal y se restaura después de cada llamada. Aun así, usa esto solo en entornos controlados.
  • El shellcode asume que SMEP/SMAP están habilitados. Se deshabilitan temporalmente mediante CR4 y se restauran antes de regresar al modo usuario.
Descargar herramienta
  • Enganche temporal de NtAddAtom (jmp rax de 12 bytes) para llamar a funciones arbitrarias del kernel.
  • Restauración automática del enganche y de los MSR originales.
  • Soporte para Windows 11 24H2, donde EnumDeviceDrivers puede devolver una base incorrecta; la base real del kernel se calcula con LSTAR - KiSystemCall64.
  • 0xFFFFFFFF