
Date du projet : oct. 2025 / implémentation de PoC pour CVE-2025-54110, une vulnérabilité de débordement d'entier au niveau du noyau dans l'appel système Windows `NtQueryDirectoryObject`.
Implémentation PoC pour CVE-2025-54110, une vulnérabilité de débordement d'entier au niveau du noyau dans l'appel système Windows NtQueryDirectoryObject.
CVE : https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54110
Ce dépôt contient un PoC crash-only pour la vulnérabilité EoP du noyau CVE-2025-54110, développé uniquement à des fins de recherche en sécurité, rétro-ingénierie et recherche en développement d'exploits. Ce code est destiné à montrer des techniques de recherche de vulnérabilités, notamment :
Ce PoC n'atteint PAS l'élévation de privilèges ni un BSOD fiable. Il est conçu pour déclencher en toute sécurité des violations d'accès qui sont interceptées par les protections du noyau Windows.
Date de publication : Septembre 2025 (correctif de sécurité du Patch Tuesday de Windows)
| Propriété | Valeur |
|---|---|
| CWE | CWE-190 : Débordement d'entier ou enroulement |
| Score CVSS 3.1 | 8.8 (Élevé) / 7.7 (Temporel) |
| Chaîne vectorielle | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:U/RL:O/RC:C |
| Vecteur d'attaque | Local |
| Complexité d'attaque | Faible |
| Privilèges requis | Faibles |
| Interaction utilisateur | Aucune |
| Portée | Modifiée |
| Confidentialité | Élevée |
| Intégrité | Élevée |
| Disponibilité | Élevée |
| Maturité de l'exploit | Non prouvée |
Une vulnérabilité de débordement d'entier dans le noyau Windows permet à un attaquant authentifié d'élever potentiellement ses privilèges localement. Selon l'avis de Microsoft :
"Un attaquant pourrait exploiter cette vulnérabilité en envoyant une entrée spécialement conçue depuis un processus en mode utilisateur en bac à sable pour déclencher un débordement d'entier, entraînant un débordement de tampon dans le noyau et permettant une élévation de privilèges ou une évasion du bac à sable."
Windows Update Files from Aug 2025 & Sep 2025 (KB.msu) ↓ Extract CAB Files ↓ Calculate SHA-256 Hashes (August vs September) ↓ Identify Changed Files ↓ Ghidra Version Tracking Analysis ↓ Setting Symbol Servers to Clarify Function Names ↓ Function-Level Diff Comparison
### 2. Fichiers analysés
L'analyse initiale s'est concentrée sur deux composants principaux du noyau :
#### win32k.sys (-)
- **Résultat :** Aucun changement significatif détecté
- **Plage de score :** 0.97-1.0 (haute similarité)
- **Conclusion :** Pas le composant vulnérable pour CVE-2025-54110
#### ntoskrnl.exe (+)
- **Résultat :** Plusieurs fonctions avec des changements significatifs
- **Plage de score :** Fonctions avec scores ≤0.951
- **Différences de longueur :** Variations de longueur en octets entre source et destination détectées
- **Nombre total d'éléments exportés :** 2 036 fonctions pour analyse
### 3. Résultats de suivi de version Ghidra
Exemple de changements identifiés dans `ntoskrnl.exe` :
| Score | Confiance | Longueur source | Longueur dest | Fonction source | Fonction dest |
|-------|-----------|-----------------|---------------|-----------------|---------------|
| 0.951 | 2.618 | 1023 | 365 | FUN_1403146d0 | FUN_1403a4ea0 |
| 0.950 | 2.285 | 113 | 203 | FUN_140680810 | FUN_1406d952c |
| 0.950 | 3.137 | 782 | 1050 | FUN_14032106c | FUN_140303a38 |
| 0.951 | 2.675 | 141 | 171 | FUN_140407bd0 | FUN_140a172a0 |
| 0.951 | 2.660 | 346 | 150 | FUN_140610e60 | FUN_1406115d4 |
---
## Déclaration de PoC
### Approche technique
Le PoC (`precise_overflow_bsod.c`) tente de déclencher la vulnérabilité de débordement d'entier via :
1. **Calcul précis du seuil :** `0xfffffdbc` (dérivé de base=0x20, name=0x200)
2. **API NtQueryDirectoryObject :** Fonction cible pour déclencher le débordement
3. **Stratégie d'attaque en plusieurs phases :**
- Phase 1 : Tentatives de débordement d'entier de précision
- Phase 2 : Ciblage de la mémoire du noyau
- Phase 3 : Exploitation multi-thread
### Structure du code```c
// Key threshold values calculated for overflow
ULONG precise_thresholds[] = {
0xfffffdbc, // Precise threshold - base=0x20, name=0x200
0xfffffdbb, // Threshold - 1
0xfffffdbd, // Threshold + 1
0xfffffdba, // Threshold - 2
0xfffffdbe, // Threshold + 2
};
// Buffer configurations to test edge cases
PVOID buffer_types[] = {
VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE), // Normal buffer
VirtualAlloc(NULL, 0x10, MEM_COMMIT, PAGE_READWRITE), // Small buffer
NULL, // NULL pointer
(PVOID)0x4141414141414141, // Invalid pointer
(PVOID)0x0000000000000000, // Zero address
};
NtQueryDirectoryObject() Parameters: ├── DirectoryHandle: \BaseNamedObjects, \KernelObjects, etc. ├── Buffer: Various pointer configurations ├── BufferLength: Calculated overflow thresholds (0xfffffdbc variants) ├── ReturnSingleEntry: TRUE/FALSE variations ├── RestartScan: TRUE/FALSE variations └── Context: Controlled iteration state
---
## Pourquoi le PoC ne fait pas planter le système
### Résultats réels
Le PoC retourne systématiquement `STATUS_ACCESS_VIOLATION (0xC0000005)` sans provoquer un écran bleu de la mort (BSOD). Cela est **voulu** et démontre plusieurs mécanismes critiques de sécurité du noyau Windows :
### 1. Gestion structurée des exceptions (SEH)```
User-Mode Input → NtQueryDirectoryObject
↓
ProbeForRead/Write
↓
__try { ... }
↓
Access Violation Detected
↓
__except { ... }
↓
Return STATUS_ACCESS_VIOLATION
Pourquoi ça fonctionne :
Fonctionnalité CPU moderne qui empêche le mode noyau (Ring 0) d'accéder à la mémoire en mode utilisateur (Ring 3) sans autorisation explicite :``` Kernel attempts to access user pointer ↓ SMAP checks permission (STAC/CLAC instructions) ↓ Unauthorized access detected ↓ CPU generates #PF (Page Fault) ↓ Caught by kernel exception handler
**Impact sur le PoC :**
- Même si un débordement se produit, l'accès direct à la mémoire du noyau depuis l'espace utilisateur est bloqué
- Empêche l'exploitation des vulnérabilités de déréférencement de pointeur