
CVE-2022-24494
CVE-2022-24494
La vulnérabilité est une lecture arbitraire de la mémoire. La cause racine est un manque de validation d'une adresse mémoire fournie depuis l'espace utilisateur, utilisée dans une opération memcpy afin de copier des données depuis cette adresse mémoire vers la mémoire pool. Le manque de vérification se trouve à l'adresse Afd!AfdTliIoControl+0x40B

Comme vous pouvez le voir dans la capture d'écran ci-dessus, l'adresse mémoire de l'espace utilisateur est copiée depuis InputBuffer+0x20 une première fois en vérifiant correctement avec MmUserProbeAddress si l'adresse mémoire se trouve dans l'espace d'adressage mémoire de l'espace utilisateur. Cependant, une seconde fois, cette même adresse mémoire est copiée depuis InputBuffer+0x20 dans le registre RAX, mais cette fois sans vérifier correctement l'adresse mémoire à l'aide de MmUSerProbeAddress. En raison de ce manque de validation, il est possible de fournir une adresse mémoire noyau arbitraire. Cette adresse est ensuite copiée dans une allocation mémoire pool (tag : AfdL) à l'aide d'une opération memcpy, comme vous pouvez le voir ci-dessous dans AfdTliIoControl+0x5AB :

Le PoC ci-dessous montre l'adresse noyau fournie depuis l'espace utilisateur (0xffffffdeadbeef01)

Le pilote tente de lire cette adresse mémoire invalide, ce qui entraîne un BSOD :

La valeur copiée vers le pointeur dst dans l'opération memcpy est ensuite transmise au pilote tcpip.sys. Je n'ai pas approfondi quels objets internes sont affectés et s'il est possible de fuiter de la mémoire depuis l'espace utilisateur en appelant des API qui pourraient obtenir des données de ces éventuels objets internes.
Microsoft a publié quelques mois plus tard une recherche qui parle de l'impact potentiel d'EoP de ce type de vulnérabilités (lecture arbitraire de la mémoire) :
https://msrc-blog.microsoft.com/2022/03/22/exploring-a-new-class-of-kernel-exploit-primitive/