ZipEg es una herramienta de compresión/descompresión de ficheros con interfaz gráfica para sistemas Mac OS X muy popular. En artículos anteriores ya habíamos hablado sobre fallos de seguridad en los permisos de ficheros en el proceso de instalación, permitiendo remplazar ficheros originales por copias modificadas.
El artículo de hoy se centra en un fallo de seguridad de no solucionado localizado en esta misma aplicación, la cual no realiza una adecuada comprobación de los nombres de los ficheros a la hora de descomprimir los ficheros al escribirlos en disco, provocando un ataque de Path Transversal. Este tipo de ataques ya han afectado con anterioridad a otras herramientas de compresión.
Prueba de Concepto
En la siguiente captura se ve el contenido de un fichero comprimido con extensión ‘.zip’ que contiene en su interior otro fichero llamado ‘aaaaaaaaaaaaaaaaa.txt’. En la imagen siguiente se puede ver como el nombre del archivo se puede leer en ASCII dentro del fichero.
Figura 1: El nombre del fichero se puede leer en el contenido del fichero zip
Esta sería la estructura normal de un fichero .zip y, debido al comportamiento normal del sistema de descompresión ZipEg, la extracción del fichero se realizará en el mismo directorio en donde se encuentre el fichero .zip que, en este ejemplo concreto, es /Users/i64/Desktop/aaaaaaaaaaaaaaa.txt. En la imagen siguiente se puede ver como ZipEg avisa de este comportamiento.
Figura 2: Extracción normal de un fichero comprimido
El fallo, sin embargo, radica en que ZipEg no realiza una verificación del nombre del fichero, pudiéndose, de este modo, realizar un ataque de Path Transversal con el que se conseguiría que la descompresión del fichero se realizase en la ruta indicada por el atacante. Esto sucederá así, siempre y cuando el usuario que realice la extracción tenga los permisos necesarios.
Para conseguir este objetivo es suficiente con modificar, mediante un editor hexadecimal, el nombre de archivo ‘aaaaaaaaaaaaaaaaa.txt’ por una ruta del sistema. En este ejemplo concreto se ha seleccionado ‘../../../../temp/aaaa.txt’ para lograr este efecto.
Figura 3: Modificación del nombre del fichero con una ruta de extracción
Ahora, cuando el usuario trate de realizar una descompresión de este fichero, la ruta de destino será /tmp/aaaa.txt en lugar de la ruta esperada.
Figura 4: El archivo se descomprime en la ruta inyectada
Vectores de ataque
Este tipo de fallos de seguridad pueden ser especialmente peligrosos en múltiples entornos. Hay que tener en cuenta que si el fichero contiene muchos archivos comprimidos, para el atacante es bastante sencillo ocultar uno con este comportamiento.
Si además, el usuario tiene muchos privilegios en la máquina, se podrían sobrescribir archivos de configuración importantes del sistema o, incluso, crear archivos ejecutables en rutas de un servidor web. Este tipo de vulnerabilidades son muy comunes en ataques dirigidos, es decir, cuando el ataque no se ha creado para cualquier usuarios, sino para una persona en concreto.
Sistemas afectados
Actualmente, la versión 2.9 de ZipEg, tanto para Windows como para Mac OS X son vulnerables a este tipo de ataques.
Autor: Manu «The Sur»