
Investigación de tesis de maestría sobre CVE-2024-51324 (BYOVD). Exploit avanzado con 4 modos operativos (SCANNER, LOADER, KILLER, CLEANUP), verificación de drivers mediante SHA-256 y documentación académica completa. La pieza de portafolio cubre la seguridad de los drivers del kernel de Windows, la ingeniería inversa de IOCTL y la explotación Bring Your Own Vulnerable Driver.
Bring Your Own Vulnerable Driver (BYOVD) — Antivirus Baidu
BdApiUtil64.sys
Tres primitivas de kernel no documentadas: terminación de procesos, eliminación arbitraria de archivos y eliminación de archivos en uso con bypass deSectionObjectPointer
Afecta a: Antivirus Baidu v5.2.3.116083 (BdApiUtil64.sys)
Cargando el controlador vulnerable en el kernel (modo LOADER)
Este repositorio contiene mi investigación de Tesis de Máster sobre CVE-2024-51324, una
vulnerabilidad Bring Your Own Vulnerable Driver (BYOVD) en el controlador de kernel
BdApiUtil64.sys del Antivirus Baidu.
El registro NVD asigna una puntuación base CVSS v3.1 de 3.8 (Baja) con el vector
AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N y CWE-269 (Gestión inadecuada de privilegios).
Esta puntuación no refleja la realidad del ataque local documentada en esta investigación: una vez
que el controlador es cargado por un administrador (un paso único alcanzable mediante ingeniería
social o cualquier escalada de privilegios local), cualquier proceso posterior — incluidos los
procesos en espacio aislado o de usuario estándar — puede enviar IOCTLs sin comprobaciones de
privilegios adicionales. Una puntuación CVSS v3.1 evaluada por el investigador de 7.8 (Alta) con
el vector AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H refleja con mayor precisión la realidad de la
explotación posterior a la carga. Ambas puntuaciones se analizan en la documentación técnica.
El controlador crea el objeto de dispositivo \Device\BdApiUtil con
SecurityDescriptor = NULL, lo que permite que cualquier proceso, independientemente de su nivel de
integridad, abra un handle y envíe IOCTLs. El análisis estático mediante Ghidra 11.0.3 revela que el
mecanismo interno es más significativo de lo documentado anteriormente: el controlador utiliza
PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) en lugar de
ZwOpenProcess, omitiendo SeAccessCheck por completo. Se caracterizaron por completo tres
primitivas IOCTL, dos de las cuales no cuentan con documentación pública previa.
| Aspecto | Descripción |
|---|---|
| Corrección técnica | ZwOpenProcess está ausente de la tabla de importaciones; el mecanismo real es PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), que omite SeAccessCheck de forma incondicional |
| Tres primitivas documentadas | Terminación de procesos (0x800024B4), eliminación arbitraria de archivos (0x80002648) y eliminación de archivos en uso con bypass de SectionObjectPointer (0x8000264C) — las dos últimas no tienen documentación pública previa |
| Cuatro modos de operación | LOADER, KILLER, SCANNER y CLEANUP — gestión completa del ciclo de vida |
| Verificación SHA-256 | Hash del controlador verificado antes de cualquier intento de carga |
| Pruebas empíricas de PPL | 10 intentos por categoría de proceso que confirman PPL como la única mitigación en tiempo de ejecución |
| Análisis forense | Persistencia del Evento ID 7045 tras la limpieza; Evento ID 1102 como artefacto autoincriminatorio de borrado de registros |
| Reglas de detección | Regla Sigma y configuración de Sysmon (Evento ID 6 por hash + Evento ID 13 por clave de registro) |
| Reevaluación CVSS | Discrepancia documentada entre la puntuación oficial de NVD (3.8 Baja) y la gravedad de explotación local evaluada por el investigador (7.8 Alta) |
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # Driver (not distributed)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # Main exploit — 4 operational modes
│
└── docs/
├── screenshots/
│ ├── 01-byovd-scan.png
│ ├── 02-byovd-scan-target.png
│ ├── 03-byovd-load.png
│ ├── 04-byovd-load-custom.png
│ ├── 05-kill-name.gif
│ ├── 06-kill-pid.gif
│ ├── 07-kill-limit.gif
│ ├── 08-dry-run.gif
│ └── 09-byovd-cleanup.png
│
└── analysis/
├── 01-root-cause.md
├── 02-driver-analysis.md # Full Ghidra RE, three primitives, PPL testing
└── 03-timeline.md
BdApiUtil64.sys (SHA-256: 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe
python exploit/byovd_killer.py --load
python exploit/byovd_killer.py --load --driver C:\path\to\BdApiUtil64.sys
python exploit/byovd_killer.py --load --service-name MyService
python exploit/byovd_killer.py --kill notepad.exe
python exploit/byovd_killer.py --pid 1234
python exploit/byovd_killer.py --kill notepad.exe --max-instances 2
python exploit/byovd_killer.py --kill notepad.exe --dry-run
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService
| Modo | Comando | Privilegios | Descripción |
|---|---|---|---|
| SCANNER | --scan | Cualquier usuario | Información de estado del sistema y del controlador |
| LOADER | --load | Administrador | Carga del controlador mediante la creación de un servicio de kernel |
| KILLER | --kill / --pid | Cualquier usuario | Terminación de procesos mediante IOCTL |
| CLEANUP | --cleanup | Administrador | Detención y eliminación del servicio del controlador |





