
CVE-2022-24494
CVE-2022-24494
A vulnerabilidade é uma leitura arbitrária de memória. A causa raiz é a falta de validação em um endereço de memória fornecido do modo usuário que é usado em uma operação memcpy para copiar dados desse endereço de memória para a memória pool. A falta de verificação está no endereço Afd!AfdTliIoControl+0x40B

Como você pode ver na captura de tela acima, o endereço de memória do modo usuário é copiado de InputBuffer+0x20 uma primeira vez, verificando corretamente com MmUserProbeAddress se o endereço de memória está dentro do espaço de endereços de memória do modo usuário. Porém, uma segunda vez, esse mesmo endereço de memória é copiado de InputBuffer+0x20 para o registrador RAX, mas desta vez sem verificar corretamente o endereço de memória usando MmUSerProbeAddress. Devido a essa falta de validação, é possível fornecer um endereço de kernel arbitrário. Esse endereço é posteriormente copiado para uma alocação de memória pool (tag: AfdL) usando uma operação memcpy, como você pode ver abaixo em AfdTliIoControl+0x5AB:

O PoC abaixo mostra o endereço de kernel fornecido do modo usuário (0xffffffdeadbeef01)

O driver tenta ler desse endereço de memória inválido, resultando em um BSOD:

O valor copiado para o ponteiro dst na operação memcpy é posteriormente passado para o driver tcpip.sys. Não investiguei quais objetos internos são afetados e se é possível vazar memória do modo usuário chamando APIs que poderiam obter dados desses possíveis objetos internos.
A Microsoft divulgou alguns meses depois uma pesquisa que fala sobre o potencial impacto de EoP desse tipo de vulnerabilidade (leitura arbitrária de memória):
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/