[하루한줄] CVE-2021-3409: QEMU Heap overflow in SDHCI

URL

CVE-2021-3409

Target

QEMU 5.2.50

Explain

QEMU 5.2.50 코드의 SDHCI(Secure Digital Host Controller Interface) 컴포넌트는 Heap buffer overflow 취약점이 있습니다. SDHCI는 비휘발성 메모리 카드 포맷인 SD의 컨트롤러 에뮬레이션입니다.

begin = s->data_count;
         if ((length + begin) < block_size) {
             s->data_count = length + begin;
             length = 0;
          } else {
             s->data_count = block_size; // [1]
             length -= block_size - begin;
         }
         dma_memory_write(s->dma_as, dscr.addr,
                          &s->fifo_buffer[begin],
                          s->data_count - begin); // [2]
         dscr.addr += s->data_count - begin;

위 코드는 함수 sdhci_do_adma의 일부입니다. 함수 sdhci_do_adma는 SDHCI와 Guest system memory(DMA buffer) 간에 데이터 통신을 담당합니다. 블록 버퍼를 사용한 데이터 통신이 이루어질 때 블록 버퍼에 들어갈 데이터 크기를 계산하는 식은 block_size - s->data_count입니다. s->data_count는 현재 블록 버퍼의 오프셋을, block_sizeblksize(0x4 오프셋의 레지스터 값)를 담고 있고 데이터 통신이 이루어지는 도중 blksize의 값을 변경할 수 있어 heap overflow 취약점이 발생합니다.

해당 취약점을 악용해 Geust system을 대상으로 정보 노출, 데이터 추가 및 수정, DoS 공격이 가능합니다.