Che cosa rende vulnerabile un'applicazione Android a Directory Traversal?

0

Definizione di attraversamento directory

L'attraversamento della directory è una forma di exploit HTTP in cui un hacker utilizza il software su un server Web per accedere ai dati in una directory diversa dalla directory principale del server. Se il tentativo ha esito positivo, l'hacker può visualizzare i file con restrizioni o persino eseguire comandi sul server.

Come l'attraversamento della directory influisce su Android O.S

Directory Traversal all'interno di Android, consente agli aggressori di perpetrare un attacco di attraversamento di percorsi nel contesto di un'applicazione utente e di leggere / scrivere file all'interno della memoria interna.

Esempio di attacco di Android Directory Traversal

Nome app:

ES File Explorer v3.2.4.1 - Vulnerabilità di attraversamento del percorso

Prodotto e amp; Introduzione al servizio:

ES File Explorer è un dispositivo all-in-one gratuito che include un file manager e amp; applicazione e amp; compiti, supporto per gli spazi di archiviazione online (Dropbox, Google Drive, SkyDrive, Box.net, Sugarsync, Yandex, Amazon S3),

CVE-ID:

CVE-2015-1876

Riferimenti (fonte):

link

link

Dettagli tecnici e amp; Descrizione:

Una vulnerabilità di Path Traveral Web è stata rilevata nella versione ufficiale dell'applicazione web android ufficiale ES File Explorer v3.2.4.1. La vulnerabilità della sicurezza consente a un utente malintenzionato remoto di richiedere a file locali e percorsi di sistema di dispositivi non autorizzati di compromettere l'applicazione o il dispositivo.

La vulnerabilità si trova nella richiesta di percorso content://com.estrongs.files/system/ con il contesto. La vulnerabilità può essere sfruttata da attaccanti locali o remoti senza interazione dell'utente. L'autore dell'attacco deve sostituire la richiesta del percorso sdcard nel file com.estrongs.files con a richiesta di percorso dannoso come ./etc/passwd ./etc/hosts e continua la richiesta. Il vettore di attacco si trova sul lato dell'applicazione del servizio e la richiesta è http.

La mia domanda

Anche se capisco quale Directory Traversal è e come può avvenire Directory Traversal . Non so quali fattori rendono vulnerabile una selezione di codice Android a tale attacco.

    
posta 22.05.2015 - 20:45
fonte

1 risposta

3

La risposta generica per "il mio codice è vulnerabile all'indirizzamento tra directory?" è chiedersi se il tuo codice:

  1. Utilizza le stringhe del nome file ottenute da una fonte non attendibile per leggere / scrivere file su disco? Le "fonti non attendibili" possono essere input dell'utente diretto, cose che leggi dai file (che potrebbero essere state manomesse) o codice di terze parti con cui il tuo codice interagisce.

  2. Se hai risposto "sì" a (1), cosa succede se invece di "filename.txt" , inserisci la stringa "../someOtherDir/secret.txt" (supponendo che questo file esista)? Il programma lo rifiuterà come accesso a un file dannoso o aprirà felicemente questo file?

Questo tipo di attraversamento funziona perché gli ambienti unix accettano /tmp/../etc/passwds come percorso valido per /etc/passwds .

Mitigazione

L'attenuazione contro gli attacchi di attraversamento di directory di solito implica che, se si autorizzano nomi di file da fonti non attendibili, si limitano tali accessi a una singola directory. AFAIK non c'è un solo modo migliore per farlo, ma alcune cose a cui pensare sono:

  1. Se si consente all'utente di specificare un nome file (non una cartella o un percorso), è sufficiente rifiutare qualsiasi stringa di nome file contenente i caratteri "/" o "\". Basta silenziosamente quella richiesta. È meglio cercare l'elenco dei caratteri del nome file legale sul tuo sistema operativo (Android in questo caso) e rifiutare qualsiasi stringa che contenga un carattere non legale.

  2. Se tutti i file a cui permetti l'accesso all'utente sono in /publicDir , quindi prima di aprire un file con la stringa non affidabile, assicurati che il file puntato sia effettivamente all'interno di /publicDir . Questo sembra ovvio, ma risulta essere davvero difficile da ottenere poiché ci sono molti modi per costruire percorsi dannosi, ad esempio: "/publicDir/../etc/passwds" ingannerà molti controlli ingenui. Quindi non consiglierei questa opzione.

Una nota finale non è entrare nel gioco di "pulizia" dell'input dell'utente, basta rifiutarlo. Ad esempio, una cosa comune che i programmatori amano fare è rimuovere i personaggi pericolosi e tentare di elaborare la richiesta sulla stringa "pulita". Non farlo Se ti hanno dato una brutta stringa, respingila e lascia che provino di nuovo. Ho due ragioni per questo:

  1. Se l'utente ti chiedeva di aprire "../../../etc/passwd" , che non era un refuso, non intendevano "passwd.txt" , sono un asshat. Ignoralo.

  2. Non appena scrivi una funzione per pulire le stringhe, il gioco diventa passare in una stringa che il tuo pulitore con rende malizioso . Più è complicato il tuo spago, più spazio c'è per abusarne.

Quindi non giocare, se sembra sospetto, respingilo. Personalmente utilizzo l'opzione di mitigazione n. 1: piuttosto che cercare di indovinare quali caratteri potrebbero essere dannosi, rifiuto solo tutto ciò che contiene un carattere diverso da lettere, numeri e "."

    
risposta data 22.05.2015 - 21:58
fonte

Leggi altre domande sui tag