Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
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
Ferramentas/GitHubGitHub/devianntsec/cve-2024-30051
Privilege EscalationMemory ForensicsVulnerability AnalysisExploitationReverse EngineeringPapers & ResearchLearning & EducationPayload DevelopmentBinary Exploitation

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →

Sobre

GitHubdevianntsec/cve-2024-30051

CVE-2024-30051

Ver Repositório
1há 3 mesesAinda não revisado

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.

Compartilhar

CVE-2024-30051 — Estouro de Heap no DWM do Windows para EoP · Pesquisa de Tese de Mestrado

Platform Language License: MIT Research CVSS

Estouro de Buffer Baseado em Heap no Gerenciador de Janelas da Área de Trabalho do Windows (dwmcore.dll)
Escalação de Privilégio Local → Nível de Integridade SYSTEM via processo DWM
Alvo de compilação: Windows 11 22H2 (10.0.22621.3447) · Patch: KB5037771


Descrição

Este repositório contém minha pesquisa de Tese de Mestrado sobre CVE-2024-30051, uma vulnerabilidade de Escalação de Privilégio de alta severidade (CVSS 7.8) na Biblioteca Principal do Gerenciador de Janelas da Área de Trabalho do Windows (dwmcore.dll).

A vulnerabilidade se origina de um erro de cálculo de tamanho na divisão inteira em CCommandBuffer::Initialize. O tamanho usado para new() e o tamanho usado para memcpy() divergem devido a esse erro, produzindo um estouro de heap de 0x8F bytes. Uma exploração bem-sucedida faz com que dwm.exe carregue uma DLL controlada pelo atacante, executando código arbitrário sob a conta window manager\dwm-1 com Nível de Integridade SYSTEM.

Minha Contribuição


Estrutura do Repositório

root@kitploit:~
CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat                        # Copia s11.dll para o local necessário
│
├── exploit/
│   ├── C21.sln                      # Solução Visual Studio 2022
│   ├── exploit_src/
│   │   ├── c26f.vcxproj
│   │   ├── c26f.filters
│   │   └── main.cpp                 # Exploit — heap spray + hook + estouro
│   └── payload/
│       ├── payload.vcxproj
│       ├── payload.vcxproj.filters
│       ├── dllmain.cpp              # DLL de payload — spawna shell SYSTEM + limpeza
│       ├── framework.h
│       ├── pch.h
│       └── pch.cpp
│
└── docs/
    ├── screenshots/                 # Capturas de diferenciação de patch, WinDbg e forense
    └── analysis/
        ├── 01-root-cause.md         # Bug de divisão inteira em CCommandBuffer::Initialize
        ├── 02-heap-spray.md         # Dados empíricos de 50 sessões e resultados estatísticos
        └── 03-timeline.md           # Cronologia de descoberta, divulgação e patch

Início Rápido

Pré-requisitos

  • Windows 11 22H2 (build 22621.3447, sem patch — sem KB5037771)
  • Visual Studio 2022 com carga de trabalho C++ Desktop
  • VM com snapshot recomendado (necessário para estado de heap reproduzível)

Passo 1 — Compilar a DLL de payload

Abra C21.sln no Visual Studio 2022. Compile o projeto payload em Release x64.

Passo 2 — Colocar a DLL

Execute setup.bat a partir da raiz do repositório. Ele copia s11.dll para C:\Users\Public\Documents\s11.dll (o caminho definido por PAYLOAD_DLL_PATH).

⚠️ A DLL deve estar neste caminho exato antes de executar C26f.exe. Colocá-la junto ao executável não funcionará.

Passo 3 — Compilar o exploit

Compile o projeto C26f em Release x64.

Passo 4 — Executar

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

Execute a partir de um CMD padrão (não elevado). O exploit tenta automaticamente novamente até 10 vezes. Em caso de sucesso, dwm.exe carrega s11.dll e spawna um CMD com Nível de Integridade SYSTEM. Um log de sessão é escrito em %TEMP%\cve_30051_log.txt.


Configuração do Exploit

