
CVE-2026-29923에 대한 개념 증명 코드로, pstrip64.sys 커널 드라이버에서의 로컬 권한 상승 취약점입니다. IOCTL을 통해 물리적 메모리 읽기/쓰기 프리미티브를 사용하여 권한이 없는 사용자에서 NT AUTHORITY\SYSTEM으로 권한을 상승시키는 방법을 보여줍니다 (Windows).
pstrip64.sys 커널 드라이버(EnTech Taiwan PowerStrip ≤ 3.90.736)의 취약점인 CVE-2026-29923에 대한 최소 개념 증명 코드로, 권한이 없는 사용자 모드 프로세스가 NT AUTHORITY\SYSTEM으로 권한을 상승시킬 수 있습니다.
pstrip64.sys는 IOCTL(0x80002008)을 노출하며, 이 IOCTL은 사용자가 제공한 물리적 주소를 받아 \Device\PhysicalMemory를 열고 현재 프로세스 핸들로 ZwMapViewOfSection을 호출하여 호출 프로세스의 가상 주소 공간에 직접 매핑합니다. 권한 검사가 없고, HalTranslateBusAddress가 적용하는 것 이상의 주소 검증이 없으며, 심볼릭 링크 \\.\PSTRIP64에 대한 접근 제어도 없습니다.
결과적으로 권한이 없는 프로세스에서 제한 없는 물리적 메모리 읽기/쓰기 프리미티브가 발생합니다.
임의의 물리적 읽기/쓰기가 가능해지면, 익스플로잇은 다음 네 단계를 따릅니다.
1. EPROCESS 구조체 스캔
물리적 RAM은 2 MB 청크 단위로 탐색됩니다. 각 청크는 커널 풀 태그 Proc(0x636F7250)을 스캔하는데, 이 태그는 프로세스의 _EPROCESS 구조체를 포함하는 풀 할당을 표시합니다. 후보 히트는 PID를 신뢰하기 전에 세 가지 경량 휴리스틱으로 검증됩니다.
PriorityClass == 0x2 — 모든 활성 프로세스는 Normal 우선순위로 실행됨ProcessLock == 0x0 — 안정적인 프로세스의 잠금 필드는 비어 있음ImageFileName[0]이 출력 가능한 ASCII — 가비지 메모리는 이를 거의 충족하지 않음2. 두 토큰 포인터 위치 확인
두 개의 대상이 필요합니다.
_EPROCESS 내 Token 필드의 물리적 주소_EPROCESS에 저장된 토큰 값3. 토큰 덮어쓰기
Token 필드를 포함하는 4 KB 페이지가 매핑되고 필드가 시스템 토큰 값으로 덮어쓰여집니다. 이 시점부터 Windows 커널은 우리 프로세스를 NT AUTHORITY\SYSTEM으로 취급합니다.
4. 셸 실행
CreateProcessA를 통해 cmd.exe가 실행됩니다. 자식 프로세스는 부모의 토큰을 상속하므로 결과 셸은 SYSTEM으로 실행됩니다.
x86 시스템에서 3GB – 4GB 물리적 주소 범위는 MMIO용으로 예약되어 있습니다. 이 범위의 페이지를 매핑하려고 하면 드라이버가 오류 74(HalTranslateBusAddress 실패)를 반환합니다. 스캔은 이 창을 건너뛰고 0x100000000에서 재개하여 Windows가 4GB 이상에 배치하는 커널 구조체를 포착합니다.
드라이버의 맵 핸들러는 반환된 가상 주소를 DWORD 필드(LowPart)에 기록하여 64비트 VA를 32비트로 자릅니다. 64비트 빌드는 손상된 포인터를 받고 즉시 충돌합니다. x86으로 컴파일하십시오.
| 소프트웨어 | 버전 |
|---|---|
| EnTech Taiwan PowerStrip | ≤ 3.90.736 |
드라이버 해시(SHA-256):
ab01485bb7c8bc1a9c86096eeea6d31d8fad557bf4d44072b46373d2203faa6e
하드코딩된 오프셋은 Windows 10 22H2 x64를 대상으로 합니다. 다른 빌드에서는 업데이트된 값이 필요합니다 — WinDbg에서 dt nt!_EPROCESS를 사용하여 확인하십시오.
Visual Studio x86 개발자 명령 프롬프트를 열고 다음을 실행하십시오:
cl /EHsc /O2 exploit.c /Fe:poc.exe
또는 Visual Studio에서 플랫폼 대상을 x86으로 설정하고 Release 모드로 빌드하십시오. 바이너리는 Windows SDK 외부 종속성이 없습니다.
먼저 pstrip64.sys를 로드하십시오(드라이버를 로드하려면 관리자 권한이 필요하지만, 일단 로드된 후에는 익스플로잇 자체를 실행하는 데 필요하지 않음). 그런 다음:
poc.exe
NT AUTHORITY\SYSTEM으로 실행되는 새 cmd.exe 창이 열립니다.
드라이버 로드 차단(권장)
익스플로잇 실행 중 탐지
SYSTEM 수준 자식 프로세스를 생성하는지 모니터링NT AUTHORITY\SYSTEM으로 변경된 프로세스 플래그 지정이 코드는 교육 및 방어 연구 목적으로만 게시되었습니다. 소유한 시스템이나 명시적 서면 허가를 받은 시스템에서만 사용하십시오. 저자는 오용에 대한 책임을 지지 않습니다.
| 필드 | 오프셋 |
|---|
PriorityClass | 0x5B7 |
ProcessLock | 0x438 |
UniqueProcessId | 0x440 |
ImageFileName | 0x5A8 |
Token | 0x4B8 |