Tiedostopolun läpikäynnin haavoittuvuus

Nämä tiedot on tarkoitettu kehittäjille, joiden sovellukset sisältävät tiedostopolun läpikäynnin haavoittuvuuden.

Mistä on kyse?

Google Play alkoi 16.1.2018 estää kaikkien sellaisten uusien sovellusten ja päivitysten julkaisemisen, jotka sisältävät tiedostopolun läpikäynnin haavoittuvuuden. Lue lisää Play Consolen ilmoituksesta. Play Consolessa näytettyjen määräaikojen jälkeen korjaamattomia tietosuojahaavoittuvuuksia sisältävät sovellukset saatetaan poistaa Google Playsta.

Edellyttää toimia​

  1. Kirjaudu sisään Play Consoleen ja siirry ilmoitusosioon, niin näet, mihin sovelluksiin ongelmat vaikuttavat, ja määräajat niiden ratkaisemiselle.
  2. Päivitä kyseiset sovellukset ja korjaa haavoittuvuus.
  3. Lähetä sovellusten päivitetyt versiot.

Sovellus tarkastetaan lähetyksen yhteydessä uudelleen. Tässä voi kestää useita tunteja. Jos sovellus läpäisee tarkastuksen ja sen julkaisu onnistuu, lisätoimia ei tarvita. Jos sovellus ei läpäise tarkastusta, uutta sovellusversiota ei julkaista ja sinulle ilmoitetaan tästä sähköpostilla.

Lisätietoja

openFilen käyttö viedyssä ContentProviderissa voi olla riskialtista, jos ne eivät vahvista saapuvia URI-parametreja oikein. Haitallinen sovellus voi antaa muokatun URIn (esim. sellaisen, jossa on "/../") huijatakseen sovelluksesi palauttamaan aiotun hakemiston ulkopuolella olevan tiedoston ParcelFileDescriptor, jolloin haitallinen sovellus pääsee käsiksi kaikkiin sovelluksesi käyttämiin tiedostoihin.

Tiedostopolun läpikäynnin haavoittuvuuden eliminoimiseen ContentProviderissa on kaksi suositeltua keinoa.

1. Jos ContentProviderin ei tarvitse näkyä muille sovelluksille:

2. Jos ContentProviderin on oltava muiden sovellusten näkyvissä:

Sinun on myös varmistettava, että openFilen tiedostopolun läpikäynnin merkkejä sisältävät tiedot eivät voi saada sovellustasi palauttamaan odottamattomia tiedostoja. Voit tehdä tämän tarkistamalla tiedoston kanonisen polun: Esimerkki:

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

Varoitus: Huomaa, että getLastPathSegment-kutsun tekeminen URI-parametrissä ei ole turvallista. Haitallinen sovellus voi antaa koodatun URI-polun, esim. %2F..%2F..path%2Fto%2Fsecret.txt, jolloin getLastPathSegmentin tulos on /../../path/to/secret.txt. Esimerkiksi seuraava koodi on edelleen haavoittuvainen hyökkäyksille.

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

Autamme mielellämme

Voit esittää teknisiä kysymyksiä haavoittuvuudesta Stack Overflow ‑sivustolla. Merkitse kysymyksesi android-security-tagilla. Jos tarvitset lisätietoja korjausvaiheista, ota yhteyttä kehittäjien tukitiimiimme.

false
Päävalikko
15268789116563253390
true
Ohjekeskushaku
true
true
true
true
true
5016068
false
false