Skrypty międzyaplikacjami

Kategoria OWASP: MASVS-CODE: jakość kodu

Omówienie

WebView to osadzony komponent przeglądarki w aplikacjach na Androida, który ułatwia wyświetlanie treści internetowych w aplikacji. Renderuje kod HTML, CSS JavaScript w interfejsie aplikacji.

Cross-App Scripting jest powiązany z wykonywaniem złośliwego kodu w kontekście aplikacji poszkodowanej. Na potrzeby tej dokumentacji podmiot będzie ograniczony do wstrzykiwania złośliwych kod JavaScript w komponencie WebView podatnym na atak.

Gdy aplikacja akceptuje złośliwy kod JavaScript w komponencie WebView bez wystarczających lub walidacji lub oczyszczania, aplikacja jest podatna na ataki Skrypty.

Wpływ

Luki w zabezpieczeniach cross-app scripting na potrzeby ataku kontrolowanego przez atakującego Treść JavaScript jest przekazywana do WebView aplikacji z lukami w zabezpieczeniach bez zweryfikowane lub oczyszczone. W rezultacie kod JavaScriptu dostarczony przez osobę atakującą jest wykonywany w kontekście WebView aplikacji ofiary. złośliwy kod JavaScript może korzystać z tych samych uprawnień, co aplikacji, której używa ofiara, które może doprowadzić do kradzieży poufnych danych użytkownika i przejęcia konta.

Łagodzenie

Wyłącz JavaScript

Jeśli Twoja aplikacja nie wymaga JavaScriptu, wyłączenie tego języka sprawi, że nie będzie on stanowił zagrożenia:

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 kodu JavaScript przekazywanego do WebView lub masz nad nim kontrolę. Nie zezwalaj WebView na uruchamianie dowolnych JavaScript, wskazówki znajdziesz w następnej sekcji.

Sprawdź, czy do komponentu WebView wczytywana jest tylko oczekiwana treść

Jeśli używasz metod takich jak shouldOverrideUrlLoading(), loadUrl() lub evaluateJavascript(),, sprawdź, czy wszystkie przekazywane im adresy URL są sprawdzane. Jak wspomnieliśmy wcześniej, kod JavaScript przekazywany do WebView powinien tylko pochodzące z oczekiwanych domen, więc ważne jest, aby sprawdzić, co jest wczytywane.

Zapoznaj się z dokumentacją weryfikacji danych wejściowych OWASP oraz tym Androidem na liście kontrolnejkomponentów WebView zawierające przydatne wskazówki i przykłady.

Konfigurowanie bezpiecznych ustawień dostępu do plików w komponencie WebView

Upewnij się, że nie masz dostępu do plików, aby uniemożliwić dowolnym skryptom JavaScript jest wykonywana w komponentach WebView. Powinien to być tag WebSettings. brane pod uwagę podczas zabezpieczania dostępu do plików:

  • Wyłącz dostęp do plików. Domyślnie parametr setAllowFileAccess ma wartość True w przypadku poziomu API 29 i niższych, co umożliwia dostęp do plików lokalnych. Na poziomie API 30 i wyższym domyślnie jest to False. Aby uniemożliwić dostęp do plików, jednoznacznie ustaw setAllowFileAccess na False
  • Wyłącz dostęp do treści. Domyślne ustawienie parametru setAllowContentAccess to True. Dostęp do adresu URL treści pozwala komponentowi WebView na ładowanie treści z treści. dostawcy zainstalowanego w systemie. Jeśli aplikacja nie wymaga dostępu do treści, ustaw setAllowContentAccess na False, aby zapobiec potencjalnemu niewłaściwemu użyciu w przypadku ataki typu cross-app scripting.

  • kotlinkotlin 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 domenie AndroidManifest.xml, aby skanować adresy URL przekazywane do WebView do wykrywania prób wyłudzania informacji i złośliwych domen.

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

Materiały