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
KslDump — KslDump — ¿Por qué traer tu propio cuchillo si Defender ya dejó uno en la cocina? | Kitploit
Herramientas/GitHubGitHub/andreisss/ksldump
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPruebas de PenetraciónRed TeamingExplotación de Binarios
GitHubandreisss/ksldump

KslDump

KslDump — ¿Por qué traer tu propio cuchillo si Defender ya dejó uno en la cocina?

Ver Repositorio
39851hace 4 mesesRevisado por Kitploit

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

KslDump - BMVD (Traiga el Controlador Vulnerable de Microsoft)

GitHub stars GitHub forks GitHub downloads Sponsor License: GPL v3

Contexto importante

Reporté el problema a Microsoft el 7 de marzo de 2026. Sin embargo, casi 20 días antes, la comunidad de modding de juegos ya lo había invertido y discutido públicamente. Por mi parte, no sigo sus proyectos y no estaba al tanto de nada de esto. También está claro que se trata de dos proyectos completamente separados y no relacionados.

Referencias

  • Publicación del blog de Avantguard

¿Por qué traer tu propio cuchillo cuando Defender ya dejó uno en la cocina?

KslDump extrae credenciales de LSASS protegido por PPL usando únicamente componentes firmados por Microsoft. No se despliega ningún exploit. No se carga ningún controlador. Toda la cadena de ataque viene preinstalada con Windows Defender. Microsoft parcheó la versión en ejecución (wd\KslD.sys) anulando MmCopyMemory, pero dejó la versión vulnerable anterior (drivers\KslD.sys) en el disco. El atacante no trae nada — solo apunta el servicio de vuelta a lo que Microsoft olvidó limpiar.

image

https://github.com/user-attachments/assets/78dfce25-56b3-4eb8-9de2-7c183601e597


La Vulnerabilidad

KslD.sys es un controlador de kernel distribuido con Microsoft Defender. Está firmado por Microsoft, se carga como un módulo de kernel de confianza y expone un objeto de dispositivo \\.\KslD accesible desde modo usuario.

El controlador acepta el IOCTL 0x222044 con múltiples subcomandos que proporcionan acceso sin restricciones a memoria de kernel y física a cualquier proceso que pueda abrir el identificador del dispositivo.

Subcomandos Vulnerables

SubCmdCapacidadImpacto
2Devuelve CR3, IDTR y otros registros de control de la CPU al modo usuarioDerrota instantánea de KASLR
12Llama a MmCopyMemory() con dirección y tamaño controlados por el atacanteLectura arbitraria de memoria de kernel/física

El "Control de Acceso"

La única puerta al identificador del dispositivo es una cadena con el nombre del proceso almacenada en una clave de registro (AllowedProcessName) bajo la clave de servicio del controlador. Este valor:

  • Es editable por cualquier administrador local
  • No está protegido por la protección contra manipulaciones de Defender
  • No se valida contra la firma de código, integridad ni ninguna propiedad binaria
  • Es una simple comparación de cadenas — renombra tu binario y estás dentro

La diferencia es una línea en CCommand::Initialize:

root@kitploit:~
// Versión de 82 KB (parcheada) — borra deliberadamente el puntero:
v3 = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (v3 >= 0) {
    *(a1 + 24) = 0;        // ← Lo pone a NULL — SubCmd 12 está muerto
}

// Versión de 333 KB (vulnerable) — almacena el puntero:
ptr = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (ptr) {
    *(this + 0x18) = ptr;   // ← Lo mantiene — SubCmd 12 funciona
}

Las actualizaciones de la plataforma Defender parecen colocar la versión parcheada de 82 KB en drivers\wd\ y apuntar ImagePath a ella, mientras que la versión anterior de 333 KB permanece en drivers\. En los sistemas probados, el binario antiguo nunca se eliminó. El exploit simplemente cambia ImagePath de vuelta a la versión vulnerable y reinicia el servicio. Ambos binarios están firmados por Microsoft y son confiables para el sistema operativo.


Por qué el controlador antiguo sigue en el disco - teoría personal

La documentación pública de Microsoft muestra que KB4052623 entrega actualizaciones de la plataforma Defender, incluyendo un movimiento histórico de los controladores de Defender a System32\drivers\wd, mientras que el servicio de Windows mantiene archivos respaldados por WinSxS en el almacén de componentes mediante enlaces físicos NTFS y solo elimina las versiones de componentes superadas durante la limpieza. En el sistema probado, esto explica por qué el nuevo KslD.sys de 82 KB pudo llegar a través de la ruta de actualización de la plataforma Defender mientras que el antiguo KslD.sys de 333 KB en System32\drivers\ permaneció presente como la copia actual del almacén de componentes respaldada por CBS hasta que fue reemplazado por una versión CBS más nueva.


La Paradoja de la Lista de Bloqueo

Microsoft mantiene una Lista de Bloqueo de Controladores Vulnerables (DriverSiPolicy.p7b) específicamente para prevenir ataques BYOVD. Esta lista de bloqueo se aplica mediante HVCI y bloquea la carga de controladores firmados conocidos como vulnerables.

Según la propia documentación de Microsoft:

