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 Console. Po 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
- 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.
- Aktualizujte príslušné aplikácie a chybu zabezpečenia odstráňte.
- 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:
- Môžete upraviť značku <provider> príslušného poskytovateľa obsahu v manifeste a nastaviť ju na hodnotu android:exported=”false”. Zabránite tak iným aplikáciám odosielať intencie do príslušného poskytovateľa obsahu.
- Môžete tiež nastaviť atribút android:permission ako povolenie s hodnotou android:protectionLevel=“signature”, ktoré zabráni aplikáciám od iných vývojárov odosielať intencie do príslušného poskytovateľa obsahu.
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.