[하루한줄] CVE-2021-28310: Desktop Window Manager out-of-bound write 취약점
URL
Zero-day vulnerability in Desktop Window Manager (CVE-2021-28310) used in the wild
Target
- Windows OS 빌드 19041.928 이하 버전
Explain
Windows 데스크톱 창 관리자(Desktop Window Manager, dwm.exe
)의 dwmcore.dll
에서 out-of-bounds write 취약점이 발견되었습니다. 해커는 DirectComposition API를 사용하여 오프셋을 조작하여 데이터를 쓸 수 있습니다.
DirectComposition은 다양한 소스(GDI, DirectX 등)의 비트맵을 지원하는 변환, 효과, 애니메이션 비트맵 구성을 위해 Windows 8에서 도입된 Windows 구성 요소입니다. DirectComposition API는 win32kbase.sys
드라이버에 구현되어 있으며 관련된 syscall은 NtDComposition
으로 시작합니다.
취약점을 트리거하기 위해서 3개의 syscall이 필요합니다. NtDCompositionCreateChannel
은 NtDCompositionProcessChannelBatchBuffer
와 함께 채널을 초기화하여 kernel batch mode에서 처리되도록 여러 개의 DirectComposition을 전송합니다. 커널에 의해 명령어가 처리되지만 명령어들은 다른 포맷으로 serialize 되어 Local Procedure Call(LPC) 프로토콜에서 Desktop Window Manager(dwm.exe
)로 전달되고 화면에 출력됩니다. 이 프로시저는 NtDCompositionCommitChannel
에 의해 초기화됩니다.
해당 취약점을 트리거하기 위해서는 3가지 명령어(CreateResource
, ReleaseResource
, SetResourceBufferProperty
)를 사용해야 합니다. dwmcore.dll
의 CPropertySet::ProcessSetPropertyValue
함수는 SetResourceBufferProperty
를 호출합니다. D2DVector2로 expression type이 설정된 SetResourceBufferProperty
의 경우 CPropertySet::ProcessSetPropertyValue
에서 업데이트 여부에 따라 CPropertySet::AddProperty<D2DVector2>
혹은 CPropertySet::UpdateProperty<D2DVector2>
를 호출하여 명령어를 설정합니다. 이때 UpdateProperty
에서 propertyId
가 리소스에 추가된 property 수보다 작은지 확인하지 않아 property 배열 내부 데이터에 대한 두 가지 검사를 우회하면 propertiesData
버퍼를 지나 OOB write가 가능합니다. 해커가 dwm.exe
프로세스에서 객체를 할당하고 해제할 수 있으면 heap spray를 통해 이 검사를 우회할 수 있습니다.
검사를 우회한 후 조작된 propertyId
로 명령을 전송하면 NtDCompositionProcessChannelBatchBuffer
에서 에러를 반환하고 명령어가 dwm.exe
에 전송되지 않습니다. kernel mode UpdateProperty<D2DVector2>
의 propertiesCount
검사는 user mode에서의 악성 명령 실행을 방지합니다. 하지만 kernel mode AddProperty
는 user mode와 유사하게 작동하며 생성된 property의 propertyId
와 storageOffset
이 제공된 값과 동일한지만 확인하고 다르면 에러를 반환합니다. AddProperty
를 통해 새 속성을 추가하여 함수가 에러를 반환하면 kernel mode와 user mode 동일 리소스 간에 property 수의 불일치가 발생하여 kernel mode propertiesCount
검사를 우회하여 dwm.exe
에서 명령어 실행이 가능합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.