Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/ronf98/cve-2023-21716-poc
Análisis de VulnerabilidadesExplotaciónPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubronf98/cve-2023-21716-poc

CVE-2023-21716-POC

Prueba de concepto para CVE-2023-21716 - Corrupción de montón en Microsoft Word

Ver Repositorio
422hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Historia

En febrero de 2023, Microsoft parcheó una vulnerabilidad crítica en Microsoft Word, identificada como CVE-2023-21716 con una puntuación CVSS de 9.8, que podría permitir a atacantes ejecutar código remoto sin autenticación. Esta vulnerabilidad también afectaba al Panel de Vista Previa de Outlook, lo que significa que puede activarse con solo previsualizar el archivo. Si bien Microsoft publicó un parche y una solución alternativa, no reveló detalles sobre el problema. El 6 de marzo, el investigador que descubrió el error (Joshua J. Drake - @jduck) compartió una prueba de concepto (PoC) en Twitter.

Cómo Ocurre

CVE-2023-21716 se origina en la forma en que Microsoft Word maneja archivos Rich Text Format (RTF), particularmente la palabra de control \fonttbl, que define fuentes en el documento usando el formato \f. El \fonttbl dentro de wwlib.dll tiene asignada una cierta cantidad de espacio en el Heap (esto se debe a que las asignaciones de heap se usan típicamente para datos dinámicos, como analizar estructuras grandes como una tabla de fuentes, donde el tamaño puede variar según la entrada). El bloqueo ocurre debido a un desbordamiento de búfer cuando el número de fuentes excede el límite (probado por el PoC en 32760). Superar el espacio asignado en el heap lleva a sobrescribir el Puntero de Instrucción de Retorno (RIP), lo que provoca el bloqueo de la aplicación.

Versiones Afectadas

  • 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
  • Corrección

    Se recomienda encarecidamente a los usuarios que instalen los últimos parches de seguridad de Microsoft, ya que han resuelto este problema. Para aquellos que no puedan actualizar, Microsoft también ha proporcionado varias soluciones alternativas, que se pueden encontrar aquí: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-21716.

    CVE-2023-21716-POC

    Pasos para Reproducir

    1. Instale una versión vulnerable de Microsoft Office.
    2. Descargue y ejecute el script RTF-creator.
    3. Si no desea recrear el archivo, puede usar este archivo malicious.rtf que contiene 32761 fuentes y provocará el desbordamiento del búfer para bloquear el servicio.
    4. Envíe el archivo .rtf por correo electrónico a la víctima; si tiene una versión vulnerable de Office, se activará la vulnerabilidad.

    Lógica de Fondo

    Usando WinDbg, podemos examinar más de cerca para entender la causa del bloqueo. Aquí está el proceso:

    1. Inicie Microsoft Word.
    2. Abra WinDbg y adjúntelo al proceso WINWORD.
    3. Abra el archivo malicious.rtf con Word.

    WinDbg se detendrá automáticamente cuando ocurra el bloqueo, permitiéndonos analizarlo más a fondo. Para empezar, podemos escribir 'k' para ver la pila de llamadas:

    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 75e57está     USER32!UserCallWinProcCheckWow+0x33a
    1a 012ff6c4 75e57666     USER32!CallWindowProcAorW+0x7f
    1b 012ff6dc 7500ae9d     USER32!CallWindowProcW+0x1b
    .....
    .....
    

    Nuestras dos bibliotecas clave son wwlib.dll, una biblioteca principal de Word que gestiona el contenido del documento como fuentes, texto y diseño, y ntdll.dll, que maneja tareas de bajo nivel como la gestión de memoria y el manejo de errores. El bloqueo ocurre cuando Word procesa una gran cantidad de fuentes del archivo RTF. Cuando ntdll.dll detecta que Word está intentando acceder o liberar memoria no válida (probablemente corrupta debido al desbordamiento de fuentes), genera un error de corrupción del heap, lo que provoca el bloqueo.

    Para profundizar, podemos colocar un punto de interrupción en la última parte de la biblioteca wwlib para ver cómo se cargan nuestras fuentes en la memoria y entender qué desencadenó el problema:

    bc * //delete all other breakpoints

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

    Ahora obtenemos una violación de acceso:

    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
    

    Dado que detuvimos el programa antes, en el punto donde wwlib.dll está intentando acceder o modificar memoria no válida (en FsUpdateFinitePage), nos permite ver la violación de acceso inicial (que causa la corrupción de memoria), dándonos la oportunidad de inspeccionar qué salió mal antes de que ntdll.dll detecte el error de corrupción del heap.

    Para ser más precisos, el programa se detuvo debido a una violación de acceso (código c0000005) en la instrucción mov word ptr [esi+edx2+4],cx dentro de la función wwlib!PTLS7::FsUpdateFinitePage+0x7635a. Este error indica que Word intentó acceder a una ubicación de memoria no válida, específicamente al intentar almacenar un valor (cx) en la memoria en la ubicación esi+edx2+4.

    Si observamos más a fondo el registro ESI, podemos ver que contiene los datos de la fuente: image image Cada valor de 16 bits (dos bytes) en formato little-endian representa una entrada de fuente en el formato \fA;

    El último valor representado dentro del ESI es f8 7f que corresponde a {\f32760A;} antes de llegar al final (simbolizado por 29-00) image

    Ahora que la tabla de fuentes está cargada en la ubicación de memoria señalada por el registro ESI, con un número tan grande de fuentes procesándose, la ubicación de memoria calculada (esi + edx*2 + 4) probablemente excede la memoria asignada para la tabla de fuentes. Esto resulta en una escritura fuera de los límites, causando un error de violación de acceso. La violación de acceso es detectada por ntdll.dll, que maneja la gestión de memoria y el reporte de errores. Como resultado, ntdll.dll invoca funciones que detectan la corrupción del heap, causando finalmente el bloqueo de la aplicación.

    Descargar herramienta