Jak opravit chybu zabezpečení, která umožňuje vložení fragmentu

Tyto informace jsou určeny pro vývojáře, jejichž aplikace používají nezabezpečenou implementaci tříd PreferenceActivity, kvůli které jsou náchylné k vložení fragmentu. Taková implementace může povolit škodlivé externí aplikaci načíst fragmenty, které by měly zůstat soukromé.

K čemu dochází

Od 1. března 2017 začala služba Google Play blokovat publikování nových aplikací a aktualizací, v nichž třídy PreferenceActivity mohou být zranitelné útokem Fragment Injection. Další informace najdete v oznámení ve službě Play Console. Po termínech uvedených v Play Console mohou být aplikace s neopravenými chybami zabezpečení z Google Play odstraněny.

Vyžadovaná akce

  1. Přihlaste se do Play Console a přejděte do sekce Upozornění, kde zjistíte, kterých aplikací se tento problém týká a do kdy je potřeba jej vyřešit.
  2. Aktualizujte dotčené aplikace a chybu zabezpečení opravte.
  3. Odešlete aktualizované verze dotčených aplikací.

Po odeslání bude aplikace znovu zkontrolována. Tento proces může trvat několik hodin. Pokud aplikace při kontrole projde a bude úspěšně publikována, není potřeba podnikat žádné další kroky. Jestliže aplikace při kontrole neprojde, nová verze aplikace nebude publikována a obdržíte e‑mailem oznámení.

Další podrobnosti

Pokud je to možné, nastavte pro třídu PreferenceActivity v souboru manifestu hodnotu exported=false. Zabráníte tak cizím aplikacím v odesílání objektů Intent do této třídy.

Pokud je zranitelnou třídu PreferenceActivity nutné exportovat do cizích aplikací, zjistěte, proč je třída zranitelná, a podnikněte odpovídající akce. Možnosti jsou dvě:

  1. Nesprávná implementace metody isValidFragment:

Zkontrolujte, zda zranitelná třída neobsahuje nebo nedědí implementaci metody isValidFragment, která pro všechny cesty kódu vrací hodnotu true. Pokud ano, aktualizujte třídu tak, aby kontrolovala seznam tříd Fragment, které lze povolit. Příklad: Má-li třída PreferenceActivity povolit pouze třídy MyFragment a žádné jiné, implementujte následující kontrolu:

         public boolean isValidFragment(String fragmentName) {
            return MyFragment.class.getName().equals(fragmentName);

         }

  1. Hodnota targetSdkVersion je nižší než 19 a není implementována metoda isValidFragment:

Pokud aplikace v souboru manifestu v současné době nastavuje hodnotu targetSdkVersion na méně než 19 a zranitelná třída neobsahuje implementaci metody isValidFragment, je zranitelnost zděděna z třídy PreferenceActivity.

Jednou možností řešení je aktualizace hodnoty targetSdkVersion na 19 nebo více. Pokud hodnotu targetSdkVersion aktualizovat nelze, měli by vývojáři implementovat metodu isValidFragment podle popisu v bodu 1 a kontrolovat tak třídy fragmentů, které lze povolit.

Aplikace také musí být v souladu s distribuční smlouvou pro vývojářeobsahovými zásadami

Rádi vám poradíme

Máte-li ohledně této zranitelnosti technické dotazy, publikuje příspěvek na webu Stack Overflow. Použijte štítek „android-security“. Pokud potřebujete poradit s jednotlivými kroky k řešení tohoto problému, obraťte se na náš tým podpory pro vývojáře.