Recherche de mémoire de master sur CVE-2024-51324 (BYOVD). Exploit avancé avec 4 modes opérationnels (SCANNER, LOADER, KILLER, CLEANUP), vérification SHA-256 du pilote et documentation académique complète. Pièce de portfolio couvrant la sécurité des pilotes du noyau Windows, la rétro-ingénierie IOCTL et l'exploitation Bring Your Own Vulnerable Driver.
Bring Your Own Vulnerable Driver (BYOVD) — Baidu Antivirus
BdApiUtil64.sys
Trois primitives noyau non documentées : terminaison de processus, suppression arbitraire de fichiers, et suppression de fichier en cours d'utilisation avec contournement deSectionObjectPointer
Affecté : Baidu Antivirus v5.2.3.116083 (BdApiUtil64.sys)
Chargement du pilote vulnérable dans le noyau (mode LOADER)
Ce dépôt contient ma recherche de mémoire de Master sur CVE-2024-51324, une
vulnérabilité Bring Your Own Vulnerable Driver (BYOVD) dans le pilote noyau
BdApiUtil64.sys de Baidu Antivirus.
L'enregistrement NVD attribue un score de base CVSS v3.1 de 3,8 (Faible) avec le vecteur
AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N et CWE-269 (Gestion incorrecte des privilèges).
Ce score ne reflète pas la réalité de l'attaque locale documentée dans cette recherche : une
fois que le pilote est chargé par un administrateur (étape unique réalisable via ingénierie
sociale ou toute élévation de privilège locale), tout processus ultérieur — y compris les
processus sandboxés ou ceux d'un utilisateur standard — peut envoyer des IOCTL sans vérification
supplémentaire de privilèges. Un score CVSS v3.1 évalué par le chercheur de 7,8 (Élevé) avec
le vecteur AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H capture plus précisément la réalité de
l'exploitation post-chargement. Les deux scores sont discutés dans la documentation technique.
Le pilote crée l'objet de périphérique \Device\BdApiUtil avec
SecurityDescriptor = NULL, permettant à tout processus, quel que soit son niveau d'intégrité,
d'ouvrir un handle et d'envoyer des IOCTL. L'analyse statique via Ghidra 11.0.3 révèle que le
mécanisme interne est plus important que ce qui a été documenté précédemment : le pilote utilise
PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) plutôt que
ZwOpenProcess, contournant entièrement SeAccessCheck. Trois primitives IOCTL ont été
entièrement caractérisées, dont deux n'ont aucune documentation publique antérieure.
| Aspect | Description |
|---|---|
| Correction technique | ZwOpenProcess est absent de la table d'importation ; le mécanisme réel est PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), qui contourne inconditionnellement SeAccessCheck |
| Trois primitives documentées | Terminaison de processus (0x800024B4), suppression arbitraire de fichiers (0x80002648), et suppression de fichier en cours d'utilisation avec contournement de SectionObjectPointer (0x8000264C) — les deux dernières n'ont aucune documentation publique antérieure |
| Quatre modes opérationnels | LOADER, KILLER, SCANNER et CLEANUP — gestion complète du cycle de vie |
| Vérification SHA-256 | Hachage du pilote vérifié avant toute tentative de chargement |
| Tests empiriques PPL | 10 tentatives par catégorie de processus confirmant PPL comme seule mitigation au moment de l'exécution |
| Analyse forensique | Event ID 7045 persistant après nettoyage ; Event ID 1102 comme artefact auto-incriminant d'effacement de journal |
| Règles de détection | Règle Sigma et configuration Sysmon (Event ID 6 par hachage + Event ID 13 par clé de registre) |
| Réévaluation CVSS | Écart documenté entre le score officiel NVD (3,8 Faible) et la sévérité d'exploitation locale évaluée par le chercheur (7,8 Élevé) |
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # Pilote (non distribué)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # Exploit principal — 4 modes opérationnels
│
└── docs/
├── screenshots/
│ ├── 01-byovd-scan.png
│ ├── 02-byovd-scan-target.png
│ ├── 03-byovd-load.png
│ ├── 04-byovd-load-custom.png
│ ├── 05-kill-name.gif
│ ├── 06-kill-pid.gif
│ ├── 07-kill-limit.gif
│ ├── 08-dry-run.gif
│ └── 09-byovd-cleanup.png
│
└── analysis/
├── 01-root-cause.md
├── 02-driver-analysis.md # Analyse Ghidra complète, trois primitives, tests PPL
└── 03-timeline.md
BdApiUtil64.sys (SHA-256 : 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe
python exploit/byovd_killer.py --load
python exploit/byovd_killer.py --load --driver C:\path\to\BdApiUtil64.sys
python exploit/byovd_killer.py --load --service-name MyService
python exploit/byovd_killer.py --kill notepad.exe
python exploit/byovd_killer.py --pid 1234
python exploit/byovd_killer.py --kill notepad.exe --max-instances 2
python exploit/byovd_killer.py --kill notepad.exe --dry-run
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService
| Mode | Commande | Privilèges | Description |
|---|---|---|---|
| SCANNER | --scan | Tout utilisateur | Informations sur le système et l'état du pilote |
| LOADER | --load | Administrateur | Chargement du pilote via création d'un service noyau |
| KILLER | --kill / --pid | Tout utilisateur | Terminaison de processus via IOCTL |
| CLEANUP | --cleanup | Administrateur | Arrêt et suppression du service du pilote |






