El 6 de Agosto, la Fundación Mozilla lanzó una actualización de seguridad para el navegador web Firefox que arregla la vulnerabilidad CVE-2015-4495 en el visor PDF embebido dentro del navegador: PDF.js. Esta vulnerabilidad le permite a los atacantes saltear la política de mismo-origen (en inglés same-origin policy) y ejecutar un JavaScript de manera remota que sería interpretado en el contexto del archivo local. Esto le permite a los atacantes leer y escribir archivos en la máquina local así como también subirlos a un servidor remoto. El exploit para esta vulnerabilidad está siendo utilizando en el mundo real, por lo que se recomienda a los usuarios de Firegfox que actualicen a la versión más reciente (39.0.3 en el momento de escritura de este post) inmediatamente.
En este post brindaremos un análisis de dos versiones de este script y compartiremos detalles sobre los ataques asociados contra sistemas Windows, Linux y OS X.
De acuerdo a las estadísticas de ESET LiveGrid®, el servidor con la dirección IP 185.86.77.48, que era el que alojaba el script malicioso, ha estado funcionando desde el 27 de julio de 2015. Además podemos encontrar la corroboración en uno de los foros comprometidos:
Usuario del foro curioso sobre un script malicioso inyectado en la página
Operativos del Departamento de Combate del Cibercrimen del Ministerio de Asuntos Internos de Ucrania, que respondieron rápidamente ante nuestra notificación, también han confirmado que el servidor malicioso, alojado en Ucrania, ha estado online desde el 27 de julio de 2015.
De acuerdo a nuestro monitoreo de la amenaza, el servidor se puso inactivo el 8 de agosto de 2015.
El script
El script utilizado no está ofuscado y es fácil de analizar. Sin embardo, el código muestra que los atacantes tienen un gran conocimiento de los interiores de Firefox.
El script malicioso crea un IFRAME con un blob PDF vacío. Cuando Firefox está a punto de abrir el blob de PDF con el visor de PDF interno (PDF.js), un nuevo código es inyectado en el IFRAME (imagen 2). Cuando este código es ejecutado, una nueva propiedad sandboxContext es creada dentro de wrappedJSObject. Una función de JavaScript es escrita en la propiedad sandboxContext. Esta función será luego invocada por un código subsiguiente. Juntos, estos pasos conducen a un salteo exitoso de la política same-origin.
Código que crea la propiedad sandboxContext
El exploti es muy confiable y funciona sin problemas. Sin embardo, podría mostrar una advertencia para llamar la atención de usuarios con mayores conocimientos técnicos.
El mensaje de advertencia mostrado en el sitio comprometido
Luego de una explotración exitosa, la ejecución va a la parte de exfiltración del código. El script soporta tanto plataformas Linux como Windows. En el último caso busca por archivos de configuración de clientes FTP populares (tales como FileZilla, SmartFTP y otros), clientes SVN, clientes de mensajería instantánea (Psi+ y Pidgin), y de Amazon S3.
La lista de archivos recolectado en Windows en la primera parte del ataque
Estos archivos de configuración podrían contener credenciales de acceso guardadas.
En los sistemas Linux, el script envía los siguientes archivos al servidor remoto:
- /etc/passwd
- /etc/hosts
- /etc/hostname
- /etc/issue
Además, revisa el archive /etc/passwd en búsqueda de directorios home (homedir) de los usuarios del sistema. El script luego busca archivos en los directorios recolectados, evitando revisar en los directorios standard de sistema (tales como daemon, bin, sys, sync y demás)
La lista de archivos recolectados en la etapa 1 del ataque en Linux
Recoge y sube archivos tales como:
- historial (bash, MySQL, PostgreSQL)
- archivos de configuración y llaves de autorización relacionadas a SSH
- Archivos de configuración para software de acceso remoto – Remmina
- Archivos de configuración de FileZilla
- Configuración de PSI+
- Archivos de texto con posibles credenciales y shell scripts
Tal como se evidencia, el propósito de esta primera versión del script malicioso era recoger información utilizada por la mayoría de webmasters y administradores de sitios web. Esto le permitía a los atacantes continuar comprometiendo más sitios.
La segunda versión
El día que Mozilla lanzó el parche para Firefox, los atacantes decidieron apostarlo todo: registraron dos nuevos dominios y mejoraron el script.
Los dos nuevos dominios maliciosos eran maxcdnn[.]com (93.115.38.136) y acintcdn[.]net (185.86.77.48). La segunda dirección IP es la misma que se utilizó en la primera versión. Los atacantes eligieron esos nombres porque los dominios parecían pertenecer a una red de contenidos (CDN).
Es script mejorado para la plataforma Windows no solo recolecta archivos de configuración para aplicación, sino que también junta archivos de texto que contengan casi todas las combinaciones de palabras posibles que podrían ser de valor para los atacantes (tales como contraseñas, cuentas, bitcoins, tarjetas de crédito, exploits, certificados y más):
Listado de archivos recolectados en Windows durante la segunda etapa del ataque
Los atacantes mejoraron el script para Linux agregando nuevos archivos a recolectar y además desarrollaron un código que funciona en el sistema operativo Mac OS X.
Listado de archivos recolectados en Macs durante la segunda etapa del ataque
Algunos comentaristas que hablan ruso atribuyeron mal este código al malware Duqu, dado que algunas variables del código tienen el texto “dq” en ellas.
Una copia del ataque
Dado que el bug era fácil de explotar y que una copia funcional del script está disponible para los cibercriminales, diferentes atacantes comenzaron a utilizarlo. Hemos visto que varios grupos adoptaron rápidamente el exploit y comenzaron a distribuirlo, principalmente en sitios para adultos desde google-user-cache[.]com (108.61.205.41)
El script malicioso hace las mismas cosas que el original, pero recolecta diferentes archivos:
Listado de archivos recolectados por el ataque copia
Conclusión
Los recientes ataques a Firefox son un ejemplo de explotación en el mundo real de una vulnerabilidad seria de software. El exploit muestra que los creadores del malware tenían un profundo conocimiento de Firefox. Además es muy interesante, ya que en la mayoría de los casos, los exploits son utilizados como vector de infección para otros troyanos que roban información. En esta ocasión, eso no fue necesario ya que el script malicioso era capaz por sí mismo de robar archivos sensibles de los sistemas de las víctimas.
Adicionalmente, el exploit fue comenzado a ser re-utilizada por otros operadores de malware poco tiempo después de su descubrimiento. Esta es una práctica común en el mundo del malware.
ESET detecta los scripts malicioso como JS/Exploit.CVE-2015-4495. Le solicitamos a los usuarios de Firefox que actualicen su navegador a la versión corregida (39.0.3). El visor de PDF interno de Firefox también puede ser desactivado al cambiar la configuración de pdfjs a “desactivado”.
Indicadores de Compromiso
Listado parcial de servidores comprometidos:
hxxp://www.akipress.org/
hxxp://www.tazabek.kg/
hxxp://www.super.kg/
hxxp://www.rusmmg.ru/
hxxp://forum.cs-cart.com/
hxxp://www.searchengines.ru/
hxxp://forum.nag.ru/
Servidores utilizados en el ataque:
maxcdnn[.]com (93.115.38.136)
acintcdn[.]net (185.86.77.48)
google-user-cache[.]com (108.61.205.41)
Hashes (MD5):
0A19CC67A471A352D76ACDA6327BC179547A7A25
2B1A220D523E46335823E7274093B5D44F262049
19BA06ADF175E2798F17A57FD38A855C83AAE03B
3EC8733AB8EAAEBD01E5379936F7181BCE4886B3