
Data do Projeto: Out 2025 / Implementação de PoC para CVE-2025-54110, uma Vulnerabilidade de Estouro de Inteiro em Nível de Kernel na chamada de sistema `NtQueryDirectoryObject` do Windows.
Implementação de PoC para CVE-2025-54110, uma vulnerabilidade de estouro de inteiro no nível do kernel na chamada de sistema NtQueryDirectoryObject do Windows.
CVE: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-54110
Este repositório contém um PoC apenas para Crash da vulnerabilidade CVE-2025-54110 de EoP no Kernel, desenvolvido exclusivamente para pesquisa em segurança, engenharia reversa e pesquisa de desenvolvimento de exploits. Este código tem a intenção de demonstrar técnicas de pesquisa de vulnerabilidades, incluindo:
Este PoC NÃO alcança elevação de privilégio nem BSOD confiável. Ele é projetado para disparar com segurança violações de acesso que são capturadas pelas proteções do kernel do Windows.
Data de Publicação: Setembro de 2025 (Patch de Segurança de Terça-feira da Microsoft)
| Propriedade | Valor |
|---|---|
| CWE | CWE-190: Estouro de Inteiro ou Wrap-around |
| Pontuação CVSS 3.1 | 8.8 (Alta) / 7.7 (Temporal) |
| String do Vetor | 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 |
| Vetor de Ataque | Local |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Baixos |
| Interação do Usuário | Nenhuma |
| Escopo | Alterado |
| Confidencialidade | Alta |
| Integridade | Alta |
| Disponibilidade | Alta |
| Maturidade do Exploit | Não Comprovada |
Uma vulnerabilidade de estouro de inteiro no Kernel do Windows permite que um atacante autenticado potencialmente eleve privilégios localmente. De acordo com o aviso da Microsoft:
"Um atacante poderia explorar esta vulnerabilidade enviando entrada especialmente criada a partir de um processo em modo de usuário em área restrita (sandbox) para disparar um estouro de inteiro, resultando em um estouro de buffer no kernel e permitindo a elevação de privilégio ou fuga da 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. Arquivos Analisados
A análise inicial concentrou-se em dois principais componentes do kernel:
#### win32k.sys (-)
- **Resultado:** Nenhuma alteração significativa detectada
- **Faixa de Pontuação:** 0.97-1.0 (alta similaridade)
- **Conclusão:** Não é o componente vulnerável para o CVE-2025-54110
#### ntoskrnl.exe (+)
- **Resultado:** Múltiplas funções com alterações significativas
- **Faixa de Pontuação:** Funções com pontuações ≤0.951
- **Diferenças de Tamanho:** Variações de comprimento de bytes entre Origem e Destino detectadas
- **Total de Itens Exportados:** 2.036 funções para análise
### 3. Resultados do Rastreamento de Versão do Ghidra
Amostra das alterações identificadas em `ntoskrnl.exe`:
| Pontuação | Confiança | Tamanho Origem | Tamanho Destino | Função Origem | Função Destino |
|-------|------------|---------------|-------------|-----------------|---------------|
| 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 |
---
## Declaração do PoC
### Abordagem Técnica
O PoC (`precise_overflow_bsod.c`) tenta desencadear a vulnerabilidade de estouro de inteiro através de:
1. **Cálculo Preciso do Limiar:** `0xfffffdbc` (derivado de base=0x20, nome=0x200)
2. **API NtQueryDirectoryObject:** Função alvo para desencadear o estouro
3. **Estratégia de Ataque em Múltiplas Fases:**
- Fase 1: Tentativas de estouro de inteiro de precisão
- Fase 2: Mira na memória do kernel
- Fase 3: Exploração multi-thread
### Estrutura do Código```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
## Por que o PoC Não Trava o Sistema
### Resultados Reais
O PoC retorna consistentemente `STATUS_ACCESS_VIOLATION (0xC0000005)` sem causar uma Tela Azul da Morte (BSOD). Isso é **por design** e demonstra vários mecanismos críticos de segurança do kernel do Windows:
### 1. Tratamento Estruturado de Exceções (SEH)```
User-Mode Input → NtQueryDirectoryObject
↓
ProbeForRead/Write
↓
__try { ... }
↓
Access Violation Detected
↓
__except { ... }
↓
Return STATUS_ACCESS_VIOLATION
Por que funciona:
Recurso moderno da CPU que impede que o modo kernel (Ring 0) acesse a memória do modo de usuário (Ring 3) sem autorização explícita:``` 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
**Impacto no PoC:**
- Mesmo que ocorra estouro, o acesso direto à memória do kernel para o usuário é bloqueado
- Impede a exploração de vulnerabilidades de desreferência de ponteiro