
Microsoft-Office-Word-MSHTML-Remote-Code-Execution-Exploit
Generador de docx malicioso para explotar CVE-2021-40444 (ejecución remota de código en Microsoft Office Word), funciona con archivos DLL arbitrarios.
Aunque ya hay muchos PoC por Internet, decidí probar suerte en armar esta vulnerabilidad, ya que lo que encontré disponible carecía de información valiosa que valga la pena compartir, considerando también que Microsoft ya publicó un parche para esta vulnerabilidad.
Hasta ahora, los únicos recursos valiosos que he visto para crear un generador completamente funcional son:
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.
Hay bastantes requisitos pasados por alto para que este exploit funcione, lo que hizo que incluso buenos PoC, como el de lockedbyte, fallaran al intentar funcionar 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 publicar los detalles.
Según este tuit de Will Dormann, el HTML debe tener al menos 4096 bytes para activar la "Vista previa" dentro de MS Word.
El archivo CAB debe modificarse a nivel de bytes para evitar errores de extracción y lograr el ZipSlip:
filename.inf debería convertirse en ../filename.inffilename.inf coffCabStartCFFOLDER.typeCompress CFFOLDER.coffCabStart debería incrementarse en 3 (debido al '../' añadido)CFFOLDER.cCfData CFFILE.cbFile debería ser mayor que todo CFHEADER.cbCabinetCFDATA.csum Las razones de estas restricciones son muchas, y no dediqué suficiente tiempo a entenderlas todas en profundidad, pero veamos las más importantes:
NOTA1: Defender ahora detecta si el archivo CAB contiene un PE usando el valor _IMAGE_DOS_HEADER.e_magic como firma, evitando potencialmente que se incrusten archivos PE 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. Depende del lector curioso desarrollarlo más.
NOTA2: El parche de Microsoft bloquea esquemas de URI arbitrarios, aparentemente usando un enfoque de lista negra (esto es solo una suposición)
La cadena de ataque principal asociada con CVE-2021-40444 es el ataque DLL cargado mediante el esquema de URI .cpl. Para explotarlo, un atacante necesita generar un DLL especialmente diseñado. Si quieres probarlo, prueba mi script evildll-gen.
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 se puede utilizar 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 estar seguros de descargar el archivo en la ubicación correcta dentro del sistema. Con el exploit del 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.
Hasta la fecha, no he encontrado una forma de encadenar descarga y ejecución SIN un archivo CAB.
Nota: Hablando solo de IE, el contrabando de HTML (HTML smuggling) podría ser un escenario posible para explotar la vulnerabilidad.
Esta técnica fue revelada 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 diseñado, obtenido encadenando 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: