[하루한줄] CVE-2021-33739: Microsoft DWM core library의 권한 상승 취약점

URL

https://mp.weixin.qq.com/s/ZjJ4kXOCTSez2erVKYzKbg

Target

  • Windows 21H1

Explain

Windows 데스크톱 창 관리자(Desktop Window Manager, dwm.exe)의 dwmcore.dll 모듈에서 UAF로 인한 권한 상승 취약점이 발견되어 세부 정보가 공개되었습니다.

dwmcore.dll 모듈의 CinteractionTrackerBindingManager 객체는 참조 횟수(reference count)를 기준으로 해제 시점이 결정됩니다. 객체를 바인딩하는 경우CInteractionTrackerBindingManager::ProcessSetTrackerBindingMode 함수를 사용하고 참조 횟수가 1 증가하며, 바인딩 해제하는 경우 CInteractionTrackerBindingManager::RemoveTrackerBindings 함수를 사용하며 참조 횟수가 1 감소합니다. 참조 횟수가 0이 된 객체는 CMILCOMBase::InternalRelease 함수에 의해 해제됩니다.

취약점은 같은 객체를 바인딩하는 리소스가 CinteractionTrackerBindingManager 객체를 참조했을 때 발생하며 해커가 DirectComposition API를 사용해 코드 수준에서 트리거가 가능합니다.

  1. 동일한 CinteractionTrackerMarshaler를 바인딩하는 두 개의 리소스가 CinteractionTrackerBindingManager을 참조합니다.

  2. CInteractionTrackerBindingManager::ProcessSetTrackerBindingMode 함수는 동일한 CinteractionTrackerMarshaler에 대해 한 번만 호출되어 참조 횟수는 1 증가합니다.

  3. 리소스의 사용이 종료되고 해제될 때 CInteractionTrackerBindingManager::RemoveTrackerBindings 함수는 각각의 리소스에 대해 두 번 호출됩니다.

    • 첫 호출 시 CinteractionTrackerBindingManager 객체의 참조 횟수가 1 감소합니다. 0이 된 경우 CMILCOMBase::InternalRelease 함수에 의해 해제됩니다.

    • 두 번째 호출 시 해제된 CinteractionTrackerBindingManager 객체에 접근하게 되어 UAF가 트리거 됩니다.

공개된 PoC는 https://github.com/mavillon1/CVE-2021-33739-POC 에서 확인할 수 있으며 dwmcore.dll 에서는 지난 4월 out of bounds write 취약점(CVE-2021-28310)이 공개되기도 했습니다.