root@kitploit:~
#define MAX_ATTEMPTS        10      // Máx. de tentativas automáticas por sessão
#define SPRAY_STEP          0x10    // Índice de espaçamento de buracos (1024 buracos)
#define SPRAY_RANGE_START   0x3000  // Índice inicial do intervalo de spray
#define SPRAY_RANGE_END     0x7000  // Índice final do intervalo de spray
#define SLEEP_POST_SPRAY    0xC8    // ms de espera após spray (200ms)
#define SLEEP_POST_HOLES    0xC8    // ms de espera após liberar buracos (200ms)
#define PAYLOAD_DLL_PATH    "C:\\Users\\Public\\Documents\\s11.dll"

Visão Técnica

Causa Raiz da Vulnerabilidade

Em CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447), CD2DSharedBuffer::GetBufferSize é chamado duas vezes. O tamanho passado para new() sofre divisão inteira por 0x90 antes da multiplicação, enquanto memcpy() usa o valor bruto:

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

size_new    = (0x23F / 0x90) * 0x90  = 0x1B0   ← alocado
size_memcpy = 0x23F                             ← copiado

estouro    = 0x23F - 0x1B0 = 0x8F bytes

Resultados da Diferenciação de Patch

Comparação BinDiff entre o build 10.0.22621.3447 (vulnerável) e 10.0.22621.3593 (corrigido):

A pontuação anômala de 0,32 contra uma similaridade global de 0,98 é a assinatura direta do lócus da vulnerabilidade.

Cadeia de Exploração

root@kitploit:~
1. Hook RtlCreateHeap               → capturar handle do heap do dwmcore
2. Hook RtlAllocateHeap             → capturar endereço base do chunk
3. Hook NtDCompositionCreateChannel → capturar MappedAddress (região de memória compartilhada)
4. Hook NtDCompositionCommitChannel → sobrescrever campo de tamanho (0x120 → 0x23F)
                                      injetar comandos de lote adicionais
5. Heap spray de 0x10000 objetos CHolographicInteropTexture (tamanho=0x1B0)
6. Liberar buracos a cada 0x10 índices → criar lacunas para o pouso do estouro
7. Escrever payload no buffer de estouro → KCBTable+0x388 + LoadLibraryA + caminho da DLL
8. Liberar todos os objetos do spray → acionar estouro → LoadLibraryA("s11.dll")
9. dwm.exe carrega DLL de payload → spawna CMD como integridade SYSTEM

Análise Empírica de Heap Spray (50 Sessões)

Pergunta de Pesquisa

A RAM disponível influencia o número de tentativas necessárias para um heap spray bem-sucedido?

Desenho Experimental

Dois blocos de 25 sessões cada. Protocolo por sessão: restaurar snapshot limpo pós-inicialização → aguardar 100 segundos de estabilização → lançar exploit → registrar tentativa bem-sucedida.

BlocoRAMSessõesSucessosFalhas
A8.192 MB2524

Resultados

Testes Estatísticos

TesteEstatísticaValor-pConclusão
Mann-Whitney UU = 184,0p = 0,031Rejeita H₀
Teste t de Welcht(23) = −2,695p = 0,011Rejeita H₀

Principais Conclusões

  • C1: O heap do DWM pós-inicialização é 12,9–19× mais determinístico do que a previsão teórica.
  • C2: A disponibilidade de RAM tem efeito estatisticamente significativo na confiabilidade do spray (p = 0,031).
  • C3: Reduzir a RAM pela metade dobra o desvio padrão (1,135 → 2,645).
  • C4: A taxa de falha é homogênea em 4% em ambas as configurações.
  • C5: A constante base = heap_base + 0x720 confirma que o layout de heap pós-inicialização reproduzível é o principal impulsionador do determinismo — não a densidade de buracos.
  • C6: Com ≥ 8 GB de RAM, um adversário pode esperar sucesso dentro das primeiras 5 tentativas.

Dados brutos completos, formato do log de sessão e observações de heap determinístico documentados em docs/analysis/02-heap-spray.md.


Saída Pós-Exploração

Em caso de sucesso, uma janela CMD abre sob 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
=====================================================

Os artefatos (s11.dll e o script .bat) são automaticamente deletados após 5 segundos através de um processo de limpeza adiada.


Artefatos Forenses


Documentação Técnica

DocumentoDescrição
Análise de Causa Raiz

Contexto Acadêmico

