
CVE-2022-24494
CVE-2022-24494
La vulnerabilidad es una lectura arbitraria de memoria. La causa raíz es la falta de validación en una dirección de memoria suministrada desde el espacio de usuario (user-land) que se utiliza en una operación memcpy para copiar datos desde esta dirección de memoria a la memoria del pool. La falta de comprobación está en la dirección Afd!AfdTliIoControl+0x40B

Como puedes ver en la captura de pantalla anterior, la dirección de memoria del espacio de usuario se copia desde InputBuffer+0x20 una primera vez comprobando correctamente con MmUserProbeAddress si la dirección de memoria está dentro del espacio de direcciones de memoria del espacio de usuario. Sin embargo, una segunda vez esta misma dirección de memoria se copia desde InputBuffer+0x20 al registro RAX, pero esta vez sin comprobar correctamente la dirección de memoria usando MmUSerProbeAddress. Debido a esta falta de validación, es posible proporcionar una dirección arbitraria del kernel.
Esta dirección se copia luego a una asignación de memoria del pool (etiqueta: AfdL) mediante una operación memcpy, como puedes ver a continuación en AfdTliIoControl+0x5AB:

El PoC a continuación muestra la dirección del kernel proporcionada desde el espacio de usuario (0xffffffdeadbeef01)

El controlador intenta leer desde esta dirección de memoria no válida, lo que provoca un BSOD:

El valor copiado al puntero dst en la operación memcpy se pasa posteriormente al controlador tcpip.sys. No he profundizado en qué objetos internos se ven afectados ni si es posible filtrar memoria desde el espacio de usuario llamando a APIs que podrían obtener datos de estos posibles objetos internos.
Microsoft publicó unos meses después una investigación que habla sobre el posible impacto de EoP (elevación de privilegios) de este tipo de vulnerabilidades (lectura arbitraria de memoria):
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/