[하루한줄] PARALLELS DESKTOP STACK CLASH VULNERABILITY

URL

ANALYSIS OF A PARALLELS DESKTOP STACK CLASH VULNERABILITY AND VARIANT HUNTING USING BINARY NINJA

Target

Parallels Desktop 16.1.3

Explain

Parallels Desktop에서 Stack Clash 취약점이 발견되었습니다. Parallels Desktop은 Parallels ToolGate라는 paravirtual PCI device를 사용합니다. 해당 Guest 디바이스의 드라이버는 ToolGate messaging protocol을 사용해 host의 virtual device와 통신합니다. Guest 드라이버가 메세지와 메세지의 physical addr를 TG_PAGED REQEIST 구조에 담아 전송하고 host가 physical addr를 사용해 메세지를 매핑하고 파싱하고 요청된 handler로 컨트롤을 넘겨 처리합니다.

그 과정에서 guest가 보낸 request에 담긴 size값을 통해 host buffer를 할당하는데 문제는 guest가 제공하는 size 값에 대한 검증이 없어 uncontrolled memory allocation에 의한 stack clash 취약점이 발생합니다. 굉장히 큰 size의 메모리 할당을 요청해 ToolGate request를 처리 중인 프로세스의 Stack Pointer(RSP) 위치를 다른 쓰레드가 사용 중인 stack 영역으로 이동시킬 수 있습니다. 따라서 guest에서 보낸 데이터로 host의 메모리를 오염시킬 수 있습니다.