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-30051 — Master's Thesis research on CVE-2024-30051 (Windows DWM Heap Overflow). Features a high-reliability exploit with automated heap spray optimization, real-time logging, and empirical success-rate analysis. Portfolio piece demonstrating advanced Windows binary exploitation, heap layout manipulation, and LPE via Desktop Window Manager. | Kitploit
Outils/GitHubGitHub/devianntsec/cve-2024-30051
Privilege EscalationMemory ForensicsVulnerability AnalysisExploitationReverse EngineeringPapers & ResearchLearning & EducationPayload DevelopmentBinary Exploitation

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 →

À propos

Master's Thesis research on CVE-2024-30051 (Windows DWM Heap Overflow). Features a high-reliability exploit with automated heap spray optimization, real-time logging, and empirical success-rate analysis. Portfolio piece demonstrating advanced Windows binary exploitation, heap layout manipulation, and LPE via Desktop Window Manager.

GitHubdevianntsec/cve-2024-30051

CVE-2024-30051

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

CVE-2024-30051 — Débordement de tas DWM Windows EoP · Recherche de Mémoire de Master

Platform Language License: MIT Research CVSS

Débordement de tas basé sur tas dans le Gestionnaire de fenêtres du bureau Windows (dwmcore.dll) Élévation de privilège locale → Niveau d'intégrité SYSTEM via le processus DWM Cible de build : Windows 11 22H2 (10.0.22621.3447) · Correctif : KB5037771


Description

Ce dépôt contient ma recherche de Mémoire de Master sur CVE-2024-30051, une vulnérabilité de Élévation de privilège de sévérité élevée (CVSS 7.8) dans la bibliothèque principale du Gestionnaire de fenêtres du bureau Windows (dwmcore.dll).

La vulnérabilité provient d'une erreur de calcul de taille de division entière dans CCommandBuffer::Initialize. La taille utilisée pour new() et la taille utilisée pour memcpy() divergent en raison de cette erreur, produisant un débordement de tas de 0x8F octets. Une exploitation réussie amène dwm.exe à charger une DLL contrôlée par l'attaquant, exécutant du code arbitraire sous le compte window manager\dwm-1 avec Niveau d'intégrité SYSTEM.

Ma Contribution


Structure du dépôt

root@kitploit:~
CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat                        # Copie s11.dll à l'emplacement requis
│
├── exploit/
│   ├── C21.sln                      # Solution Visual Studio 2022
│   ├── exploit_src/
│   │   ├── c26f.vcxproj
│   │   ├── c26f.filters
│   │   └── main.cpp                 # Exploit — heap spray + hooking + débordement
│   └── payload/
│       ├── payload.vcxproj
│       ├── payload.vcxproj.filters
│       ├── dllmain.cpp              # DLL de charge utile — spawn un shell SYSTEM + nettoyage
│       ├── framework.h
│       ├── pch.h
│       └── pch.cpp
│
└── docs/
    ├── screenshots/                 # Captures de diffing de correctifs, WinDbg et forensiques
    └── analysis/
        ├── 01-root-cause.md         # Bogue de division entière dans CCommandBuffer::Initialize
        ├── 02-heap-spray.md         # Données empiriques sur 50 sessions et résultats statistiques
        └── 03-timeline.md           # Chronologie de la découverte, divulgation et correctif

Démarrage rapide

Prérequis

  • Windows 11 22H2 (build 22621.3447, non patché — sans KB5037771)
  • Visual Studio 2022 avec la charge de travail C++ Desktop
  • VM avec snapshot recommandée (nécessaire pour un état de tas reproductible)

Étape 1 — Construire la DLL de charge utile

Ouvrez C21.sln dans Visual Studio 2022. Compilez le projet payload en Release x64.

Étape 2 — Placer la DLL

Exécutez setup.bat depuis la racine du dépôt. Il copie s11.dll vers C:\Users\Public\Documents\s11.dll (le chemin défini par PAYLOAD_DLL_PATH).

⚠️ La DLL doit se trouver exactement à ce chemin avant d'exécuter C26f.exe. La placer à côté de l'exécutable ne fonctionnera pas.

Étape 3 — Construire l'exploit

Compilez le projet C26f en Release x64.

Étape 4 — Exécuter

root@kitploit:~
x64\Release\C26f.exe

Exécutez depuis une invite de commandes standard (non élevée). L'exploit se réessaie automatiquement jusqu'à 10 fois. En cas de succès, dwm.exe charge s11.dll et lance une invite de commandes avec Niveau d'intégrité SYSTEM. Un journal de session est écrit dans %TEMP%\cve_30051_log.txt.


