[하루한줄] CVE-2021-32537: Realtek 드라이버의 OOB Access 취약점
URL
CVE-2021-32537: Out-of-bounds access in RTKVHD64 leading to pool corruption.
Target
- Microsoft Surface Book/Pro
- Lenovo Thinkpad
- Dell XPS 13
Explain
Realtek의 오디오 드라이버에서 OOB Access 취약점이 발견되어 세부 정보 및 PoC가 공개되었습니다.
취약점은 오디오 드라이버 RTKVHD64.sys
에서 발생합니다. 해당 드라이버는 초기화 중 PcAddAdapterDevice
함수의 파라미터인 StartDevice
에 의해 호출된 InitDeviceExtension
함수에서 커널 풀에 MEVT
구조체를 할당합니다.
devext->unk->events = ExAllocatePoolWithTag(pooltype, 0x5F0ui64, 'mEvt');
struct EVT {
PKSPIN_LOCK lock;
PVOID event;
UINT64 someflag;
} /* sizeof == 0x18 */
struct MEVT {
struct EVT array[63];
UINT64 flags;
} /* sizeof == 0x18*63 + 8 == 0x5f0 */
MEVT
의 EVT
구조체는 63개의 고정된 크기의 배열입니다.
input_index = *(_DWORD *)IrpSystemBuffer;
v5 = Crash(mevts, stack->FileObject, unk, &mevts->array[input_index].event,
(KSPIN_LOCK *)&mevts->array[input_index]);
드라이버에 0x225f04
IOCTL 코드를 전송하면 유저버퍼인 IrpSystemBuffer
의 첫 번째 DWORD 데이터가 input_index
에 저장됩니다. input_index
는 위 Crash
함수에서 (KSPIN_LOCK *)&mevts->array[input_index]
와 같이 MEVT
의 EVT
배열에 접근할 때 인덱스로 사용됩니다. 따라서 해커는 IOCTL 입력 버퍼를 통해 input_index
를 임의의 값으로 설정할 수 있어 Out Of Bound Access로 이어집니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.