Se encontró una vulnerabilidad en Ghostscript que podría permitir la ejecución de código

agosto 13, 2020 , 0 Comments

Hace pocos días dieron a conocer la noticia de que fue identificada una vulnerabilidad en Ghostscript (CVE-2020-15900) que podría provocar la modificación de archivos y la ejecución de comandos arbitrarios al abrir documentos PostScript con formato especial.

Para quienes desconozcan de Ghostscript deben saber que este es un motor de renderizado para contenido Postscript y PDF y es comúnmente utilizado para convertir documentos PDF y Postscript en imágenes con fines de vista previa, miniaturas e impresión.

También se utiliza para la reproducción de documentos de calidad completa para muchos visores de PDF, incluidos los visores populares en Android, y tiene licencia de varias grandes empresas como Google para renderizar en la nube.

Sobre la vulnerabilidad en Ghostscript

El fallo fue identificado en el uso del operador rsearch PostScript no estándar en un documento que permite provocar un desbordamiento del tipo uint32_t al calcular el tamaño, sobrescribir áreas de memoria fuera del búfer asignado y obtener acceso a archivos en el sistema de archivos, que se pueden usar para organizar un ataque para ejecutar código arbitrario en el sistema (por ejemplo, agregando comandos a ~/.bashrc o ~/.profile).

El fragmento encontrado por AFL empujaba una cadena vacía a la pila: los corchetes vacíos (), copiaban la referencia a esto, lo que resultaba en una pila con dos cadenas vacías () ()y luego ejecutaba la búsqueda inversa. En otras palabras, buscaba una cadena vacía en una cadena vacía, comenzando desde el final.

Desafortunadamente, se perdieron un caso límite donde se busca la cadena vacía. Al buscar una cadena vacía, esto se define como un éxito inmediato: no hay nada que buscar, por lo que saltamos directamente al final. Sin embargo, el resultado debe dividirse en los valores previos al partido, coincidentes y posteriores al partido. Desafortunadamente, el código asumió que habíamos mirado al menos una vez y calculamos la longitud del resultado posterior a la coincidencia de manera incorrecta al restar uno de cero, lo que resultó en una vuelta al valor máximo: 4,294,967,295.

Este error es un defecto de corrupción de memoria en donde hay posibilidad de fracaso y sucede todo el tiempo. No es necesario lidiar con guardias de pila, etc., simplemente basta con leer y escribir lo que se quiera en un segmento masivo de memoria. Esto hizo que fuera bastante fácil para alguien que no es un escritor experimentado en exploits explotarlo.

Debido a este subdesbordamiento, esta cadena nunca se había asignado y no ocupaba espacio real, pero tenía una longitud que se extendía a otra memoria. Intentar leer o escribir esa memoria en direcciones aleatorias saldría de los límites de la memoria, de ahí todas las fallas en el fuzzing. Sin embargo, podríamos almacenar la referencia para permitir su uso usando este fragmento de código:

Es importante tomar en cuenta que las vulnerabilidades en Ghostscript son de mayor gravedad, ya que este paquete se usa en muchas aplicaciones populares de procesamiento de PostScript y PDF. Por ejemplo, se llama a Ghostscript al crear miniaturas en el escritorio, al indexar datos en segundo plano y al convertir imágenes.

Para un ataque exitoso, en muchos casos, es suficiente simplemente descargar el archivo de explotación o navegar por el directorio con él en Nautilus.

Las vulnerabilidades en Ghostscript también se pueden explotar a través de controladores de imágenes basados ​​en los paquetes ImageMagick y GraphicsMagick, pasando un archivo JPEG o PNG, que contiene código PostScript en lugar de una imagen (dicho archivo se procesará en Ghostscript, ya que el tipo MIME es reconocido por el contenido, y sin depender de la extensión).

Solución

El problema afecta a las versiones de 9.50 a 9.52 (el error ha estado presente desde la versión 9.28rc1, pero, según los investigadores que identificaron la vulnerabilidad, apareció desde la versión 9.50).

Pero ya se propuso una corrección en la versión 9.52.1 además de que ya se han publicado actualizaciones de paquetes de parches para algunas distribuciones de Linux tales como Debian, Ubuntu y SUSE.

Mientras que los paquetes en RHEL no se ven afectados.

Fuente: https://insomniasec.com


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.