Configuration de l'exploit

root@kitploit:~
#define MAX_ATTEMPTS        10      // Tentatives max de réessai automatique par session
#define SPRAY_STEP          0x10    // Indice d'espacement des trous (1024 trous)
#define SPRAY_RANGE_START   0x3000  // Indice de début de plage de spray
#define SPRAY_RANGE_END     0x7000  // Indice de fin de plage de spray
#define SLEEP_POST_SPRAY    0xC8    // ms d'attente après le spray (200ms)
#define SLEEP_POST_HOLES    0xC8    // ms d'attente après libération des trous (200ms)
#define PAYLOAD_DLL_PATH    "C:\\Users\\Public\\Documents\\s11.dll"

Aperçu technique

Cause racine de la vulnérabilité

Dans CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447), CD2DSharedBuffer::GetBufferSize est appelée deux fois. La taille passée à new() subit une division entière par 0x90 avant la multiplication, tandis que memcpy() utilise la valeur brute :

root@kitploit:~
buffer_size = GetBufferSize()   → p. ex. 0x23F

size_new    = (0x23F / 0x90) * 0x90  = 0x1B0   ← allouée
size_memcpy = 0x23F                             ← copiée

overflow    = 0x23F - 0x1B0 = 0x8F octets

Résultats du diffing de correctifs

Comparaison BinDiff entre le build 10.0.22621.3447 (vulnérable) et 10.0.22621.3593 (patché) :

Le score anormal de 0,32 contre une similarité globale de 0,98 est la signature directe du locus de la vulnérabilité.

Chaîne d'exploitation

root@kitploit:~
1. Hook RtlCreateHeap               → capturer le handle du tas de dwmcore
2. Hook RtlAllocateHeap             → capturer l'adresse du bloc de base
3. Hook NtDCompositionCreateChannel → capturer MappedAddress (région mémoire partagée)
4. Hook NtDCompositionCommitChannel → écraser le champ de taille (0x120 → 0x23F)
                                      injecter des commandes batch supplémentaires
5. Heap spray de 0x10000 objets CHolographicInteropTexture (taille=0x1B0)
6. Libérer des trous tous les 0x10 indices → créer des espaces pour l'atterrissage du débordement
7. Écrire la charge utile dans le buffer de débordement → KCBTable+0x388 + LoadLibraryA + chemin DLL
8. Libérer tous les objets spray → déclencher le débordement → LoadLibraryA("s11.dll")
9. dwm.exe charge la DLL de charge utile → spawn un CMD en intégrité SYSTEM

Analyse empirique du heap spray (50 sessions)

Question de recherche

La RAM disponible influence-t-elle le nombre de tentatives nécessaires pour un heap spray réussi ?

Conception expérimentale

Deux blocs de 25 sessions chacun. Protocole par session : restaurer un snapshot propre après démarrage → attendre 100 secondes de stabilisation → lancer l'exploit → enregistrer la tentative réussie.

BlocRAMSessionsSuccèsÉchecs
A8 192 Mo2524

Résultats

Tests statistiques

TestStatistiquep-valueConclusion
Mann-Whitney UU = 184,0p = 0,031Rejette H₀
Test t de Welcht(23) = −2,695p = 0,011Rejette H₀

Conclusions clés

  • C1 : Le tas de DWM après démarrage est 12,9–19× plus déterministe que la prédiction théorique.
  • C2 : La disponibilité de la RAM a un effet statistiquement significatif sur la fiabilité du spray (p = 0,031).
  • C3 : Diviser la RAM par deux double l'écart-type (1,135 → 2,645).
  • C4 : Le taux d'échec est homogène à 4 % dans les deux configurations.
  • C5 : La constante base = heap_base + 0x720 confirme que la disposition reproductible du tas après démarrage est le principal moteur du déterminisme — et non la densité des trous.
  • C6 : Avec ≥ 8 Go de RAM, un adversaire peut s'attendre à un succès dans les 5 premières tentatives.

Les données brutes complètes, le format du journal de session et les observations de tas déterministe sont documentés dans docs/analysis/02-heap-spray.md.


Sortie post-exploitation

En cas de succès, une fenêtre CMD s'ouvre sous window manager\dwm-1 :

root@kitploit:~
=====================================================
  CVE-2024-30051 - Windows DWM Heap Overflow EoP
  CWE-122  |  CVSS 7.8  |  Elevation of Privilege
