
CVE-2025-7771에 대한 개념 증명 익스플로잇으로, ThrottleStop.sys의 Windows 커널 드라이버 취약점으로 임의의 물리 메모리 읽기/쓰기 및 SYSTEM으로의 로컬 권한 상승을 가능하게 합니다.
CVE-2025-7771에 대한 개념 증명(PoC)입니다. ThrottleStop.sys는 접근 통제 없이 임의의 물리 메모리 읽기/쓰기를 허용하는 두 개의 IOCTL 핸들러를 노출합니다. 즉, 관리자 권한을 가진 모든 프로세스가 물리 RAM 어디든 읽거나 쓸 수 있습니다.
Windows 10 22H2 및 Windows 11 23H2 x64에서 테스트했습니다.
드라이버 바이너리를 IDA Pro에 로드하여 내부적으로 어떻게 동작하는지 파악하는 것부터 시작했습니다. IRP_MJ_DEVICE_CONTROL 디스패치 루틴을 찾아 두 개의 IOCTL 코드로 추적했습니다:
0x80006498 — 물리 주소에서 읽기0x8000649C — 물리 주소에 쓰기둘 다 전달한 주소로 MmMapIoSpace를 직접 호출할 뿐입니다. 범위 검사도, 호출자 검증도, 아무것도 없습니다. 바로 이것이 버그입니다.
여기서부터 익스플로잇 경로는 아주 간단합니다:
\\.\ThrottleStop에 대한 핸들을 엽니다NtQuerySystemInformation 클래스 79)를 사용해 가상→물리 주소 변환 맵을 구축합니다NtQuerySystemInformation 클래스 11로 ntoskrnl 베이스를 유출합니다ntoskrnl.exe를 로드해 PsInitialSystemProcess 내보내기 RVA를 확인하고, 런타임 베이스에 더해 커널 VA를 얻습니다EPROCESS+0x4b8에서 SYSTEM 토큰을 읽습니다ActiveProcessLinks를 따라가며 자신의 EPROCESS를 찾습니다토큰 필드는 _EX_FAST_REF 유형이라 하위 4비트는 참조 카운트(refcount)이며 포인터의 일부가 아닙니다. SYSTEM 토큰을 읽을 때는 그 비트를 마스킹하고, 쓸 때는 자신의 refcount 비트를 보존해야 합니다. 그렇지 않으면 BSOD가 발생할 위험이 있습니다.
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
MSVC(VS2022+)가 필요하며 드라이버가 로드된 상태여야 합니다. 관리자 권한으로 실행하세요.
이 값은 Windows 10 20H2~22H2 및 Windows 11 22H2/23H2 x64용입니다. 다른 빌드를 사용 중이라면 WinDbg에서 dt nt!_EPROCESS로 확인하세요.
| 필드 | 오프셋 |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
교육 및 연구 목적으로만 제공됩니다. 개인 VM에서 테스트했습니다.