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
setAllowFileAccessin API‑Level 29 und niedriger aufTruefestgelegt, wodurch der Zugriff auf lokale Dateien möglich ist. Ab API‑Level 30 istFalsedie Standardeinstellung. Um sicherzustellen, dass kein Dateizugriff erlaubt ist, setzen SiesetAllowFileAccessexplizit aufFalse. Deaktivieren Sie den Zugriff auf Inhalte. Die Standardeinstellung von
setAllowContentAccessistTrue. 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 SiesetAllowContentAccessaufFalsefest, 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 = falsejava
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
- Safe Browsing-Dokumentation
- WebView-Entwicklerreferenz
- WebSettings für WebView – Entwicklerreferenz
- Entwicklerdokumentation zu setAllowFileAccess
- Entwicklerreferenz für setAllowContentAccess