
Prueba de concepto para CVE-2026-29923, una escalada de privilegios local en el controlador de kernel pstrip64.sys. Demuestra una primitiva de lectura/escritura de memoria física mediante IOCTL para escalar desde un usuario sin privilegios a NT AUTHORITY\SYSTEM en Windows.
Una prueba de concepto minimalista para CVE-2026-29923, una vulnerabilidad en el controlador del kernel pstrip64.sys (EnTech Taiwan PowerStrip ≤ 3.90.736) que permite a un proceso no privilegiado en modo usuario escalar a NT AUTHORITY\SYSTEM.
pstrip64.sys expone un IOCTL (0x80002008) que acepta una dirección física suministrada por el usuario y la mapea directamente en el espacio de direcciones virtual del proceso llamante abriendo \Device\PhysicalMemory y llamando a ZwMapViewOfSection con el identificador del proceso actual. No hay verificación de privilegios, ninguna validación de direcciones más allá de lo que impone HalTranslateBusAddress, y ningún control de acceso en el enlace simbólico \\.\PSTRIP64.
El resultado es una primitiva de lectura/escritura de memoria física sin restricciones desde un proceso no privilegiado.
Con lectura/escritura física arbitraria disponible, la explotación sigue cuatro pasos.
1. Escanear estructuras EPROCESS
La RAM física se recorre en fragmentos de 2 MB. Cada fragmento se escanea en busca de la etiqueta de pool del kernel Proc (0x636F7250), que marca la asignación de pool que contiene la estructura _EPROCESS de un proceso. Los candidatos encontrados se validan con tres heurísticas ligeras antes de confiar en el PID:
PriorityClass == 0x2 — todos los procesos activos se ejecutan con prioridad NormalProcessLock == 0x0 — el campo de bloqueo está limpio en un proceso estableImageFileName[0] es ASCII imprimible — la memoria basura rara vez cumple esto2. Ubicar ambos punteros de token
Se necesitan dos objetivos:
Token de nuestro propio proceso dentro de _EPROCESSPID 4) _EPROCESS3. Sobrescribir nuestro token
La página de 4 KB que contiene nuestro campo Token se mapea y el campo se sobrescribe con el valor del token de System. A partir de este punto, el kernel de Windows trata nuestro proceso como NT AUTHORITY\SYSTEM.
4. Lanzar un shell
Se lanza cmd.exe mediante CreateProcessA. Debido a que los procesos hijo heredan el token del padre, el shell resultante se ejecuta como SYSTEM.
La ventana de direcciones físicas de 3 GB a 4 GB está reservada para MMIO en sistemas x86. Intentar mapear páginas en este rango hace que el controlador devuelva el error 74 (fallo de HalTranslateBusAddress). El escaneo omite esta ventana y se reanuda en 0x100000000 para capturar las estructuras del kernel que Windows coloca por encima de la marca de 4 GB.
El manejador de mapeo del controlador escribe la dirección virtual devuelta en un campo DWORD (LowPart), truncando la VA de 64 bits a 32 bits. Una compilación de 64 bits recibe un puntero corrupto y falla inmediatamente. Compile como x86.
| Software | Versiones |
|---|---|
| EnTech Taiwan PowerStrip | ≤ 3.90.736 |
Hash del controlador (SHA-256):
ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
Los desplazamientos codificados apuntan a Windows 10 22H2 x64. Otras compilaciones requieren valores actualizados — use dt nt!_EPROCESS en WinDbg para confirmar.
| Campo | Desplazamiento |
|---|---|
PriorityClass | 0x5B7 |
ProcessLock | 0x438 |
UniqueProcessId | 0x440 |
ImageFileName | 0x5A8 |
Token | 0x4B8 |
Abra un Símbolo del sistema para desarrolladores de Visual Studio x86 y ejecute:
cl /EHsc /O2 exploit.c /Fe:poc.exe
O establezca el destino de la plataforma en x86 en Visual Studio y compile en modo Release. El binario no requiere dependencias externas más allá del Windows SDK.
Cargue primero pstrip64.sys (requiere administrador para cargar el controlador, no para ejecutar el exploit una vez cargado), luego:
poc.exe
Se abrirá una nueva ventana de cmd.exe ejecutándose como NT AUTHORITY\SYSTEM.
Bloquear la carga del controlador (recomendado)
Detectar explotación en curso
SYSTEMNT AUTHORITY\SYSTEM fuera de un evento de autenticación legítimoEste código se publica únicamente con fines educativos y de investigación defensiva. Úselo solo en sistemas de su propiedad o para los que tenga permiso explícito por escrito para realizar pruebas. El autor no se hace responsable por su mal uso.