[하루한줄] CVE-2021-2127: Oracle VirtualBox Divide by Zero DoS
URL
Target
Oracle VirtualBox 6.1.16 (realease 2020/11/17)
Windows 호스트 제외
Explain
Oracle VirtualBox 6.1.16에서 Divide by zero 취약점이 발견되었습니다. VMWare SVGA II PCI를 통해 전달된 커맨드들은 SVGA command buffer에 저장된 후 FIFO loop을 통해 파싱 및 실행됩니다. 함수 vmsvgaR3FifoLoop
는 switch-case문을 통해 상황에 맞는 vmsvga~
함수를 호출하는 것으로 커맨드를 처리합니다. 그중 SVGA_3D_CMD_SURFACE_DMA
커맨드를 처리하는 vmsvga3dSurfaceDMA
에서 divide by zero 취약점이 있습니다.
AssertReturn(srcz < UINT32_MAX / pMipLevel->mipmapSize.height / cbGuestPitch, VERR_INVALID_PARAMETER);
위는 Divide by zero 취약점이 발생하는 코드이고, Root cause는 다음과 같습니다.
Invalid surface가 정의될 수 있음.
mipmap
의 값이 0이 아니며,cbGuestPitch
의 값이 0인 surface가 정의될 수 있습니다.Texture는 Invalid surface에 bound 됨
Texture가 surface에 bound 되어야 취약점에 도달할 수 있습니다.
제수(divisor)의 검사 부재
해당 취약점을 통해 3D acceleration 옵션이 켜져 있는 VM들을 대상으로 로컬 혹은 원격 Crash를 발생시킬 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.