¿Qué hace que una aplicación de Android sea vulnerable a Directory Traversal?

0

Definición de cruce de directorios

El recorrido del directorio es una forma de explotación de HTTP en la que un pirata informático utiliza el software en un servidor web para acceder a los datos en un directorio que no sea el directorio raíz del servidor. Si el intento tiene éxito, el pirata informático puede ver archivos restringidos o incluso ejecutar comandos en el servidor.

Cómo afecta el cruce de directorios al Android O.S

Directory Traversal dentro de Android, permite a los atacantes perpetrar un ataque transversal a la ruta en el contexto de una aplicación de usuario y leer / escribir archivos dentro del almacenamiento interno.

Ejemplo de ataque de Android Directory Traversal

Nombre de la aplicación:

ES File Explorer v3.2.4.1 - Vulnerabilidad de la trayectoria del camino

Producto & Introducción al servicio:

ES File Explorer es un dispositivo todo en uno gratuito que incluye un administrador de archivos & aplicación & Tareas, soporte para espacios de almacenamiento en línea (Dropbox, Google Drive, SkyDrive, Box.net, Sugarsync, Yandex, Amazon S3),

ID de CVE:

CVE-2015-1876

Referencias (Fuente):

enlace

enlace

Detalles técnicos & Descripción:

Se descubrió una vulnerabilidad en la web de Path Traveral en la aplicación web de Android móvil oficial ES File Explorer v3.2.4.1. La vulnerabilidad de seguridad permite que un atacante remoto solicite archivos locales no autorizados y rutas del sistema para poner en peligro la aplicación o el dispositivo.

La vulnerabilidad se encuentra en la solicitud de ruta content://com.estrongs.files/system/ con el contexto. La vulnerabilidad puede ser explotada por Atacantes locales o remotos sin interacción del usuario. El atacante debe reemplazar la solicitud de ruta de sdcard en com.estrongs.files / system con un solicitud de ruta maliciosa como ./etc/passwd ./etc/hosts y continúa la solicitud. El vector de ataque se encuentra en el lado de la aplicación del servicio. y la solicitud es http.

Mi pregunta

Aunque entiendo qué es Recorrido de directorio y cómo puede tener lugar Recorrido de directorio . No sé qué factores hacen que una selección de código de Android sea vulnerable a tal ataque.

    
pregunta 22.05.2015 - 20:45
fuente

1 respuesta

3

La respuesta genérica para "¿Es mi código vulnerable al recorrido del directorio?" es preguntarse si su código:

  1. ¿Utiliza cadenas de nombre de archivo que obtuvo de una fuente no confiable para leer / escribir archivos en el disco? Las "fuentes que no son de confianza" podrían ser la entrada directa del usuario, las cosas que lea de los archivos (que podrían haber sido manipulados) o el código de un tercero con el que interactúa su código.

  2. Si respondió 'sí' a (1), ¿qué sucede si en lugar de "filename.txt" , ingresa la cadena "../someOtherDir/secret.txt" (suponiendo que este archivo existe)? ¿El programa lo rechazará como acceso a un archivo malintencionado o lo abrirá felizmente?

Este tipo de recorrido funciona porque los entornos similares a Unix aceptarán /tmp/../etc/passwds como ruta válida para /etc/passwds .

Mitigación

La mitigación de ataques de ataques de directorio generalmente implica asegurarse de que si permite nombres de archivos de fuentes no confiables, restringe esos accesos de archivos a un solo directorio. AFAIK no hay una mejor manera de hacer esto, pero hay algunas cosas en que pensar:

  1. Si solo está permitiendo que el usuario especifique un nombre de archivo (no una carpeta o ruta) simplemente rechace cualquier cadena de nombre de archivo que contenga los caracteres '/' o '\'. Solo descarta silenciosamente esa petición. Es mejor buscar la lista de caracteres de nombre de archivo legales en su sistema operativo (Android en este caso) y rechazar cualquier cadena que contenga un carácter no legal.

  2. Si todos los archivos a los que está permitiendo el acceso del usuario están en /publicDir , entonces, antes de abrir un archivo con la cadena no confiable, asegúrese de que el archivo al que se apunta está realmente dentro de /publicDir . Esto suena obvio, pero resulta ser muy difícil hacerlo bien, ya que hay muchas maneras de construir rutas maliciosas, por ejemplo: "/publicDir/../etc/passwds" engañará a muchos cheques ingenuos. Así que no recomendaría esta opción.

Una nota final es no entrar en el juego de "limpieza" de la entrada del usuario, simplemente rechazarla. Por ejemplo, algo que los programadores suelen hacer es eliminar los caracteres peligrosos e intentar procesar la solicitud en la cadena "limpia". No hagas esto Si te dieron una cadena mala, simplemente recházala y deja que lo intenten de nuevo. Tengo dos razones para esto:

  1. Si el usuario le pidió que abriera "../../../etc/passwd" , eso no fue un error tipográfico, no significaron "passwd.txt" , están siendo un asshat. Solo ignóralo.

  2. Tan pronto como escribes una función para limpiar cadenas, el juego pasa a ser una cadena que tu limpiador con hace malicioso . Cuanto más complicado sea el limpiador de cuerdas, más espacio habrá para abusar de él.

Así que no juegues, si parece sospechoso, simplemente recházalo. Personalmente uso la opción de mitigación # 1: en lugar de intentar adivinar qué caracteres podrían ser maliciosos, simplemente rechazo cualquier cosa que contenga un carácter que no sea letras, números y '.'

    
respondido por el Mike Ounsworth 22.05.2015 - 21:58
fuente

Lea otras preguntas en las etiquetas