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
Ferramentas/GitHubGitHub/ronf98/cve-2023-21716-poc
Análise de VulnerabilidadesExploraçãoPapers e PesquisaAprendizado e EducaçãoExploração de Binários
GitHubronf98/cve-2023-21716-poc

CVE-2023-21716-POC

Prova de Conceito para CVE-2023-21716 Corrupção de Heap no Microsoft Word

Ver Repositório
42há 1 anoAinda não revisado

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 →
Compartilhar

Histórico

Em fevereiro de 2023, a Microsoft corrigiu uma vulnerabilidade crítica no Microsoft Word, identificada como CVE-2023-21716 com pontuação CVSS de 9,8, que poderia permitir que invasores executassem código remoto sem autenticação. Esta vulnerabilidade também afetou o Outlook Preview Pane, o que significa que pode ser acionada apenas visualizando o arquivo. Embora a Microsoft tenha lançado um patch e uma solução alternativa, eles não divulgaram detalhes sobre o problema. Em 6 de março, o pesquisador que descobriu o bug (Joshua J.Drake - @jduck) compartilhou uma prova de conceito (PoC) no Twitter.

Como Acontece

CVE-2023-21716 decorre de como o Microsoft Word lida com arquivos Rich Text Format (RTF), particularmente a palavra de controle \fonttbl, que define fontes no documento usando o formato \f. O \fonttbl dentro da wwlib.dll recebe uma certa quantidade de espaço alocado dentro do Heap (Isso porque as alocações de heap são tipicamente usadas para dados dinâmicos, como a análise de estruturas grandes como uma tabela de fontes, onde o tamanho pode variar dependendo da entrada). A falha ocorre devido a um estouro de buffer quando o número de fontes excede o limite (comprovado pelo PoC como sendo 32760). Exceder o espaço alocado no heap leva à sobrescrita do Ponteiro de Retorno de Instrução (RIP), o que causa a falha do aplicativo.

Versões Afetadas

  • Microsoft Office 2019
  • Microsoft Office Online Server
  • Microsoft Office LTSC 2021
  • Microsoft Office LTSC for Mac 2021
  • Microsoft Word 2013 Service Pack 1
  • Microsoft Word 2013 RT Service Pack 1
  • Microsoft Word 2016
  • Microsoft SharePoint Server 2019
  • Microsoft SharePoint Enterprise Server 2013 Service Pack 1
  • Microsoft SharePoint Enterprise Server 2016
  • Microsoft SharePoint Foundation 2013 Service Pack 1
  • Microsoft SharePoint Server Subscription Edition Language Pack
  • Microsoft SharePoint Server Subscription Edition
  • Microsoft Office Web Apps Server 2013 Service Pack 1
  • Microsoft 365 Apps for Enterprise

Remediação

Os usuários são fortemente encorajados a instalar as atualizações de segurança mais recentes da Microsoft, pois elas resolveram este problema. Para aqueles que não podem atualizar, a Microsoft também forneceu várias soluções alternativas, que podem ser encontradas aqui: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-21716.

CVE-2023-21716-POC

Passos para Reproduzir

  1. Instale uma versão vulnerável do Microsoft Office.
  2. Baixe e execute o script RTF-creator.
  3. Se não quiser recriar o arquivo, pode usar este arquivo malicious.rtf, que contém 32761 fontes e acionará o estouro de buffer para travar o serviço.
  4. Envie o arquivo .rtf por e-mail para a vítima; se ela tiver uma versão vulnerável do Office, a vulnerabilidade será acionada.

Lógica de Fundo

Usando o WinDbg, podemos analisar mais de perto para entender a causa da falha. Aqui está o processo:

  1. Inicie o Microsoft Word.
  2. Abra o WinDbg e anexe-o ao processo WINWORD.
  3. Abra o arquivo malicious.rtf usando o Word.

O WinDbg será interrompido automaticamente quando a falha ocorrer, permitindo-nos analisá-la mais a fundo. Para começar, podemos digitar 'k' para visualizar a pilha de chamadas:

root@kitploit:~
0:000> k
 # ChildEBP RetAddr      
