Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-21716-POC — Prova di concetto per CVE-2023-21716 Corruzione dell'heap di Microsoft Word | Kitploit
Strumenti/GitHubGitHub/ronf98/cve-2023-21716-poc
Analisi delle VulnerabilitàExploitPaper e RicercaApprendimento e FormazioneBinary Exploitation
GitHubronf98/cve-2023-21716-poc

CVE-2023-21716-POC

Prova di concetto per CVE-2023-21716 Corruzione dell'heap di Microsoft Word

Vedi Repository
4221 anno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Storia

Nel febbraio 2023, Microsoft ha corretto una vulnerabilità critica in Microsoft Word, identificata come CVE-2023-21716 con un punteggio CVSS di 9.8, che poteva consentire agli aggressori di eseguire codice remoto senza autenticazione. Questa vulnerabilità interessava anche il riquadro di anteprima di Outlook, il che significa che poteva essere attivata semplicemente visualizzando l'anteprima del file. Sebbene Microsoft abbia rilasciato una patch e una soluzione alternativa, non ha divulgato dettagli sul problema. Il 6 marzo, il ricercatore che ha scoperto il bug (Joshua J. Drake - @jduck) ha condiviso una prova di concetto (PoC) su Twitter.

Come Avviene

CVE-2023-21716 deriva da come Microsoft Word gestisce i file Rich Text Format (RTF), in particolare la parola di controllo \fonttbl, che definisce i font nel documento utilizzando il formato \f. \fonttbl all'interno di wwlib.dll riceve una certa quantità di spazio allocato nell'heap (ciò perché le allocazioni nell'heap sono tipicamente utilizzate per dati dinamici, come l'analisi di grandi strutture come una tabella dei font, dove la dimensione può variare in base all'input). Il crash si verifica a causa di un buffer overflow quando il numero di font supera il limite (dimostrato dal PoC essere 32760). Il superamento dello spazio heap allocato porta alla sovrascrittura del Return Instruction Pointer (RIP), causando il crash dell'applicazione.

Versioni Interessate

  • 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
  • Mitigazione

    Si consiglia vivamente agli utenti di installare le ultime patch di sicurezza di Microsoft, poiché hanno risolto questo problema. Per coloro che non possono effettuare l'aggiornamento, Microsoft ha anche fornito diverse soluzioni alternative, che possono essere trovate qui: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-21716.

    CVE-2023-21716-POC

    Passi per Riprodurre

    1. Installa una versione vulnerabile di Microsoft Office.
    2. Scarica ed esegui lo script RTF-creator.
    3. Se non vuoi ricreare il file, puoi usare questo file malicious.rtf che contiene 32761 font e attiverà il buffer overflow per far crashare il servizio.
    4. Invia il file .rtf via email alla vittima; se ha una versione vulnerabile di Office, la vulnerabilità verrà attivata.

    Logica di Sfondo

    Usando WinDbg, possiamo dare un'occhiata più da vicino per comprendere la causa del crash. Ecco il processo:

    1. Avvia Microsoft Word.
    2. Apri WinDbg e collegalo al processo WINWORD.
    3. Apri il file malicious.rtf con Word.

    WinDbg si fermerà automaticamente quando si verifica il crash, permettendoci di analizzarlo ulteriormente. Per iniziare, possiamo digitare 'k' per visualizzare lo stack delle chiamate:

    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                       //The functions shown under ntdll relate to error handeling of the heap corruption
    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 is in charge of handeling the font table
    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 75e57eaa     USER32!UserCallWinProcCheckWow+0x33a
    1a 012ff6c4 75e57666     USER32!CallWindowProcAorW+0x7f
    1b 012ff6dc 7500ae9d     USER32!CallWindowProcW+0x1b
    .....
    .....
    

    Le nostre due librerie chiave sono wwlib.dll, una libreria core di Word che gestisce il contenuto del documento come font, testo e layout, e ntdll.dll, che gestisce compiti di sistema di basso livello come la gestione della memoria e la gestione degli errori. Il crash si verifica quando Word processa un gran numero di font dal file RTF. Quando ntdll.dll rileva che Word sta cercando di accedere o liberare memoria non valida (probabilmente corrotta a causa del overflow dei font), solleva un errore di corruzione dell'heap, portando al crash.

    Per approfondire, possiamo impostare un breakpoint nell'ultima parte della libreria wwlib per vedere come i nostri font vengono caricati nella memoria e capire cosa ha scatenato il problema:

    bc * //delete all other breakpoints

    bp wwlib!PTLS7::FsUpdateFinitePage+0x7e26f //create the breakpoint

    Ora otteniamo una violation di accesso:

    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=????  //The break is happening here
    

    Poiché abbiamo fermato il programma prima, nel punto in cui wwlib.dll sta tentando per la prima volta di accedere o modificare memoria non valida (in FsUpdateFinitePage), ci permette di vedere la violation di accesso iniziale (che causa la corruzione della memoria), dandoci la possibilità di ispezionare cosa è andato storto prima che l'errore di corruzione dell'heap venga rilevato da ntdll.dll.

    Per essere più precisi, il programma si è fermato a causa di una violation di accesso (codice c0000005) all'istruzione mov word ptr [esi+edx2+4],cx all'interno della funzione wwlib!PTLS7::FsUpdateFinitePage+0x7635a. Questo errore indica che Word ha tentato di accedere a una posizione di memoria non valida, specificamente quando cercava di memorizzare un valore (cx) nella memoria alla posizione esi+edx2+4.

    Se osserviamo più a fondo il registro ESI, possiamo vedere che contiene i dati dei font: image image Ogni valore a 16 bit (due byte) in formato little-endian rappresenta una voce di font nel formato \fA;

    L'ultimo valore rappresentato all'interno dell'ESI è f8 7f che corrisponde a {\f32760A;} prima di raggiungere la fine (simbolizzata da 29-00) image

    Ora che la tabella dei font è caricata nella posizione di memoria puntata dal registro ESI, con un numero così elevato di font in elaborazione, la posizione di memoria calcolata (esi + edx*2 + 4) supera probabilmente la memoria allocata per la tabella dei font. Ciò risulta in una scrittura fuori dai limiti, causando un errore di violation di accesso. La violation di accesso viene rilevata da ntdll.dll, che gestisce la memoria e la segnalazione degli errori. Di conseguenza, ntdll.dll invoca funzioni che rilevano la corruzione dell'heap, portando infine al crash dell'applicazione.

    Scarica lo strumento