App-übergreifende Skripts

OWASP-Kategorie:MASVS-CODE: Code Quality

Übersicht

WebView ist eine eingebettete Browserkomponente in Android-Anwendungen, die die Anzeige von Webinhalten in einer App ermöglicht. Sie rendert HTML, CSS und JavaScript in der Benutzeroberfläche der App.

Cross-App-Scripting wird im Allgemeinen mit der Ausführung von schädlichem Code im Kontext einer Opferanwendung in Verbindung gebracht. In dieser Dokumentation wird das Thema speziell auf das Einschleusen von schädlichem JavaScript-Code in eine anfällige WebView beschränkt.

Wenn eine App schädliches JavaScript in einem WebView ohne ausreichende Validierung oder Bereinigung akzeptiert, ist die Anwendung für Cross-App-Scripting anfällig.

Auswirkungen

Cross-App-Scripting-Schwachstellen können ausgenutzt werden, wenn von Angreifern kontrollierte JavaScript-Inhalte an die WebView der anfälligen App übergeben werden, ohne validiert oder bereinigt zu werden. Dadurch wird der vom Angreifer bereitgestellte JavaScript-Code im Kontext der WebView der Opferanwendung ausgeführt. Der schädliche JavaScript-Code kann dann dieselben Berechtigungen wie die App des Opfers verwenden, was zum Diebstahl sensibler Nutzerdaten und zur Kontoübernahme führen kann.

Gegenmaßnahmen

JavaScript deaktivieren

Wenn Ihre Anwendung kein JavaScript erfordert, können Sie es deaktivieren, um zu verhindern, dass es zu einer Bedrohung wird:

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);

Wenn Ihre Anwendung JavaScript erfordert, müssen Sie sicherstellen, dass Sie das gesamte an WebView übergebene JavaScript besitzen oder kontrollieren. Vermeiden Sie es, dass WebView beliebigen JavaScript-Code ausführt. Weitere Informationen finden Sie im nächsten Abschnitt.

Sorgen Sie dafür, dass nur erwartete Inhalte in WebView geladen werden.

Wenn Sie Methoden wie shouldOverrideUrlLoading(), loadUrl() oder evaluateJavascript(), verwenden, müssen Sie alle an sie übergebenen URLs prüfen. Wie bereits erwähnt, sollte JavaScript, das an die WebView übergeben wird, nur von erwarteten Domains stammen. Daher ist es wichtig, zu prüfen, was geladen wird.

In der OWASP-Dokumentation zur Eingabevalidierung und in dieser Android-Sicherheitscheckliste für WebViews finden Sie gute Ratschläge und Beispiele.

Einstellungen für den sicheren Dateizugriff für WebView festlegen

Wenn Sie dafür sorgen, dass Dateien nicht zugänglich sind, kann verhindert werden, dass beliebiges JavaScript in WebViews ausgeführt wird.Die folgenden WebSettings sollten beim Sichern des Dateizugriffs berücksichtigt werden:

  • Deaktivieren Sie den Dateizugriff. Standardmäßig ist setAllowFileAccess in API‑Level 29 und niedriger auf True festgelegt, wodurch der Zugriff auf lokale Dateien möglich ist. Ab API‑Level 30 ist False die Standardeinstellung. Um sicherzustellen, dass kein Dateizugriff erlaubt ist, setzen Sie setAllowFileAccess explizit auf False.
  • Deaktivieren Sie den Zugriff auf Inhalte. Die Standardeinstellung von setAllowContentAccess ist True. Durch den Zugriff auf die Inhalts-URL kann WebView Inhalte von einem im System installierten Inhaltsanbieter laden. Wenn Ihre App keinen Zugriff auf Inhalte benötigt, legen Sie setAllowContentAccess auf False fest, um potenziellen Missbrauch im Falle eines Cross-App-Scripting-Angriffs zu verhindern.

  • 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);

Safe Browsing aktivieren

Aktivieren Sie Safe Browsing in AndroidManifest.xml, um URLs, die an WebView übergeben werden, auf Phishing- oder schädliche Domains zu prüfen:

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

Ressourcen