
로컬 권한 상승 익스플로잇으로, Windows HTTP.sys 정수 오버플로우(CVE-2026-62735)를 이용하여 비페이징 풀 오버플로우를 통한 크래시 및 전체 SYSTEM 셸 획득을 시연합니다. 승인된 테스트용입니다.
Integer Overflow 취약점으로 인한 크래시를 시연합니다. 이 취약점을 통해 Heap Overflow -> SYSTEM shell 프리미티브를 확보할 수 있습니다.Integer Overflowhttp.sysUlpCreateInternalResponseOldhttp.sys는 헤더가 훨씬 더 큰 버퍼를 필요로 함에도 불구하고 TotalHeaderBytes를 기준으로 메모리를 할당합니다. 이는 UlGenerateMultipleKnownHeadersOld에서 nonpaged-pool 할당을 오버플로할 수 있는 기반을 제공합니다:__int64 __fastcall UlpCreateInternalResponseOld(
sv_UL_REQUEST *Request,
unsigned __int16 EntityChunkCount,
unsigned int FixedHeaderCount,
unsigned int FixedHeaderBytes,
unsigned int MultipleHeaderCount,
unsigned int MultipleHeaderBytes,
unsigned __int16 KnownHeaderCount,
unsigned int TrailerCount,
unsigned int TrailerBytes,
char FastForwardRequested,
char CacheEligible,
char ResponseInfoPresent,
char AutomaticChunkingRequired,
char AdditionalHeaderRequired,
sv_UL_INTERNAL_RESPONSE **InternalResponseOut)
{
int VariableHeaderBytes; // r9d
int H3ExtraHeaderBytes; // r10d
unsigned int MultipleHeaderBytesLocal; // ecx
unsigned int TotalHeaderBytes; // [rsp+E8h] [rbp+60h]
...
// 0xffffff32 + 0x2e + 0 + 0xa0 = 0x4e
TotalHeaderBytes = MultipleHeaderBytesLocal + FixedHeaderBytes + H3ExtraHeaderBytes + VariableHeaderBytes;
...
}
*** Fatal System Error: 0x00000050
(0xFFFFCD86AE712000,0x0000000000000002,0xFFFFF807489C4362,0x0000000000000002)
Driver at fault:
*** HTTP.sys - Address FFFFF807489C4362 base at FFFFF80748860000, DateStamp 2bfcaa4c
.
Break instruction exception - code 80000003 (first chance)
A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.
A fatal system error has occurred.
For analysis of this file, run !analyze -v
nt!DbgBreakPointWithStatus:
fffff807`b26fa0d0 cc int 3
0: kd> k
# Child-SP RetAddr Call Site
00 ffffe205`092ddf78 fffff807`b27afcf2 nt!DbgBreakPointWithStatus
01 ffffe205`092ddf80 fffff807`b27af21e nt!KiBugCheckDebugBreak+0x12
02 ffffe205`092ddfe0 fffff807`b26f9357 nt!KeBugCheck2+0xb2e
03 ffffe205`092de770 fffff807`b24fd030 nt!KeBugCheckEx+0x107
04 ffffe205`092de7b0 fffff807`b2443c56 nt!MiSystemFault+0x850
05 ffffe205`092de8a0 fffff807`b28badcb nt!MmAccessFault+0x646
06 ffffe205`092dea10 fffff807`489c4362 nt!KiPageFault+0x38b
07 ffffe205`092deba8 fffff807`489a6611 HTTP!memcpy+0x122
08 ffffe205`092debb0 fffff807`4897c165 HTTP!UlGenerateMultipleKnownHeadersOld+0xbdd
09 ffffe205`092ded90 fffff807`48976db0 HTTP!UlpPrepareHttpResponseOld+0x2c9
0a ffffe205`092dee70 fffff807`489361a4 HTTP!UlCaptureHttpResponseOld+0x92c
0b ffffe205`092defc0 fffff807`488f7c92 HTTP!UlSendHttpResponseIoctlOld+0x1160
0c ffffe205`092df600 fffff807`488c4db5 HTTP!UlSendHttpResponseIoctl+0x12
0d ffffe205`092df630 fffff807`b245cabb HTTP!UxDeviceControl+0xb5
0e ffffe205`092df670 fffff807`b245ca33 nt!IopfCallDriver+0x5b
0f ffffe205`092df6b0 fffff807`b2ac0e75 nt!IofCallDriver+0x13
10 ffffe205`092df6e0 fffff807`b2abfcbc nt!IopSynchronousServiceTail+0x1c5
11 ffffe205`092df790 fffff807`b2abf30e nt!IopXxxControlFile+0x99c
12 ffffe205`092dfa00 fffff807`b28bf255 nt!NtDeviceIoControlFile+0x5e
13 ffffe205`092dfa70 00007ffa`d37c0144 nt!KiSystemServiceCopyEnd+0x25
14 00000014`0d9af2d8 00007ffa`d08a3953 ntdll!NtDeviceIoControlFile+0x14
15 00000014`0d9af2e0 00007ffa`d1f93335 KERNELBASE!DeviceIoControl+0x73
16 00000014`0d9af350 00007ff7`00cb1cb4 KERNEL32!DeviceIoControlImplementation+0x75
17 00000014`0d9af3a0 00000000`00001f7f poc!main+0x924
18 00000014`0d9af3a8 00000000`00000007 0x1f7f
19 00000014`0d9af3b0 00000014`0d9af4a0 0x7
1a 00000014`0d9af3b8 00000000`00000000 0x00000014`0d9af4a0
본 저장소는 CVE-2026-62735(Windows HTTP.sys 정수 오버플로 → 비페이징 풀 오버플로 → SYSTEM) 취약점 PoC의 중계 배포 미러입니다(기술 설명은 위의 원본 README 참조). 콘텐츠는 업스트림 공개 PoC 미러에서 가져온 것으로, 보관 및 배포 목적으로만 사용됩니다. PoC는 보안 연구, 취약점 검증 및 승인된 테스트 전용이며, 승인되지 않은 대상에 사용하지 마십시오.
UlpCreateInternalResponseOld / UlGenerateMultipleKnownHeadersOld(http.sys, 기존 코드 경로)0x12403F(UlSendHttpResponseIoctl)를 통해 http.sys에 전달핵심 원리: TotalHeaderBytes = MultipleHeaderBytesLocal + FixedHeaderBytes + H3ExtraHeaderBytes + VariableHeaderBytes — 다중값 응답 헤더 바이트 수가 2³²에 가깝게 구성되면, 이 32비트 합산이 매우 작은 값으로 래핑되고(0xffffff32 + 0x2e + 0 + 0xa0 = 0x4e), ExAllocatePool3는 이에 따라 실제 필요량보다 훨씬 작은 커널 버퍼를 할당합니다. 이후 UlGenerateMultipleKnownHeadersOld의 memcpy가 해당 비페이징 풀 블록을 경계를 넘어 쓰게 됩니다.
poc/ poc.cpp + head.hpp —— 전체 익스플로잇: 명명된 파이프 DQE 힙 스프레이 → 풀 오버플로로 0x30 헤더 제어 → 임의 읽기/쓰기 → SYSTEM 토큰 복사 → SYSTEM shell
crash/ poc.cpp + head.hpp —— 크래시 트리거 전용(취약점 존재 확인, 0x50 버그체크 트리거)
crash/와 poc/는 각각 독립 실행 파일입니다. poc.exe 실행 성공 시 SYSTEM shell이 열립니다.본 PoC는 교육, 보안 연구 및 승인된 테스트 전용이며, 소유하거나 명시적 승인을 받은 시스템에서만 실행할 수 있습니다. 익스플로잇은 커널 풀 오버플로를 통해 SYSTEM으로 권한을 상승시키며, 블루스크린(0x50)을 유발할 수 있으므로 폐기 가능한 가상 머신에서 테스트하십시오.
LICENSE 참조).