Chyba zabezpečenia – prechádzanie cesty

Tieto informácie sú určené pre vývojárov aplikácií, ktoré obsahujú chybu zabezpečenia spočívajúcu v prechádzaní cesty.

Čo sa deje

Od 16. januára 2018 začala služba Google Play blokovať zverejňovanie všetkých nových aplikácií a aktualizácií, ktoré obsahujú chybu zabezpečenia prechádzania cesty. Informácie nájdete v oznámení v službe Play ConsolePo termínoch uvedených v službe Play Console môžu z nej byť odstránené všetky aplikácie s nevyriešenými chybami zabezpečenia.

Vyžaduje sa akcia​

  1. Prihláste sa do služby Play Console, prejdite do časti Upozornenia a zistite termíny, dokedy treba problémy vyriešiť, a aplikácie, ktorých sa to týka.
  2. Aktualizujte príslušné aplikácie a chybu zabezpečenia odstráňte.
  3. Odošlite aktualizované verzie dotyčných aplikácií.

Po opätovnom odoslaní bude vaša aplikácia znova skontrolovaná. Tento proces môže trvať niekoľko hodín. Ak aplikácia úspešne prejde kontrolou a bude zverejnená, nie je potrebné vykonať žiadne ďalšie kroky. Ak aplikácia neprejde kontrolou, jej nová verzia sa nezverejní a dostanete upozornenie e‑mailom.

Ďalšie podrobnosti

Implementácie súboru openFile v exportovaných poskytovateľoch obsahu môžu obsahovať chyby zabezpečenia, ak náležite neoverujú prichádzajúce parametre URI. Škodlivá aplikácia môže poskytnúť zhotovený parameter URI (ktorý napríklad obsahuje „/../“), pomocou ktorého oklame vašu aplikáciu, aby vrátila ukazovateľ ParcelFileDescriptor pre súbor mimo očakávaného adresára. Tým jej umožní prístup k všetkým súborom, ku ktorým má prístup aj vaša aplikácia.

Existujú dve odporúčané stratégie odstránenia chyby zabezpečenia spočívajúcej v prechádzaní cesty v poskytovateľovi obsahu.

1. Ak poskytovateľ súboru nemusí byť prístupný pre iné aplikácie:

2. Ak poskytovateľ obsahu musí byť prístupný pre iné aplikácie:

Musíte náležite zaistiť, aby vstupy súboru openFile, ktoré obsahujú znaky prechádzania cesty, nemohli spôsobiť, že vaša aplikácia vráti neočakávané súbory. Urobíte to tak, že skontrolujete kanonickú cestu daného súboru. Príklad:

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

Výstraha: Upozorňujeme, že volanie atribútu getLastPathSegment v súvislosti s parametrom URI je nebezpečné. Škodlivá aplikácia môže poskytnúť šifrovanú cestu pre parameter URI, ako napríklad %2F..%2F..path%2Fto%2Fsecret.txt, takže výsledok atribútu getLastPathSegment bude /../../path/to/secret.txt. Nasledujúca implementácia je napríklad stále náchylná na napadnutie.

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

Sme tu pre vás

V prípade technických otázok týkajúcich sa tejto chyby zabezpečenia môžete uverejniť príspevok na webe Stack Overflow. Použite v ňom značku android-security. Ak potrebujete ďalšie vysvetlenie postupu na vyriešenie tohto problému, kontaktujte tím podpory pre vývojárov.

false
Hlavná ponuka
12796442252964673565
true
Vyhľadávanie v Centre pomoci
true
true
true
true
true
5016068
false
false