Esta pesquisa faz parte da minha Tese de Mestrado em Cibersegurança (UCAM — Campus Internacional de Ciberseguridad), analisando vulnerabilidades N-Day em múltiplos ambientes.

Este CVE representa o vetor de aplicação de desktop Windows dentro da tese, demonstrando:

  • Exploração de estouro de buffer baseado em heap via canal ALPC DirectComposition
  • Diferenciação binária (BinDiff) como um método sistemático para localização de vulnerabilidades N-Day
  • Hooking de API em processo sem ferramentas externas
  • Quantificação empírica do determinismo de heap spray em diferentes configurações de RAM

Palavras-chave: EoP · Heap Overflow · DirectComposition · DWM · Patch Diffing · BinDiff · WinDbg · Heap Spray · Análise Empírica · CVE-2024-30051


Autor

Annais Molina (devianntsec) — Estudante de Mestrado em Cibersegurança

GitHub LinkedIn Email


Agradecimentos

  • Ricardo Narvaja (Fortra/CoreSecurity) — PoC original e writeup de engenharia reversa
  • Kaspersky GReAT — Descoberta original da vulnerabilidade e divulgação responsável
  • Microsoft MSRC — Patch KB5037771 (Maio de 2024)

Licença

Licença MIT — veja LICENSE


Aviso Legal

Este repositório é fornecido apenas para fins educacionais e de pesquisa em segurança, como parte de uma Tese de Mestrado acadêmica. Todos os testes foram realizados em máquinas virtuais isoladas, sem exposição à rede. Utilize apenas em sistemas que você possua ou tenha autorização explícita por escrito para testar. O uso não autorizado contra sistemas é ilegal e pode resultar em processo criminal.

© 2026 Annais Molina · Tese de Mestrado em Cibersegurança
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Baixar ferramenta
AspectoDescrição
Diferenciação de patchAnálise completa de BinDiff identificando CCommandBuffer::Initialize como o lócus exato da vulnerabilidade (pontuação de similaridade 0,32 vs. global 0,98 em 14.062 funções correspondentes)
Análise dinâmica com WinDbgVerificação passo a passo de todos os 4 hooks, substituição do campo de tamanho e construção do payload
Análise empírica de heap spray50 sessões controladas em duas configurações de RAM (8.192 MB e 4.096 MB) com testes estatísticos formais
Resultados estatísticosMann-Whitney U (p = 0,031) e teste t de Welch (p = 0,011) confirmam efeito da RAM; médias observadas 12,9–19× melhores que a previsão teórica de ~64 tentativas
Caminho da DLL de payload centralizadoCaminho codificado extraído para a constante de pré-processador #define PAYLOAD_DLL_PATH
Registro de sessãoLog completo com timestamp por sessão escrito em %TEMP%\cve_30051_log.txt
Documentação acadêmicaCausa raiz, análise de heap spray de 50 sessões e cronologia do CVE
MétricaValor
Similaridade global0,98
Confiança0,99
Funções correspondentes14.062 (99,1%)
Similaridade de CCommandBuffer::Initialize0,32
Blocos básicos — versão vulnerável4
Blocos básicos — versão corrigida20 (16 blocos de validação adicionados)
1
B4.096 MB25241
BlocoRAMMédia de tentativasDesvio padrãoIC 95%Fator vs. teoria (64)
A8.192 MB3,3751,135[2,896; 3,854]≈ 19× mais rápido
B4.096 MB4,9582,645[3,841; 6,076]≈ 12,9× mais rápido
ArtefatoLocalizaçãoPersistênciaFerramenta de detecção
cmd.exe filho de dwm.exeLog de Eventos de SegurançaSim (se auditoria de processos ativa)Event ID 4688
Processo externo acessando dwm.exeSysmonSimSysmon Event ID 10
Queda de dwm.exe em tentativas falhasLog de Eventos de AplicaçãoSimEvent ID 1000
DLL de payload s11.dll no discoC:\Users\Public\Documents\Apenas primeiros ~5 segundosMonitoramento SHA-256
Bug de divisão inteira em CCommandBuffer::Initialize, metodologia de diferenciação de patch
Análise de Heap SprayDados empíricos de 50 sessões, dados brutos de sessão, testes estatísticos
Cronologia CVEDescoberta, divulgação e cronologia do patch