[하루한줄] CVE-2021-3409: QEMU Heap overflow in SDHCI
URL
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_size
는 blksize
(0x4 오프셋의 레지스터 값)를 담고 있고 데이터 통신이 이루어지는 도중 blksize
의 값을 변경할 수 있어 heap overflow 취약점이 발생합니다.
해당 취약점을 악용해 Geust system을 대상으로 정보 노출, 데이터 추가 및 수정, DoS 공격이 가능합니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.