sábado, 21 de abril de 2018

Carga insegura de librerías en Foxit Reader

Foxit Reader, presentado como una alternativa al lector de PDF Adobe Reader con algunas mejoras, sufre de una de las vulnerabilidades menos conocidas: la carga insegura de DLL's.





Foxit Reader es una herramienta dedicada al formato de archivos PDF, que puede ver, crear, editar, imprimir y firmar digitalmente. Bajo el modelo de características base gratuitas y servicios adicionales de pago conocido como 'freemium', esta aplicación está desarrollada por Foxit Software, una compañía localizada en Fremont, California. Las primeras versiones de Foxit Reader se hicieron famosas por ser rápidas y livianas.

Esta vez, Foxit Reader es noticia por presentar una vulnerabilidad poco común, que tiene su origen en un fallo de programación a la hora de especificar las DLL's a cargar por el programa. La vulnerabilidad concreta es conocida como 'Unsafe DLL loading', y consiste en que es posible engañar al programa para que cargue una DLL diferente a la original. Debido a que por defecto las DLL's al ser cargadas ejecutan un método encargado de inicializar recursos que necesite la DLL (llamado 'DllMain'), esto es equivalente a ejecución de código arbitrario, si bien las condiciones están ciertamente restringidas.

Generalmente, en Windows la carga de DLL's funciona buscando la librería en distintas rutas, siguiendo el siguiente orden (en Windows XP, en versiones modernas varía ligeramente):

  1. Donde reside el ejecutable
  2. El directorio actual (no es lo mismo que el primer punto)
  3. El de sistema (típicamente 'C:\Windows\System32\')
  4. Otro de sistema, pero el de 16 bits ('C:\Windows\System\')
  5. El directorio de Windows ('C:\Windows\')
  6. Los directorios especificados en la variable de entorno 'PATH'

Windows no usa esa lista de búsqueda si se especifica una librería con una ruta absoluta (por ejemplo, 'C:\Windows\System32\rtutils.dll') en lugar de relativa ('rtutils.dll'), y va directamente a por la librería en esa ruta. Pero si efectivamente usa una ruta relativa, entonces usará esa lista de búsqueda. A partir de Windows XP SP2, al estar activado por defecto el valor del registro 'SafeDllSearchMode', el orden cambia y el directorio actual pasa al quinto lugar de esa lista, haciendo un poco más segura la carga de DLL's.

Sin embargo, a pesar de ésto, la carga de DLL's sigue siendo vulnerable al buscar donde reside el ejecutable, o incluso si no existe la DLL, terminaría por usar rutas como el directorio actual o sacadas de la variable de entorno 'PATH'. Lo cierto es que las condiciones son un poco especiales, y en las posibilidades de explotación se habla de una víctima ejecutando programas en un servidor de archivos remoto (un escenario no muy común y peligroso ya de por sí por otras razones).

Al final, nos quedamos con que si podemos escribir en la carpeta de una aplicación con esta vulnerabilidad, aunque no tengamos permisos de ejecución, cuando esa aplicación se ejecute tirará de la librería maliciosa plantada por el atacante en lugar de la librería del sistema. Si bien no es una técnica muy usada en explotación, sí lo es en malware, donde los autores plantan una DLL maliciosa como una forma poco usual y enrevesada de conseguir persistencia del malware en el sistema.

Foxit Software ya ha corregido esta vulnerabilidad en la última versión de Foxit Reader disponible en su página web.



Carlos Ledesma
@Ravenons


Más información:

Foxit Reader 8.3.1.21155 (Unsafe DLL Loading Vulnerability)
http://seclists.org/fulldisclosure/2018/Apr/41

More information about the DLL Preloading remote attack vector
https://blogs.technet.microsoft.com/srd/2010/08/23/more-information-about-the-dll-preloading-remote-attack-vector/