00 012f5134 77a5feb5     ntdll!RtlReportCriticalFailure+0x4b       
01 012f5170 77a5dda9     ntdll!RtlpReportHeapFailure+0x2f
02 012f5170 77a66220     ntdll!RtlpHpHeapHandleError+0x89
03 012f5188 77a5dab7     ntdll!RtlpLogHeapFailure+0x43
04 012f51ec 779b400d     ntdll!RtlpAnalyzeHeapFailure+0x281
05 012f5348 779f806d     ntdll!RtlpFreeHeap+0x24d
06 012f53a4 779b3d66     ntdll!RtlpFreeHeapInternal+0x783
07 012f53c4 6ea4aa24     ntdll!RtlFreeHeap+0x46                       //As funções mostradas em ntdll estão relacionadas ao tratamento de erros da corrupção do heap
08 012f53d8 6ea4a9cb     mso20win32client!Ordinal1068+0xab
09 012f53e8 6ea4a995     mso20win32client!Ordinal1068+0x52
0a 012f53f4 6cccda52     mso20win32client!Ordinal1068+0x1c
0b 012f5410 03657fea     mso!Ordinal1387+0x24
0c 012f5424 03990115     wwlib!PTLS7::FsUpdateFinitePage+0x7e26f      //wwlib é responsável pelo tratamento da tabela de fontes
0d 012f5670 034ea593     wwlib!PTLS7::LsDestroyContext+0x245f90
0e 012f6f5c 033a68ef     wwlib!PTLS7::FsUpdateBottomlessPage+0x17494
0f 012f7484 035054ed     wwlib!PTLS7::LsAssert+0x2bd1c
10 012f888c 03503d3b     wwlib!PTLS7::FsUpdateBottomlessPage+0x323ee
11 012f8910 0400be52     wwlib!PTLS7::FsUpdateBottomlessPage+0x30c3c
12 012f9e9c 0390013a     wwlib!wdGetApplicationObject+0xdf8a0
13 012faf48 03ebf20e     wwlib!PTLS7::LsDestroyContext+0x1b5fb5
14 012faf90 0410ab2a     wwlib!DllCanUnloadNow+0xcc314
15 012fcfe0 03752fb4     wwlib!wdGetApplicationObject+0x1de578
16 012ff538 03385b93     wwlib!PTLS7::LsDestroyContext+0x8e2f
17 012ff578 75e6173b     wwlib!PTLS7::LsAssert+0xafc0
18 012ff5a4 75e57eaa     USER32!_InternalCallWinProc+0x2b
19 012ff68c 75e57666     USER32!UserCallWinProcCheckWow+0x33a
1a 012ff6c4 75e55e8b     USER32!CallWindowProcAorW+0x7f
1b 012ff6dc 7500ae9d     USER32!CallWindowProcW+0x1b
.....
.....

Nossas duas principais bibliotecas são wwlib.dll, uma biblioteca principal do Word que gerencia o conteúdo do documento, como fontes, texto e layout, e ntdll.dll, que lida com tarefas de baixo nível do sistema, como gerenciamento de memória e tratamento de erros. A falha ocorre quando o Word processa um grande número de fontes do arquivo RTF. À medida que ntdll.dll detecta que o Word está tentando acessar ou liberar memória inválida (provavelmente corrompida devido ao excesso de fontes), gera um erro de corrupção de heap, levando à falha.

Para aprofundar, podemos definir um breakpoint na última parte da biblioteca wwlib para ver como nossas fontes estão sendo carregadas na memória e entender o que desencadeou o problema:

bc * //excluir todos os outros breakpoints

bp wwlib!PTLS7::FsUpdateFinitePage+0x7e26f //criar o breakpoint

Agora obtemos uma violação de acesso:

root@kitploit:~
(ba4.1a14): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=004f1ce4 ebx=00000001 ecx=000004e4 edx=ffff7ffc esi=13474fe8 edi=00008002
eip=02b300d5 esp=004f1c3c ebp=004f1c48 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210206
wwlib!PTLS7::FsUpdateFinitePage+0x7635a:
02b300d5 66894c5604      mov     word ptr [esi+edx*2+4],cx ds:002b:13464fe4=????  //A quebra está acontecendo aqui

Como paramos o programa antes, no ponto em que wwlib.dll está tentando acessar ou modificar memória inválida (em FsUpdateFinitePage), isso nos permite ver a violação de acesso inicial (que causa a corrupção de memória), dando a chance de inspecionar o que deu errado antes que o erro de corrupção de heap seja detectado por ntdll.dll.

Para ser mais preciso, o programa parou devido a uma violação de acesso (código c0000005) na instrução mov word ptr [esi+edx2+4],cx dentro da função wwlib!PTLS7::FsUpdateFinitePage+0x7635a. Este erro indica que o Word tentou acessar um local de memória inválido, especificamente ao tentar armazenar um valor (cx) na memória no local esi+edx2+4.

Se olharmos mais para o registrador ESI, podemos ver que ele contém os dados da fonte: image image Cada valor de 16 bits (dois bytes) no formato little-endian representa uma entrada de fonte no formato \fA;

O último valor representado dentro de ESI é f8 7f, que corresponde a {\f32760A;} antes de chegarmos ao final (simbolizado por 29-00) image

Agora que a tabela de fontes está carregada no local de memória apontado pelo registrador ESI, com um número tão grande de fontes sendo processado, o local de memória calculado (esi + edx*2 + 4) provavelmente excede a memória alocada para a tabela de fontes. Isso resulta em uma escrita fora dos limites, causando um erro de violação de acesso. A violação de acesso é detectada por ntdll.dll, que lida com o gerenciamento de memória e relatórios de erro. Como resultado, ntdll.dll invoca funções que detectam corrupção de heap, causando, em última instância, a falha do aplicativo.

Baixar ferramenta