
Lenovo Diagnostics Driver EoP - Lecture/Écriture arbitraire
Un contrôle d'accès incorrect pour le pilote Lenovo Diagnostics permet à un utilisateur à faibles privilèges d'émettre des IOCTL de périphérique afin d'effectuer des lectures/écritures arbitraires en mémoire physique/virtuelle.
Merci à ch3rn0byl pour son aide (et j'ai totalement à 100 % pompé deux de ses fonctions).
IOCTL 0x222000 :
IOCTL 0x222008/0x22200C :
IOCTL 0x222010 :
IOCTL 0x222014 :
Écriture via MmMapIoSpace
Cet IOCTL copie une valeur depuis un pointeur fourni dans le tampon d'entrée vers la mémoire physique mappée
Afin de résoudre MmPteBase et autres prérequis, un espace physique « d'échange » est trouvé en recherchant dans la plage de mémoire physique 0x1000 - 0x10000 des octets nuls (8 zéros).
Une fois cet espace trouvé, la mémoire virtuelle est copiée dans cet espace d'échange via l'IOCTL 0x222014 puis relue à l'aide de l'IOCTL 0x222010.
En l'état actuel, TOUTES les lectures virtuelles sont effectuées à l'aide de cet espace « d'échange ».
Est-ce la meilleure façon de faire des lectures/écritures virtuelles ? Probablement pas.
Est-ce que ça fonctionne ? Oui.
Oh, et aussi, occupez-vous de vos propres offsets — cela a été testé sur Windows 11 21H2 avec HVCI désactivé.