=====================================================

  Researched and reproduced by : devianntsec
  Original PoC by              : Ricardo Narvaja (Fortra)
  Target                       : Windows 11 22H2 (22621.3447)

=====================================================

  [*] Current user:
  window manager\dwm-1

  [*] Mandatory Integrity Level:
  Mandatory Label\System Mandatory Level   S-1-16-16384

  [*] Enabled privileges:
  SeImpersonatePrivilege    Enabled

=====================================================
  Shell running under DWM process - SYSTEM level
=====================================================

Les artefacts (s11.dll et le script .bat) sont automatiquement supprimés après 5 secondes via un processus de nettoyage différé.


Artéfacts forensiques


Documentation technique

DocumentDescription

Contexte académique

Cette recherche fait partie de mon Mémoire de 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 application de bureau Windows dans le mémoire, démontrant :

  • Exploitation de débordement de tas basé sur tas via le canal ALPC DirectComposition
  • Diffing binaire (BinDiff) comme méthode systématique de localisation de vulnérabilités N-Day
  • Hooking d'API in-process sans outils externes
  • Quantification empirique du déterminisme du heap spray sur différentes configurations de RAM

Mots-clés : EoP · Débordement de tas · DirectComposition · DWM · Diffing de correctifs · BinDiff · WinDbg · Heap Spray · Analyse empirique · CVE-2024-30051


Auteur

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

GitHub LinkedIn Email


Remerciements

  • Ricardo Narvaja (Fortra/CoreSecurity) — PoC original et writeup de rétro-ingénierie
  • Kaspersky GReAT — Découverte originale de la vulnérabilité et divulgation responsable
  • Microsoft MSRC — Correctif KB5037771 (mai 2024)

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'un Mémoire de Master académique. Tous les tests ont été effectués sur des machines virtuelles isolées sans exposition réseau. Utilisez uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite pour les tester. Toute utilisation non autorisée contre des systèmes est illégale et peut entraîner des poursuites pénales.

© 2026 Annais Molina · Mémoire de Master en Cybersécurité
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Télécharger l’outil
AspectDescription
Diffing de correctifsAnalyse BinDiff complète identifiant CCommandBuffer::Initialize comme le locus exact de la vulnérabilité (score de similarité 0,32 contre 0,98 global sur 14 062 fonctions appariées)
Analyse dynamique WinDbgVérification pas à pas de l'ensemble des 4 hooks, de l'écrasement du champ de taille et de la construction de la charge utile
Analyse empirique de heap spray50 sessions contrôlées sur deux configurations de RAM (8 192 Mo et 4 096 Mo) avec tests statistiques formels
Résultats statistiquesMann-Whitney U (p = 0,031) et test t de Welch (p = 0,011) confirment l'effet de la RAM ; moyennes observées 12,9–19× meilleures que la prédiction théorique d'environ 64 tentatives
Chemin de la DLL de charge utile centraliséChemin codé en dur extrait vers la constante de préprocesseur #define PAYLOAD_DLL_PATH
Journalisation de sessionLog complet horodaté par session écrit dans %TEMP%\cve_30051_log.txt
Documentation académiqueCause racine, analyse de heap spray sur 50 sessions et chronologie CVE
MétriqueValeur
Similarité globale0,98
Confiance0,99
Fonctions appariées14 062 (99,1 %)
Similarité de CCommandBuffer::Initialize0,32
Blocs de base — version vulnérable4
Blocs de base — version patchée20 (16 blocs de validation ajoutés)
1
B4 096 Mo25241
BlocRAMTentatives moyennesÉcart-typeIC 95 %Facteur vs théorie (64)
A8 192 Mo3,3751,135[2,896 ; 3,854]≈ 19× plus rapide
B4 096 Mo4,9582,645[3,841 ; 6,076]≈ 12,9× plus rapide
ArtéfactEmplacementPersistanceOutil de détection
cmd.exe enfant de dwm.exeJournal des événements de sécuritéOui (si l'audit des processus est actif)ID d'événement 4688
Processus externe accédant à dwm.exeSysmonOuiID d'événement Sysmon 10
Crash de dwm.exe lors de tentatives échouéesJournal des événements d'applicationOuiID d'événement 1000
DLL de charge utile s11.dll sur disqueC:\Users\Public\Documents\Seulement les ~5 premières secondesSurveillance SHA-256
Analyse de la cause racine
Bogue de division entière dans CCommandBuffer::Initialize, méthodologie de diffing de correctifs
Analyse du heap sprayDonnées empiriques sur 50 sessions, données brutes de session, tests statistiques
Chronologie CVEChronologie de la découverte, divulgation et correctif