Vulnerabilitat Path Traversal

Aquesta informació va dirigida als desenvolupadors d'aplicacions que contenen la vulnerabilitat Path Traversal.

Què passa

A partir del 16 de gener de 2018, Google Play va començar a bloquejar la publicació de les aplicacions o les actualitzacions noves que continguessin la vulnerabilitat Path Traversal. Consulta l'avís a Play Console. Després de les dates límit que es mostren a Play Console, és possible que les aplicacions que presentin vulnerabilitats de seguretat sense solucionar se suprimeixin de Google Play.

Acció necessària​

  1. Inicia la sessió a Play Console i navega per la secció Alertes per consultar quines aplicacions es veuen afectades i les dates límit per resoldre aquests problemes.
  2. Actualitza les aplicacions afectades i soluciona la vulnerabilitat.
  3. Envia les versions actualitzades de les aplicacions afectades.

Un cop hagis tornat a enviar l'aplicació, la tornarem a revisar. Aquest procés pot tardar diverses hores. Si l'aplicació supera la revisió i es publica correctament, no cal dur a terme cap altra acció. Si l'aplicació no supera la revisió, no se'n publicarà la versió nova i rebràs una notificació per correu electrònic.

Detalls addicionals

Les implementacions d'openFile en ContentProviders exportats poden ser vulnerables si no validen correctament els paràmetres URI entrants. Una aplicació maliciosa pot proporcionar un URI dissenyat (per exemple, un que contingui “/../”) per enganyar la teva aplicació perquè torni un ParcelFileDescriptor d'un fitxer fora del directori previst, de manera que l'aplicació maliciosa podrà accedir a qualsevol fitxer al qual tingui accés la teva aplicació.

Hi ha dues estratègies recomanades per suprimir una vulnerabilitat Path Traversal en un ContentProvider.

1. Si no cal que el ContentProvider s'exposi a altres aplicacions:

2. Si el ContentProvider s'ha d'exposar a altres aplicacions:

Cal que t'asseguris que les entrades a openFile que contenen caràcters de creuament de camí no poden fer que la teva aplicació torni fitxers inesperats. Per fer-ho, pots comprovar el camí canònic del fitxer. Per exemple:

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);
}
 

Advertiment: tingues en compte que cridar getLastPathSegment al paràmetre URI no és segur. Una aplicació maliciosa pot proporcionar el camí d'un URI codificat, com ara %2F..%2F..path%2Fto%2Fsecret.txt, de manera que el resultat de getLastPathSegment serà /../../path/to/secret.txt. Per exemple, la implementació següent encara és vulnerable als atacs.

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

Som aquí per ajudar-te

Si tens cap dubte tècnic sobre la vulnerabilitat, pots publicar les teves preguntes a Stack Overflow amb l'etiqueta "android-security". Per aclarir els passos que has de seguir per resoldre aquest problema, pots contactar amb el nostre equip d'assistència per a desenvolupadors.