
Data del progetto : Ottobre 2025 / Implementazione PoC per CVE-2025-54110 una vulnerabilità di overflow di interi a livello kernel nella chiamata di sistema Windows `NtQueryDirectoryObject`.
Implementazione del PoC per CVE-2025-54110, una vulnerabilità di overflow di interi a livello kernel nella chiamata di sistema Windows NtQueryDirectoryObject.
CVE: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54110
Questo repository contiene un PoC solo crash per la vulnerabilità di EoP del kernel CVE-2025-54110, sviluppato esclusivamente per ricerca sulla sicurezza, reverse engineering e ricerca sullo sviluppo di exploit. Questo codice è inteso per dimostrare tecniche di ricerca sulle vulnerabilità tra cui:
Questo PoC NON raggiunge l'escalation dei privilegi o un BSOD affidabile. È progettato per attivare in modo sicuro violazioni di accesso che vengono intercettate dalle protezioni del kernel di Windows.
Data di pubblicazione: Settembre 2025 (Patch di sicurezza del Tuesday di Windows)
| Proprietà | Valore |
|---|---|
| CWE | CWE-190: Integer Overflow o Wraparound |
| Punteggio CVSS 3.1 | 8.8 (Alto) / 7.7 (Temporale) |
| Stringa del vettore | 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 |
| Vettore di attacco | Locale |
| Complessità dell'attacco | Bassa |
| Privilegi richiesti | Bassi |
| Interazione dell'utente | Nessuna |
| Ambito | Modificato |
| Riservatezza | Alta |
| Integrità | Alta |
| Disponibilità | Alta |
| Maturità dell'exploit | Non provata |
Una vulnerabilità di overflow di interi nel kernel Windows consente a un utente malintenzionato autenticato di potenzialmente elevare i privilegi localmente. Secondo l'avviso di Microsoft:
"Un utente malintenzionato potrebbe sfruttare questa vulnerabilità inviando input appositamente progettati da un processo in modalità utente in sandbox per attivare un overflow di interi, con conseguente overflow del buffer nel kernel e consentendo l'escalation dei privilegi o la fuga dalla sandbox."
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. File Analizzati
L'analisi iniziale si è concentrata su due componenti principali del kernel:
#### win32k.sys (-)
- **Risultato:** Nessuna modifica significativa rilevata
- **Intervallo di Punteggio:** 0.97-1.0 (alta similarità)
- **Conclusione:** Non è il componente vulnerabile per CVE-2025-54110
#### ntoskrnl.exe (+)
- **Risultato:** Multiple funzioni con modifiche significative
- **Intervallo di Punteggio:** Funzioni con punteggi ≤0.951
- **Differenze di Lunghezza:** Rilevate variazioni di lunghezza in byte tra Source e Destinazione
- **Totale Elementi Esportati:** 2,036 funzioni per l'analisi
### 3. Risultati del Tracciamento delle Versioni con Ghidra
Campione delle modifiche identificate in `ntoskrnl.exe`:
| Punteggio | Confidenza | Lunghezza Source | Lunghezza Dest | Funzione Source | Funzione 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 |
---
## Dichiarazione PoC
### Approccio Tecnico
Il PoC (`precise_overflow_bsod.c`) tenta di innescare la vulnerabilità di integer overflow tramite:
1. **Calcolo Preciso della Soglia:** `0xfffffdbc` (derivato da base=0x20, name=0x200)
2. **API NtQueryDirectoryObject:** Funzione target per innescare l'overflow
3. **Strategia di Attacco a Fasi Multiple:**
- Fase 1: Tentativi di integer overflow di precisione
- Fase 2: Bersaglio sulla memoria del kernel
- Fase 3: Sfruttamento multi-thread
### Struttura del Codice```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
---
## Perché il PoC non causa il crash del sistema
### Risultati effettivi
Il PoC restituisce costantemente `STATUS_ACCESS_VIOLATION (0xC0000005)` senza causare un Blue Screen of Death (BSOD). Questo è **voluto** e dimostra diversi meccanismi critici di sicurezza del kernel di Windows:
### 1. Structured Exception Handling (SEH)```
User-Mode Input → NtQueryDirectoryObject
↓
ProbeForRead/Write
↓
__try { ... }
↓
Access Violation Detected
↓
__except { ... }
↓
Return STATUS_ACCESS_VIOLATION
Perché funziona:
Funzione moderna della CPU che impedisce alla modalità kernel (Ring 0) di accedere alla memoria in modalità utente (Ring 3) senza autorizzazione esplicita:``` 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
**Impatto sul PoC:**
- Anche se si verifica un overflow, l'accesso diretto alla memoria dal kernel all'utente è bloccato
- Impedisce lo sfruttamento delle vulnerabilità di dereferenziazione dei puntatori