Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2024-51324 — Master's Thesis research on CVE-2024-51324 (BYOVD). Advanced exploit with 4 operational modes (SCANNER, LOADER, KILLER, CLEANUP), SHA-256 driver verification, and full academic documentation. Portfolio piece covers Windows kernel driver security, IOCTL reverse engineering, and Bring Your Own Vulnerable Driver exploitation. | Kitploit
Outils/GitHubGitHub/devianntsec/cve-2024-51324
Defensive ToolsVulnerability AnalysisExploitationReverse EngineeringForensicsPenetration TestingPapers & ResearchLearning & EducationRed Teaming

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Binary Exploitation
GitHubdevianntsec/cve-2024-51324

CVE-2024-51324

Voir le dépôt
1il y a 3 moisPas encore vérifié

À propos

Master's Thesis research on CVE-2024-51324 (BYOVD). Advanced exploit with 4 operational modes (SCANNER, LOADER, KILLER, CLEANUP), SHA-256 driver verification, and full academic documentation. Portfolio piece covers Windows kernel driver security, IOCTL reverse engineering, and Bring Your Own Vulnerable Driver exploitation.

Partager

CVE-2024-51324 — BYOVD : BdApiUtil64.sys · Recherche de mémoire de master

Platform Language License: MIT Research CVSS

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 de SectionObjectPointer
Affecté : Baidu Antivirus v5.2.3.116083 (BdApiUtil64.sys)


Chargement du pilote vulnérable dans le noyau (mode LOADER)

Description

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.

Ma contribution


Structure du dépôt

root@kitploit:~
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

Démarrage rapide

Prérequis

  • Windows 10/11 (toute version)
  • Python 3.6+
  • BdApiUtil64.sys (SHA-256 : 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)
  • Compte administrateur (modes LOADER et CLEANUP uniquement)
  • Compte utilisateur standard suffisant pour le mode KILLER une fois le pilote chargé

Étape 1 — Analyser le système

root@kitploit:~
python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe

Étape 2 — Charger le pilote (Admin requis)

root@kitploit:~
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

Étape 3 — Tuer des processus (Admin non requis)

root@kitploit:~
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

Étape 4 — Nettoyage (Admin requis)

root@kitploit:~
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService

Modes opérationnels


Démonstrations

Mode SCANNER — Informations système

Mode SCANNER

Mode SCANNER — Recherche de processus cible

Cible SCANNER

Mode LOADER — Chargement du pilote

Mode LOADER

Mode LOADER — Chemin personnalisé et nom de service

LOADER personnalisé

Mode KILLER — Tue par nom de processus

Tue par nom

Mode KILLER — Tue par PID

Tue par PID

Mode KILLER — Limiter les instances

Limiter les instances

Mode KILLER — Simulation (Dry Run)

Simulation

Mode CLEANUP — Déchargement du pilote

Mode CLEANUP


Aperçu technique

Surface d'attaque IOCTL — Trois primitives

Le rétro-ingénierie de BdApiUtil64.sys via Ghidra 11.0.3 a identifié une surface d'attaque plus large que toute source publique antérieure ne le documente :

Primitive 1 — Terminaison de processus (0x800024B4)

La chaîne de distribution comporte trois niveaux :

root@kitploit:~
IOCTL 0x800024B4
  └─ FUN_00028630  (distributeur IRP_MJ_DEVICE_CONTROL)
       └─ FUN_00015230  (wrapper : valide le code IOCTL et la taille du tampon = 4 octets)
            └─ FUN_000152b0  (gestionnaire kill — locus de vulnérabilité)

Gestionnaire reconstruit (Ghidra) :

root@kitploit:~
if ((param_1 != 0) && (param_1 != 4)) {
    PsLookupProcessByProcessId(param_1, &local_res10);
    ObOpenObjectByPointer(
        local_res10,
        0x200,      // OBJ_KERNEL_HANDLE
        0,          // PassedAccessState: NULL
        0x1fffff,   // PROCESS_ALL_ACCESS
        0,          // ObjectType: NULL
        0,          // AccessMode: KernelMode  ← contourne SeAccessCheck
        local_res18
    );
    ZwTerminateProcess(local_res18[0], 0);
}

Pourquoi KernelMode contourne SeAccessCheck :

