
CVE-2022-24494
CVE-2022-24494
이 취약점은 임의 메모리 읽기(arbitrary memory read)입니다. 근본 원인은 사용자 영역(user-land)에서 제공된 메모리 주소에 대한 검증이 없다는 점이며, 이 주소는 memcpy 작업에서 해당 메모리 주소의 데이터를 풀 메모리(pool memory)로 복사하는 데 사용됩니다. 검사가 누락된 위치는 Afd!AfdTliIoControl+0x40B 입니다.

위 스크린샷에서 볼 수 있듯이, 사용자 영역 메모리 주소는 InputBuffer+0x20에서 처음 복사될 때 MmUserProbeAddress를 사용하여 해당 메모리 주소가 사용자 영역 메모리 주소 공간 내에 있는지 제대로 검사합니다. 하지만 두 번째로 동일한 메모리 주소가 InputBuffer+0x20에서 RAX 레지스터로 복사될 때는 MmUSerProbeAddress를 사용한 메모리 주소 검사가 제대로 수행되지 않습니다. 이러한 검증 부재로 인해 임의의 커널 주소를 제공하는 것이 가능합니다. 이 주소는 이후 아래 AfdTliIoControl+0x5AB에서 볼 수 있듯이 memcpy 작업을 사용하여 풀 메모리 할당(태그: AfdL)에 복사됩니다:

아래 PoC는 사용자 영역에서 제공된 커널 주소(0xffffffdeadbeef01)를 보여줍니다.

드라이버는 이 잘못된 메모리 주소에서 읽기를 시도하고, 그 결과 BSOD가 발생합니다:

memcpy 작업에서 dst 포인터에 복사된 값은 이후 tcpip.sys 드라이버로 전달됩니다. 어떤 내부 개체가 영향을 받는지, 그리고 잠재적인 내부 개체에서 데이터를 가져올 수 있는 API를 호출하여 사용자 영역에서 메모리를 유출할 수 있는지에 대해서는 깊이 조사하지 않았습니다.
Microsoft는 몇 달 후 이러한 종류의 취약점(임의 메모리 읽기)이 EoP에 미칠 잠재적 영향에 대해 논의하는 연구 자료를 공개했습니다:
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/