Kategoria OWASP: MASVS-PLATFORM: Platform Interaction
Omówienie
Luka w zakresie przechwytywania domyślnych intencji występuje, gdy aplikacja nie określa w wywołaniu intencji pełnej nazwy kwalifikowanej klasy komponentu lub pakietu. Pozwala to złośliwej aplikacji zarejestrować filtr intencji, aby przechwycić intencję zamiast docelowej aplikacji.
W zależności od treści intencji osoby przeprowadzające atak mogą odczytywać lub modyfikować poufne informacje albo wchodzić w interakcje z obiektmi zmiennymi, takimi jak zmienna PendingIntent lub Binders.
Przejęcie domyślnego zamiaru może też umożliwić atakującemu wykonywanie dowolnych działań, takich jak uruchamianie kontrolowanych przez niego komponentów.
Wpływ
Jeśli domyślna intencja, która obsługuje dane wrażliwe, przekazuje token sesji w dodatkowym ciągu adresu URL, aby otworzyć WebView, każda aplikacja określająca odpowiednie filtry intencji może odczytać ten token. Może to umożliwić dowolnej prawidłowo skonfigurowanej aplikacji na urządzeniu przechwycenie intencji i odczytanie zawartych w niej danych wrażliwych, co pozwoli atakującym na wyprowadzenie danych, takich jak informacje umożliwiające identyfikację użytkownika lub tokeny sesji.
Środki zaradcze
Jeśli aplikacja tego nie wymaga, określ intencje w prosty sposób, wywołując funkcję setPackage()
. Dzięki temu intencję może interpretować tylko określony komponent (w aplikacji lub w innych aplikacjach), co uniemożliwia niesprawdzonym aplikacjom przechwytywanie danych wysyłanych wraz z intencją. Ten fragment kodu pokazuje, jak jawnie określić intencję:
Kotlin
val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
addCategory("android.intent.category.OPENABLE")
setPackage("com.some.packagename")
setType("*/*")
putExtra("android.intent.extra.LOCAL_ONLY", true)
putExtra("android.intent.extra.TITLE", "Some Title")
}
startActivity(intent)
Java
Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setPackage("com.some.packagename");
intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);
Jeśli musisz używać niejawnych intencji, pomiń wszelkie informacje poufne lub zmienne obiekty, których nie chcesz ujawniać. Niejawne intencje mogą być potrzebne, gdy aplikacja nie wie dokładnie, która aplikacja wykona daną czynność (np. tworzenie e-maila, robienie zdjęcia itp.).
Materiały
- Element manifestu: filtr intencji
- Lista dozwolonych uprawnień z uprawnieniami
- Intencje i filtry intencji
- Wymuszenie selektora w przypadku niejawnych intencji
- Typowe ukryte intencje