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
CVE-2021-40444 — Generador de DOCX malicioso que explota CVE-2021-40444 (RCE de Microsoft Office Word) con carga lateral de DLL basada en CAB y cadenas de ataque RAR/WSF sin CAB para pruebas de penetración. | Kitploit
Herramientas/GitHubGitHub/tiagob0b/cve-2021-40444
Generación de PayloadsExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónGeneración de ShellcodeExplotación de Binarios
GitHubtiagob0b/cve-2021-40444

CVE-2021-40444

Generador de DOCX malicioso que explota CVE-2021-40444 (RCE de Microsoft Office Word) con carga lateral de DLL basada en CAB y cadenas de ataque RAR/WSF sin CAB para pruebas de penetración.

Ver Repositorio
5hace 4 añosAú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

CVE-2021-40444 completamente armado

Generador de docx malicioso para explotar CVE-2021-40444 (ejecución remota de código en Microsoft Office Word), funciona con archivos DLL arbitrarios.

Antecedentes

Aunque hay muchos PoC por ahí en internet, decidí probar suerte armando esta vulnerabilidad, ya que lo que encontré disponible carecía de información valiosa que valga la pena compartir, considerando además que Microsoft ya lanzó un parche para esta vulnerabilidad.

Hasta ahora, los únicos recursos valiosos que he visto para crear un generador totalmente funcional son:

  • Blog de Ret2Pwn
  • Twit de j00sean

Los recursos anteriores describen muchos de los requisitos necesarios para crear una cadena completa. Para evitar repetir demasiada información innecesaria, solo resumiré los detalles relevantes.

Cadena de explotación

  1. Se abre el Docx
  2. La relación almacenada en document.xml.rels apunta a un html malicioso
  3. Se lanza la vista previa de IE para abrir el enlace HTML
  4. El JScript dentro del HTML contiene un objeto que apunta a un archivo CAB, y un iframe que apunta a un archivo INF, con el prefijo de la directiva ".cpl:"
  5. Se abre el archivo CAB y el archivo INF se guarda en el directorio %TEMP%\Low
  6. Debido a una vulnerabilidad de path traversal (ZipSlip) en el CAB, es posible guardar el INF en %TEMP%
  7. A continuación, el archivo INF se abre con la directiva ".cpl:", lo que provoca la carga lateral del archivo INF mediante rundll32 (si se trata de una DLL)

Requisitos pasados por alto

Hay bastantes requisitos pasados por alto para que este exploit funcione, lo que hizo que incluso buenos PoCs, como el de lockedbyte, fallaran al ejecutarse correctamente.

Quizás nadie los "publicó" explícitamente para evitar que la vulnerabilidad se explotara más. Pero ahora está parcheada, así que no debería causar muchos problemas revelar los detalles.

Archivo HTML

Según este tweet de Will Dormann, el HTML debe tener al menos 4096 bytes para activar la "Vista previa" en MS Word.

Archivo CAB

El archivo CAB debe ser parcheado a nivel de bytes para evitar errores de extracción y lograr el ZipSlip:

  • filename.inf debe convertirse en ../filename.inf
  • filename.inf debe tener exactamente <12 caracteres>.inf No es del todo cierto, lo importante es modificar coffCabStart
  • CFFOLDER.typeCompress debe ser 0 (sin compresión)
  • CFFOLDER.coffCabStart debe incrementarse en 3 (debido al '../' añadido)
  • CFFOLDER.cCfData debe ser 2
  • CFFILE.cbFile debe ser mayor que el CFHEADER.cbCabinet completo
  • CFDATA.csum debe recalcularse (o ponerse a cero) [OPCIONAL]