"La lista de bloqueo de controladores vulnerables está diseñada para ayudar a endurecer los sistemas contra controladores que no sean desarrollados por Microsoft en todo el ecosistema de Windows"

Los controladores propios de Microsoft están excluidos de la lista de bloqueo por diseño.


Por qué funciona esto

La causa raíz es simple: MmCopyMemory no respeta PPL.

PPL (Proceso Ligero Protegido) fue diseñado para prevenir el robo de credenciales bloqueando las llamadas OpenProcess y ReadProcessMemory contra LSASS. Pero PPL solo protege la ruta de la API de modo usuario. No tiene autoridad sobre las lecturas de memoria física en modo kernel.

KslD.sys proporciona al código de modo usuario una ruta directa a MmCopyMemory() — la propia API de kernel de Microsoft para copiar memoria por dirección física o virtual. El controlador realiza:

  • Sin validación del rango de direcciones — se acepta cualquier dirección física
  • Sin aplicación de límite de tamaño — lee todo lo que quieras
  • Sin verificación del llamante más allá de una comprobación de cadena de registro que un administrador puede editar

El resultado: un controlador firmado por Microsoft proporciona una evasión completa de PPL de serie.


La Primitiva de Lectura

El núcleo de la vulnerabilidad es SubCmd 12 — un envoltorio sin restricciones de MmCopyMemory():

root@kitploit:~
IOCTL:    0x222044
Entrada:  struct {
            DWORD  SubCmd;       // 12
            DWORD  Reservado;    // 0
            QWORD  Dirección;    // VA o PA objetivo
            QWORD  Tamaño;       // Bytes a leer
            DWORD  Banderas;     // 1 = Física, 2 = Virtual
            DWORD  Relleno;
          }
Salida:   Contenido bruto de la memoria (hasta Tamaño bytes)

Lectura física (Banderas = 1) es la primitiva crítica. El acceso a la memoria física no está sujeto a niveles de protección de procesos, banderas EPROCESS, ni a ninguna restricción de API de modo usuario; esto es lo que evade PPL.

Lectura virtual (Banderas = 2) lee direcciones virtuales de kernel directamente, útil para recorrer estructuras de kernel (EPROCESS, exportaciones de ntoskrnl) sin traducción manual de tabla de páginas.



Cadena de Ataque

root@kitploit:~
┌──────────────────────────────────────────────────────────────────┐
│                        KslDump Attack Flow                       │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. Registry Edit         ImagePath ← vulnerable 333KB KslD.sys *│
│          │                AllowedProcessName ← our process       │
│          │                sc stop/start KslD                     │
│          ▼                                                       │
│  2. KASLR Bypass          SubCmd 2 → CR3 + IDTR                  │
│          │                IDT → lowest ISR → ntoskrnl base       │
│          ▼                                                       │
│  3. Kernel Walk           PsInitialSystemProcess → SYSTEM EPROC  │
│          │                ActiveProcessLinks → find lsass.exe    │
│          │                Read lsass DTB from EPROCESS+0x28      │
│          ▼                      (all via SubCmd 12, flags=2)     │
│                                                                  │
│  4. Physical Read         Page table walk using lsass DTB        │
│          │                MmCopyMemory() reads lsass pages       │
│          │                      *** BYPASSES PPL ***             │
│          ▼                      (SubCmd 12, flags=1)             │
│                                                                  │
│  5. Key Extraction        Find lsasrv.dll via PEB → LDR         │
│          │                Scan .text for LSA key signatures      │
│          │                Follow BCRYPT chain → AES + 3DES + IV  │
│          ▼                                                       │
│  6. Credential Dump       Walk LogonSessionList                  │
│                           Decrypt MSV1_0 credentials             │
│                           → NT hashes                            │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Requisitos

  • Privilegios de administrador local
  • Python 3.x con el paquete cryptography (pip install cryptography)
  • El KslD.sys vulnerable de 333 KB debe existir en el disco (por defecto: C:\Windows\System32\drivers\KslD.sys)

La Ironía — Un Resumen

El ataque no requiere controladores de terceros, código sin firmar ni exploits. Todo está firmado por Microsoft, enviado por Microsoft y ya está en el sistema. El controlador vulnerable se encuentra en el disco junto a su propio parche, excluido de la lista de bloqueo destinada a prevenir exactamente esta clase de ataque.


Divulgación Responsable

Esta vulnerabilidad fue reportada al Centro de Respuesta de Seguridad de Microsoft (MSRC). Lo cerraron como "No es una Vulnerabilidad" con la siguiente justificación:

"El ataque descrito depende de privilegios administrativos preexistentes. No se proporcionó evidencia de cómo se obtuvieron esos privilegios. Los informes que asumen acceso administrativo o de raíz sin demostrar una vulnerabilidad que otorgue esos privilegios se consideran de menor impacto, ya que un atacante con dicho acceso ya podría realizar acciones más severas."

No se asignó ningún CVE. No se emitió ninguna corrección.


Descargo de Responsabilidad

Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines de investigación. Úsela solo en sistemas que le pertenezcan o para los cuales tenga permiso explícito por escrito para realizar pruebas. El acceso no autorizado a sistemas informáticos es ilegal. El autor no asume ninguna responsabilidad por su mal uso.


Descargar herramienta