Skrypty międzyaplikacjami

Kategoria OWASP: MASVS-CODE: Jakość kodu

Przegląd

WebView to komponent przeglądarki wbudowany w aplikacje na Androida, który ułatwia wyświetlanie treści internetowych w aplikacji. Renderuje on HTML, CSS i JavaScript w interfejsie użytkownika aplikacji.

Cross-App Scripting jest ogólnie powiązany z wykonywaniem złośliwego kodu w kontekście aplikacji ofiary. Na potrzeby tej dokumentacji temat zostanie ograniczony do wstrzykiwania złośliwego kodu JavaScript do podatnego na ataki komponentu WebView.

Jeśli aplikacja akceptuje złośliwy kod JavaScript w komponencie WebView bez odpowiedniej weryfikacji lub oczyszczania, jest podatna na ataki CAS (Cross App Scripting).

Wpływ

Luki w zabezpieczeniach umożliwiające ataki typu cross-app scripting mogą być wykorzystywane, gdy kontrolowane przez atakującego treści JavaScript są przekazywane do podatnego na ataki komponentu WebView aplikacji bez weryfikacji lub oczyszczania. W rezultacie kod JavaScript dostarczony przez osobę atakującą jest wykonywany w kontekście komponentu WebView aplikacji ofiary. Złośliwy kod JavaScript może wtedy korzystać z tych samych uprawnień co aplikacja ofiary, co może prowadzić do kradzieży poufnych danych użytkownika i przejęcia konta.

Środki ograniczające ryzyko

Wyłącz JavaScript

Jeśli aplikacja nie wymaga JavaScriptu, wyłączenie go zapobiegnie zagrożeniom:

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

Jeśli Twoja aplikacja wymaga JavaScriptu, upewnij się, że jesteś właścicielem lub masz kontrolę nad każdym kodem JavaScript przekazywanym do komponentu WebView. Unikaj zezwalania na wykonywanie dowolnego kodu JavaScript w widoku WebView. Wskazówki znajdziesz w następnej sekcji.

Upewnij się, że w komponencie WebView ładowane są tylko oczekiwane treści

Jeśli używasz metod takich jak shouldOverrideUrlLoading(), loadUrl() lub evaluateJavascript(),, upewnij się, że wszystkie przekazywane do nich adresy URL są sprawdzane. Jak wspomnieliśmy wcześniej, każdy kod JavaScript przekazywany do WebView powinien pochodzić tylko z oczekiwanych domen, dlatego ważne jest, aby sprawdzić, co jest wczytywane.

Dobre rady i przykłady znajdziesz w dokumentacji OWASP dotyczącej weryfikacji danych wejściowych oraz na tej liście kontrolnej bezpieczeństwa Androida w przypadku komponentów WebView.

Ustawianie bezpiecznych ustawień dostępu do plików w WebView

Upewnij się, że pliki nie są dostępne, aby zapobiec wykonywaniu dowolnego kodu JavaScript w komponentach WebView.Podczas zabezpieczania dostępu do plików należy wziąć pod uwagę te WebSettings:

  • wyłączyć dostęp do plików, Domyślnie w przypadku interfejsu API na poziomie 29 i niższym wartość setAllowFileAccess jest ustawiona na True, co umożliwia dostęp do plików lokalnych. Na poziomie API 30 i wyższym domyślna wartość to False. Aby uniemożliwić dostęp do plików, ustaw wartość setAllowFileAccess na False.
  • wyłączyć dostęp do treści, Domyślne ustawienie setAllowContentAccess to True. Dostęp do adresu URL treści umożliwia komponentowi WebView wczytywanie treści od dostawcy treści zainstalowanego w systemie. Jeśli aplikacja nie wymaga dostępu do treści, ustaw wartość setAllowContentAccess na False, aby zapobiec potencjalnemu nadużyciu w przypadku ataku typu cross-app scripting.

  • kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

Włącz Bezpieczne przeglądanie

Włącz Bezpieczne przeglądanie w AndroidManifest.xml, aby skanować adresy URL przekazywane do WebView pod kątem wyłudzania informacji lub złośliwych domen:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Zasoby