Las razones de estas restricciones son muchas, y no dediqué suficiente tiempo a entenderlas todas en profundidad, pero veamos las más importantes:

  • TypeCompress: Si el CAB está comprimido, el truco de abrirlo dentro de un archivo objeto para provocar la escritura del INF fallará Falso, conseguí el mismo resultado con una muestra comprimida con MSZIP
  • CoffCabStart: CoffCabStart indica la posición absoluta de la primera estructura CFDATA; como añadimos un '../', necesitaríamos incrementarlo en 3 para que apunte al archivo (esto es más una suposición)
  • cCfData: Como solo hay 1 archivo, deberíamos tener solo 1 CFDATA, no estoy muy seguro de por qué debe establecerse en 2 Efectivamente, podemos dejarlo en 1
  • cbFile: Curiosamente, si la extracción del CAB termina sin ningún error, WORD marcará el archivo INF para su eliminación, arruinando el exploit. La única forma de evitarlo es hacer que WORD crea que la extracción falló. Si el valor de cbFile se define como mayor que el propio archivo CAB, el extractor alcanzará un EOF antes de leer todos los bytes definidos en cbFile, generando un error de extracción.
  • [OPCIONAL] Parece que MS Word no comprueba este valor. De todos modos, para tener un CAB correcto, el valor csum debería recalcularse. Afortunadamente, como señaló j00sean y según la documentación de MS, este valor puede ser 0

NOTA1: Defender ahora detecta si el archivo CAB contiene un PE utilizando el valor _IMAGE_DOS_HEADER.e_magic como firma, lo que potencialmente evita que los archivos PE se incrusten en el CAB. ¿Se puede omitir esta firma? No estoy seguro, pero como se observó antes, esta es una vulnerabilidad parcheada, así que no planeo invertir mucho más tiempo en esto. Le corresponde al lector curioso desarrollar esto más a fondo.

NOTA2: El parche de Microsoft bloquea esquemas de URI arbitrarios, aparentemente usando un enfoque de lista negra (esto es solo una suposición)

Ataque DLL

La principal cadena de ataque asociada con CVE-2021-40444 es el ataque DLL cargado a través del esquema de URI .cpl. Para explotarlo, un atacante necesita generar una DLL especialmente elaborada. Si quieres probarlo, prueba mi script evildll-gen.

JScript, VBScript, Javaw, MSIexec, ...

Como señaló Max Maluin, es posible interactuar con varios tipos de archivo abusando de IE y del URI basado en la extensión de archivo asociada. Si bien esto puede ser una buena forma de explotar IE, tiene limitaciones.

De hecho, cabe señalar que el método utilizado en el exploit para descargar archivos se basa en actualizaciones de controles ActiveX y no puede usarse para descargar archivos arbitrarios. Según la documentación de Microsoft, la etiqueta codebase solo puede apuntar a unos pocos tipos de archivo: OCX, INF y CAB.

Incluso si podemos descargar directamente un archivo OCX o INF, todavía no podemos asegurar que el archivo se descargue en la ubicación correcta dentro del sistema. Con el exploit CAB, es posible mover el archivo .inf a una ruta bien conocida mediante el path traversal, pero en cualquier otro caso el archivo se almacenará en un directorio aleatorio, lo que hace prácticamente imposible referenciarlo.

A día de hoy, no he encontrado una forma de encadenar descarga y ejecución SIN un archivo CAB.

Nota: Hablando solo de IE, el contrabando HTML (HTML smuggling) podría ser un escenario posible para explotar la vulnerabilidad.

Ataque de archivo sin CAB mediante archivo RAR híbrido

Esta técnica fue divulgada por primera vez por Eduardo Braun en Twitter y explicada más a fondo en este documento.

Ten en cuenta que con esta técnica la cadena de ataque es un poco diferente. Este ataque requiere que el usuario descargue un archivo RAR especialmente elaborado, obtenido combinando un script WSF válido y un archivo RAR válido. Una vez abierto, el RAR contendrá un DOCX con una referencia a un HTML, que a su vez intentará cargar el archivo RAR como un script WSF.

