Vulnerabilità Path Traversal

Queste informazioni sono rivolte agli sviluppatori di app per cui esiste un problema di vulnerabilità Path Traversal.

Situazione attuale

Dal 16 gennaio 2018, Google Play impedisce la pubblicazione di nuove app o aggiornamenti che contengono la vulnerabilità Path Traversal. Leggi la notifica su Play ConsoleDopo le scadenze indicate in Play Console, le app che contengono vulnerabilità di sicurezza non corrette potrebbero essere rimosse da Google Play.

Azione richiesta

  1. Accedi a Play Console e vai alla sezione Avvisi per scoprire quali app sono interessate dai problemi e le scadenze per risolverli.
  2. Aggiorna le app interessate e correggi la vulnerabilità.
  3. Invia le versioni aggiornate delle app interessate.

Quando invii nuovamente le app, queste vengono riesaminate. Questa procedura può richiedere diverse ore. Se l'app supera il controllo e viene pubblicata correttamente, non sono necessari ulteriori interventi. Se invece l'app non supera il controllo, la nuova versione dell'app non verrà pubblicata e riceverai una notifica via email.

Ulteriori dettagli

Le implementazioni di openFile in classi ContentProvider esportate possono essere vulnerabili se non convalidano correttamente i parametri URI in ingresso. Un'app dannosa potrebbe fornire un URI creato appositamente (ad esempio contenente "/../") per ingannare l'app e farle restituire un ParcelFileDescriptor per un file al di fuori della directory prevista, consentendo così all'app dannosa di accedere a qualsiasi file accessibile alla tua app.

Esistono due strategie consigliate per eliminare una vulnerabilità Path Traversal in una classe ContentProvider.

1. Se la classe ContentProvider non deve essere esposta ad altre app:

2. Se la classe ContentProvider deve essere esposta ad altre app:

Devi assicurarti che i valori inseriti in openFile contenenti caratteri path traversal non possano causare la restituzione da parte della tua app di file imprevisti. A tale scopo, controlla il percorso canonico del file. Ad esempio:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Attenzione: tieni presente che non è sicuro chiamare il metodo getLastPathSegment per il parametro Uri. Un'app dannosa può fornire un percorso URI codificato come %2F..%2F..path%2Fto%2Fsecret.txt per fare in modo che il risultato di getLastPathSegment sia /../../path/to/secret.txt. Ad esempio, la seguente implementazione è ancora vulnerabile all'attacco.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Siamo qui per aiutarti

Puoi pubblicare eventuali domande tecniche relative alla vulnerabilità su Stack Overflow con il tag "android-security". Per chiarimenti sui passaggi da seguire per risolvere il problema, puoi contattare il nostro team di assistenza per gli sviluppatori.

È stato utile?

Come possiamo migliorare l'articolo?
false
Menu principale
4133736604328375568
true
Cerca nel Centro assistenza
true
true
true
true
true
5016068
false
false