root@kitploit:~
Chemin ZwOpenProcess :
  NtOpenProcess → ObOpenObjectByName → SeAccessCheck
                                        (vérifie DACL, jeton appelant, niveau d'intégrité)
                                        peut retourner STATUS_ACCESS_DENIED

Chemin ObOpenObjectByPointer(KernelMode) :
  SeAccessCheck  ← NON invoqué
  → Handle PROCESS_ALL_ACCESS accordé inconditionnellement

ZwOpenProcess est absent de la table d'importation du pilote. La description basée sur ZwOpenProcess présente dans les sources antérieures est techniquement incorrecte.

Primitive 2 — Suppression arbitraire de fichiers (0x80002648)

Le gestionnaire FUN_00013bb0 reçoit un chemin Unicode, valide InputBufferLength ≥ 0x208, et délègue à FUN_00013c10. Le sous-gestionnaire ouvre le fichier en mode noyau (pas de SeAccessCheck sur le jeton appelant) et envoie une IRP IRP_MJ_SET_INFORMATION avec FileInformationClass = 0xD (FileDispositionInformation), marquant le fichier pour suppression. Tout fichier accessible au noyau peut être supprimé indépendamment des permissions NTFS.

Primitive 3 — Suppression de fichier en cours d'utilisation (0x8000264C)

Le gestionnaire FUN_000139d0 accède à FileObject->SectionObjectPointer (décalage 0x28 dans FILE_OBJECT) et met temporairement à zéro deux champs avant d'envoyer l'IRP de suppression :

root@kitploit:~
plVar1 = FileObject->SectionObjectPointer;
plVar1[2] = 0;  // DataSectionObject  → NULL
plVar1[0] = 0;  // ImageSectionObject → NULL

IofCallDriver(device, irp);
KeWaitForSingleObject(...);

// Restauration après achèvement
plVar1[2] = DataSectionObject_backup;
plVar1[0] = ImageSectionObject_backup;

IopDeleteFile vérifie ces pointeurs avant d'honorer FileDispositionInformation. En les annulant, le gestionnaire fait apparaître le fichier comme non mappé, contournant la protection d'utilisation en cours. Cette primitive peut supprimer le binaire d'un agent EDR en cours d'exécution du disque sans d'abord terminer le processus.

Chaîne complète d'élimination d'EDR :

root@kitploit:~
1. Terminer le processus EDR     (IOCTL 0x800024B4)
2. Supprimer le binaire EDR du disque (IOCTL 0x8000264C) ← fonctionne même s'il est mappé en mémoire
3. Empêcher le redémarrage       ← le fichier exécutable n'existe plus sur le disque

Tests empiriques

Résistance PPL (10 tentatives par catégorie de processus)

PPL (Protected Process Light) est la seule mitigation au moment de l'exécution qui résiste à la terminaison basée sur ObOpenObjectByPointer(KernelMode) à partir de ce pilote.

Analyse de la table d'importation


Scénarios post-exploitation


Artefacts forensiques

Ce qui persiste après --cleanup

Event ID 7045 est le seul artefact qui survit à un cycle d'attaque complet avec nettoyage. Il contient le nom du service, ImagePath (chemin complet du binaire), le type de service et l'horodatage de création.

L'effacement du journal est auto-incriminant

Exécuter wevtutil cl System pour supprimer Event ID 7045 génère Event ID 1102 dans le canal Security, enregistrant qui a effacé le journal et quand. Cela rend la falsification des journaux détectable même si l'artefact original est détruit.

Action de l'attaquantArtefact résultantCanalPersistance
wevtutil cl System

Règles de détection

Règle Sigma

root@kitploit:~
title: BYOVD Attack via BdApiUtil64.sys (CVE-2024-51324)
id: a3f7c2e1-8b4d-4f9a-b6e3-2d1c9f8a7b5e
status: experimental
logsource:
  product: windows
  service: system
detection:
  selection_eventid:
    EventID: 7045
  selection_driver:
    - ServiceName|contains: 'BdApi'
    - ImagePath|contains: 'BdApiUtil64.sys'
  condition: selection_eventid and selection_driver
level: high
tags:
  - attack.defense_evasion
  - attack.t1562.001
  - attack.privilege_escalation
  - attack.t1068

Règle Sigma complète et configuration Sysmon (Event ID 6 par hachage SHA-256 + Event ID 13 par clé de registre) disponibles dans docs/detection/.


Documentation technique

DocumentDescription
Analyse de la cause racine

Contexte académique

Cette recherche fait partie de mon Master en Cybersécurité (UCAM — Campus Internacional de Ciberseguridad), analysant les vulnérabilités N-Day dans plusieurs environnements.

Cette CVE représente le vecteur pilote noyau Windows / BYOVD dans le mémoire, démontrant :

  • Analyse de la surface d'attaque du pilote noyau via énumération complète des IOCTL
  • Correction technique des descriptions publiques antérieures (ZwOpenProcess absent ; le mécanisme réel est ObOpenObjectByPointer(KernelMode))
  • Découverte de deux primitives précédemment non documentées (IOCTL de suppression de fichiers)
  • Caractérisation empirique de la résistance PPL
  • Analyse des artefacts forensiques via cycle complet post-nettoyage
  • Critique du score CVSS : écart documenté entre le score officiel NVD et la sévérité d'exploitation locale

Mots-clés : BYOVD · Pilote noyau · IOCTL · Ghidra · Terminaison de processus · Suppression de fichiers · SectionObjectPointer · ObOpenObjectByPointer · Contournement de la défense · CVE-2024-51324


Auteur

Annais Molina (devianntsec) — Étudiante en Master en Cybersécurité

GitHub LinkedIn Email


Remerciements

  • NVD / NIST — Enregistrement et score CVE
  • loldrivers.io — Index des pilotes vulnérables maintenu par la communauté
  • BlackSnufkin — Référence PoC originale
  • Cisco Talos — Analyse BYOVD du ransomware DeadLock (décembre 2025)

Licence

Licence MIT — voir LICENSE


Avertissement légal

Ce dépôt est fourni à des fins éducatives et de recherche en sécurité uniquement, dans le cadre d'une thèse de Master académique. Tous les tests ont été effectués sur des machines virtuelles isolées sans exposition réseau. Le pilote vulnérable (BdApiUtil64.sys) n'est pas distribué dans ce dépôt — il doit être obtenu indépendamment. Utiliser uniquement sur des systèmes dont vous êtes propriétaire ou pour lesquels vous avez une autorisation écrite explicite de tester. Toute utilisation non autorisée contre des systèmes est illégale et peut entraîner des poursuites pénales.

© 2026 Annais Molina · Thèse de Master en Cybersécurité
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Télécharger l’outil
AspectDescription
Correction techniqueZwOpenProcess est absent de la table d'importation ; le mécanisme réel est PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), qui contourne inconditionnellement SeAccessCheck
Trois primitives documentéesTerminaison 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érationnelsLOADER, KILLER, SCANNER et CLEANUP — gestion complète du cycle de vie
Vérification SHA-256Hachage du pilote vérifié avant toute tentative de chargement
Tests empiriques PPL10 tentatives par catégorie de processus confirmant PPL comme seule mitigation au moment de l'exécution
Analyse forensiqueEvent ID 7045 persistant après nettoyage ; Event ID 1102 comme artefact auto-incriminant d'effacement de journal
Règles de détectionRè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é)
ModeCommandePrivilègesDescription
SCANNER--scanTout utilisateurInformations sur le système et l'état du pilote
LOADER--loadAdministrateurChargement du pilote via création d'un service noyau
KILLER--kill / --pidTout utilisateurTerminaison de processus via IOCTL
CLEANUP--cleanupAdministrateurArrêt et suppression du service du pilote
IOCTLGestionnairePrimitifDocumentation antérieure
0x800024B4FUN_000152b0Terminaison de processusPartielle (mécanisme incorrect)
0x80002648FUN_00013bb0Suppression arbitraire de fichiersAucune
0x8000264CFUN_00013850Suppression de fichier en cours d'utilisation (contournement SectionObjectPointer)Aucune
ProcessusPPL actifTerminableCause
notepad.exeNon✅ 10/10Aucune protection
regedit.exeNon✅ 10/10Aucune protection
spoolsv.exeNon✅ 9/10SCM redémarre dans 1 cas
MsMpEng.exeNon (pas de PPL dans l'environnement de test)✅ 8/10Légère variabilité temporelle
lsass.exeNon (RunAsPPL absent)✅ 6/10Variabilité d'état
csrss.exeOui (PPL inconditionnel)❌ 0/10STATUS_ACCESS_DENIED
PrésentAbsent
PsLookupProcessByProcessIdZwOpenProcess
ObOpenObjectByPointerSeAccessCheck
ZwTerminateProcessSePrivilegeCheck
PsGetCurrentProcess
IoGetRequestorProcess
ScénarioCibleImpact
Terminaison EDR/AVMsMpEng.exe, SentinelAgent.exeContournement de la défense
Suppression du binaire EDR (en cours d'utilisation)Exécutable EDR sur disqueEmpêche le redémarrage après terminaison
Perturbation des journaux d'auditService EventLogAltération des preuves forensiques
Contournement de processus protégélsass.exe (sans RunAsPPL)Facilitateur d'accès aux identifiants
Préparation avant chiffrement par ransomwareAgents de sécuritéChaîne complète de contournement de la défense
ArtefactÉtat après nettoyage
Service dans SCMSupprimé
Pilote dans driverquerySupprimé
Objet de périphériqueInaccessible
Clé de registreSupprimée
Event ID 7045Persiste — ne peut pas être supprimé par sc delete
Event ID 7045 supprimé
System
—
wevtutil cl SystemEvent ID 1102 généréSecurityPermanent
Contrôle d'accès manquant dans le gestionnaire IRP_MJ_DEVICE_CONTROL
Analyse du piloteAnalyse Ghidra complète, trois primitives IOCTL, tests PPL, analyse de la table d'importation
Chronologie CVEDécouverte, divulgation et chronologie des correctifs