Para resumir:

  1. Se descarga un archivo RAR especialmente elaborado (probablemente en la carpeta Descargas)
  2. Se extrae y abre el DOCX
  3. La relación almacenada en document.xml.rels apunta a un html malicioso
  4. Se lanza la vista previa de IE para abrir el enlace HTML
  5. El JScript dentro del HTML contiene un script/iframe que apunta al archivo RAR, con el prefijo del esquema de URI ".wsf:"
  6. Dado que el RAR fue diseñado para ser simultáneamente un RAR válido y un script WSF válido, el script se ejecuta

Qué exploits PoC implementa la herramienta

La utilidad del generador puede reproducir actualmente los siguientes ataques:

AtaquePlantillas HTMLObjetivoMétodo de entregaMétodo de ejecuciónFunciona
Versión original del ataquecab-orig-*WORDDOCXCAB + DLLSÍ
Ataque solo-IE de j00seancab-orig-j00sanIEHTMLCAB + DLLSÍ
Mi versión sin DLLcab-uri-*WORDDOCXCAB + JS/VBSNO1
Ataque "CABless" de Eduardo B. usando RARcabless-rar-*WORDRARWSFSÍ
Ataque modificado de j00sean + HTML smugglingcabless-smuggling-*IEHTMLJS/VBSSÍ2

1El CAB no se descarga correctamente en algunos entornos

2El usuario debe hacer clic en "Guardar" para descargar el archivo en IE

Analizador de archivos CAB

La utilidad cab_parser.py se puede usar para ver las cabeceras del archivo de exploit, pero no lo consideres un analizador completo. Es un visor de cabeceras CAB muy rápido y sencillo que desarrollé para entender qué estaba pasando.

Instalación

El generador está diseñado para funcionar en Windows, ya que utiliza la utilidad makecab. Antes de usarlo, asegúrate de instalar las dependencias necesarias:

  • Con Virtualenv
root@kitploit:~
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install virtualenv
python -m virtualenv venv
venv\Scripts\activate.bat 
pip install -r requirements
  • Sin Virtualenv
root@kitploit:~
git clone https://github.com/klezVirus/CVE-2021-40444
cd CVE-2021-40444
pip install -r requirements

Uso

El generador es trivial de usar y, aunque se ha probado con varios payloads y versiones de Windows diferentes, no es infalible. Me estoy encontrando comportamientos diferentes entre distintas compilaciones de Windows. En cuanto tenga más detalles que compartir, los publicaré aquí.

root@kitploit:~
usage: generator.py [-h] -P PAYLOAD -u URL [-o OUTPUT] [--host] [-c COPY_TO] [-nc] [-t]

[%] CVE-2021-40444 - MS Office Word RCE Exploit [%]

optional arguments:
  -h, --help            show this help message and exit
  -P PAYLOAD, --payload PAYLOAD
                        DLL payload to use for the exploit
  -u URL, --url URL     Server URL for malicious references (CAB->INF)
  -o OUTPUT, --output OUTPUT
                        Output files basename (no extension)
  --host                If set, will host the payload after creation
  -c COPY_TO, --copy-to COPY_TO
                        Copy payload to an alternate path
  -nc, --no-cab         Use the CAB-less version of the exploit
  -t, --test            Open IExplorer to test the final HTML file

Ejemplo

  • Genera el exploit original y pruébalo localmente
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.dll --host 

Nota: el puerto se selecciona mediante la URL, y el exploit se genera según la extensión del archivo del payload

  • Genera el exploit CABless con RAR y pruébalo localmente mediante IE
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\job-jscript.wsf --no-cab --host -t 
  • Genera el exploit CABless (solo IE) con HTML smuggling y pruébalo localmente mediante IE
root@kitploit:~
python generator.py -u http://127.0.0.1 -P test\calc.js --no-cab --host -t 

Créditos

  • RET2_pwn por el increíble blog
  • j00sean por los buenos consejos
  • lockedbyte por el primer PoC decente
  • Max_Mal por la pista sobre los esquemas de URI alternativos
  • wdormann por la pista sobre las restricciones de tamaño del archivo HTML
  • Edu_Braun_0day por la genial versión sin CAB del exploit
Descargar herramienta