[하루한줄] Windows 커널 모드 그래픽 모듈의 권한 상승 취약점
URL
ZDI-CAN-12671: WINDOWS KERNEL DOS/PRIVILEGE ESCALATION VIA A NULL POINTER DEREF
Target
win32kfull.sys (Windows 32bit)
Explain
Windows kernel 모듈인 win32kfull.sys
에서 NULL pointer dereference로 인한 권한 상승 취약점이 발견되었습니다.
win32k에서 모든 그리기 작업은 SURFOBJ
구조체를 통해 이루어집니다. SURFOBJ
의 hdev
필드는 특정 장치 드라이버에 대한 핸들이며 flags
필드 중 일부는 HOOK_ *
플래그로, 여기에서 확인할 수 있습니다.
취약점은 PlgBlt
그리기 작업을 수행하는 win32kfull.sys!BLTRECORD::bRotate
에서 발생합니다. HOOK_PLGBLT
가 SURFOBJ
의 flags
필드에 설정되어 있으면 기본 장치 드라이버의 DrvPlgBlt
가 사용되는데, 이때 hdev
에서 지정한 드라이버가 네이티브 DrvPlgBlt
를 지원하는지 확인하지 않아 이를 지원하지 않는 경우 해당 테이블의 항목이 NULL이 되고 win32kfull.sys!BLTRECORD::bRotate
에서 NULL 주소를 호출하게 됩니다.
취약점을 악용할 때 기본적으로 Windows 시스템에서는 유저 모드 프로세스에서 NULL 페이지를 매핑할 수 없지만 16비트 유저 모드 프로세스에서는 NULL 페이지 매핑이 가능해 16비트 가상 도스 머신인 NTVDM이 설치되어 있고, SMEP 적용이 되지 않은 Windows 32 bit에서만 제한적인 권한 상승이 가능합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.