
CVE-2022-24494
CVE-2022-24494
La vulnerabilità è una lettura arbitraria della memoria. La causa principale è la mancanza di validazione di un indirizzo di memoria fornito dallo spazio utente che viene utilizzato in un'operazione memcpy per copiare dati da questo indirizzo di memoria nella memoria del pool. La mancanza di controllo è all'indirizzo Afd!AfdTliIoControl+0x40B

Come puoi vedere nello screenshot precedente, l'indirizzo di memoria dello spazio utente viene copiato da InputBuffer+0x20 una prima volta verificando correttamente con MmUserProbeAddress se l'indirizzo di memoria si trova all'interno dello spazio degli indirizzi di memoria dello spazio utente. Tuttavia, una seconda volta questo stesso indirizzo di memoria viene copiato da InputBuffer+0x20 nel registro RAX, ma questa volta senza controllare correttamente l'indirizzo di memoria utilizzando MmUSerProbeAddress. A causa di questa mancanza di validazione, è possibile fornire un indirizzo kernel arbitrario. Questo indirizzo viene successivamente copiato in un'allocazione di memoria del pool (tag: AfdL) utilizzando un'operazione memcpy, come puoi vedere di seguito in AfdTliIoControl+0x5AB:

Il PoC di seguito mostra l'indirizzo kernel fornito dallo spazio utente (0xffffffdeadbeef01)

Il driver tenta di leggere da questo indirizzo di memoria non valido, portando a un BSOD:

Il valore copiato nel puntatore dst nell'operazione memcpy viene successivamente passato al driver tcpip.sys. Non ho approfondito quali oggetti interni siano interessati e se sia possibile far trapelare memoria dallo spazio utente chiamando API che potrebbero ottenere dati da questi potenziali oggetti interni.
Microsoft ha rilasciato alcuni mesi dopo una ricerca che parla del potenziale impatto EoP di questo tipo di vulnerabilità (lettura arbitraria della memoria):
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/