
Exploit de preuve de concept pour CVE-2025-7771, une vulnérabilité de pilote du noyau Windows dans ThrottleStop.sys permettant la lecture/écriture arbitraire de la mémoire physique et l'élévation de privilèges locale vers SYSTEM.
Preuve de concept pour CVE-2025-7771. ThrottleStop.sys expose deux gestionnaires IOCTL qui permettent une lecture/écriture arbitraire de la mémoire physique sans aucun contrôle d'accès — tout processus administrateur peut lire ou écrire n'importe où dans la RAM physique.
Testé sur Windows 10 22H2 et Windows 11 23H2 x64.
J'ai commencé par charger le binaire du pilote dans IDA Pro pour comprendre son fonctionnement interne. J'ai trouvé la routine de dispatch IRP_MJ_DEVICE_CONTROL et je l'ai suivie jusqu'à deux codes IOCTL :
0x80006498 — lecture depuis une adresse physique0x8000649C — écriture vers une adresse physiqueLes deux appellent simplement MmMapIoSpace directement avec l'adresse que vous passez. Pas de vérification des limites, pas de validation de l'appelant, rien. C'est le bug.
À partir de là, le chemin d'exploitation est assez simple :
\\.\ThrottleStopNtQuerySystemInformation classe 79) pour construire une table de traduction virtuelle→physiqueNtQuerySystemInformation classe 11ntoskrnl.exe depuis le disque pour résoudre l'adresse RVA de l'export PsInitialSystemProcess, l'ajouter à la base runtime pour obtenir l'adresse virtuelle du noyauEPROCESS+0x4b8ActiveProcessLinks pour trouver notre propre EPROCESSLe champ de jeton est _EX_FAST_REF donc les 4 bits de poids faible sont un compteur de références, pas une partie du pointeur. Masquez-les lors de la lecture du jeton SYSTEM, conservez nos propres bits de compteur lors de l'écriture, sinon vous risquez un écran bleu.
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
Nécessite MSVC (VS2022+) et que le pilote soit chargé. Exécutez en tant qu'administrateur.
Ces valeurs sont pour Windows 10 20H2 à 22H2 et Windows 11 22H2/23H2 x64. Vérifiez avec dt nt!_EPROCESS dans WinDbg si vous êtes sur une version différente.
| Champ | Offset |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
À des fins éducatives et de recherche uniquement. Testé sur une VM personnelle.