[하루한줄] CVE-2021-34856: Parallels Desktop에서 발견된 취약점

URL

PWN2OWN 2021: PARALLELS DESKTOP GUEST TO HOST ESCAPE

Target

  • Parallels desktop

Explain

macOS/Chrome OS용 가상화 프로그램인 Parallels Desktop에서 Guest 머신에서 Host 권한으로 임의 코드를 실행할 수 있는 취약점이 발견되었습니다.

취약점은 Guest 와 Host 간 반가상화 I/O를 지원하는 인터페이스인 VirtIO의 VGA 디바이스 드라이버 함수 PciVirtIOWriteMM/PciVirtIOReadMM 에 존재합니다.

해당 함수들은 Guest가 제어 가능한 데이터를 전역 변수에 저장합니다.

MOV dword ptr [R9 + DAT_00048b04], EBX  //Guest supplied data
...
MOV  R9, R14
MOV  EAX, dword ptr [R9 + DAT_00048b04]
MOV  dword ptr [R9 + RAX*0x4 + 0x48af8], EBX

저장된 데이터는 레지스터에 Guest 데이터를 쓰기 위한 index로 사용되는데, index 값을 저장할 때 범위 검사를 하지 않아 data 섹션에 out-of-bounds write가 가능합니다.

취약점을 악용하면 port I/O 가 수행될 때 bss 섹션의 io_port_handler 구조체를 수정할 수 있는데, 해당 구조체를 매개변수로 받아 읽기/쓰기를 수행하는 AhciIdpIndexInPortFuncAhciIdpIndexOutPortFunc 함수에서 각각 aribtrary read/write 프리미티브를 얻을 수 있습니다. 결과적으로 하이퍼바이저에서 쉘코드를 실행할 수 있고 Host로 escape해 임의 코드 실행이 가능합니다.



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.