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.
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/
·
Dynamic-Link
Library Search Order https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx
Fuemte: Hispasec