hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md
2024-02-11 01:46:25 +00:00

141 lines
9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ataki na WebView
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Uproszczony przewodnik po konfiguracjach i zabezpieczeniach WebView
### Przegląd podatności WebView
Krytycznym aspektem rozwoju Androida jest prawidłowe obsługiwanie WebViews. Ten przewodnik przedstawia kluczowe konfiguracje i praktyki zabezpieczeń mające na celu zmniejszenie ryzyka związanego z korzystaniem z WebView.
![Przykład WebView](../../.gitbook/assets/image%20(718).png)
### **Dostęp do plików w WebViews**
Domyślnie WebViews pozwalają na dostęp do plików. Funkcjonalność ta jest kontrolowana przez metodę `setAllowFileAccess()`, dostępną od poziomu API Androida 3 (Cupcake 1.5). Aplikacje posiadające uprawnienie **android.permission.READ_EXTERNAL_STORAGE** mogą odczytywać pliki z zewnętrznego nośnika za pomocą schematu URL pliku (`file://ścieżka/do/pliku`).
#### **Przestarzałe funkcje: Uniwersalny dostęp i dostęp do plików z adresów URL**
- **Uniwersalny dostęp z adresów URL plików**: Ta przestarzała funkcja umożliwiała żądania międzydomenowe z adresów URL plików, co stanowiło znaczne ryzyko bezpieczeństwa związanego z potencjalnymi atakami XSS. Domyślne ustawienie to wyłączone (`false`) dla aplikacji docelowych Androida Jelly Bean i nowszych.
- Aby sprawdzić to ustawienie, użyj `getAllowUniversalAccessFromFileURLs()`.
- Aby zmienić to ustawienie, użyj `setAllowUniversalAccessFromFileURLs(boolean)`.
- **Dostęp do plików z adresów URL plików**: Ta również przestarzała funkcja kontrolowała dostęp do zawartości z innych adresów URL schematu pliku. Podobnie jak w przypadku uniwersalnego dostępu, domyślne ustawienie to wyłączone dla zwiększenia bezpieczeństwa.
- Użyj `getAllowFileAccessFromFileURLs()` do sprawdzenia i `setAllowFileAccessFromFileURLs(boolean)` do ustawienia.
#### **Bezpieczne ładowanie plików**
Aby wyłączyć dostęp do systemu plików, jednocześnie umożliwiając dostęp do zasobów i zasobów, używa się metody `setAllowFileAccess()`. Od wersji Androida R i nowszych domyślne ustawienie to `false`.
- Sprawdź za pomocą `getAllowFileAccess()`.
- Włącz lub wyłącz za pomocą `setAllowFileAccess(boolean)`.
#### **WebViewAssetLoader**
Klasa **WebViewAssetLoader** to nowoczesne podejście do ładowania lokalnych plików. Wykorzystuje adresy URL http(s) do dostępu do lokalnych zasobów i zasobów, zgodnie z zasadą Same-Origin, ułatwiając zarządzanie CORS.
### **Obsługa JavaScriptu i schematu Intent**
- **JavaScript**: Domyślnie wyłączony w WebViews, można go włączyć za pomocą `setJavaScriptEnabled()`. Należy zachować ostrożność, ponieważ włączenie JavaScriptu bez odpowiednich zabezpieczeń może wprowadzić podatności na ataki.
- **Schemat Intent**: WebViews mogą obsługiwać schemat `intent`, co potencjalnie prowadzi do wykorzystania, jeśli nie jest odpowiednio zarządzany. Przykładem podatności było wystawienie parametru WebView "support_url", który mógł być wykorzystany do wykonania ataków typu cross-site scripting (XSS).
![Podatna WebView](../../.gitbook/assets/image%20(719).png)
Przykład wykorzystania za pomocą adb:
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Most JavaScript Bridge
Funkcja dostarczana przez Androida umożliwiająca **JavaScriptowi** w WebView wywoływanie funkcji **natywnych aplikacji Androidowych**. Jest to osiągane poprzez wykorzystanie metody `addJavascriptInterface`, która integruje JavaScript z natywnymi funkcjonalnościami Androida, określanymi jako _WebView JavaScript bridge_. Należy zachować ostrożność, ponieważ ta metoda umożliwia wszystkim stroną w WebView dostęp do zarejestrowanego obiektu interfejsu JavaScript, co stanowi ryzyko bezpieczeństwa, jeśli wrażliwe informacje są ujawniane przez te interfejsy.
### Ważne rozważania
- **Wymagana jest skrajna ostrożność** dla aplikacji docelowo działających na wersjach Androida poniżej 4.2 ze względu na podatność umożliwiającą zdalne wykonanie kodu poprzez złośliwy JavaScript, wykorzystujący refleksję.
#### Implementacja JavaScript Bridge
- **Interfejsy JavaScript** mogą współdziałać z kodem natywnym, jak pokazano na przykładach, gdzie metoda klasy jest udostępniana JavaScriptowi:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
- JavaScript Bridge jest włączony poprzez dodanie interfejsu do WebView:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
- Potencjalne wykorzystanie za pomocą JavaScriptu, na przykład poprzez atak XSS, umożliwia wywołanie odsłoniętych metod Javy:
```html
<script>alert(javascriptBridge.getSecret());</script>
```
- Aby zmniejszyć ryzyko, **ogranicz korzystanie z mostka JavaScript** do kodu dostarczonego w pliku APK i zapobiegaj ładowaniu JavaScriptu z odległych źródeł. Dla starszych urządzeń ustaw minimalny poziom API na 17.
### Wykonywanie zdalnego kodu (RCE) oparte na refleksji
- Udokumentowana metoda umożliwia osiągnięcie RCE poprzez refleksję poprzez wykonanie określonego ładunku. Jednak adnotacja `@JavascriptInterface` zapobiega nieautoryzowanemu dostępowi do metod, ograniczając powierzchnię ataku.
### Zdalne debugowanie
- **Zdalne debugowanie** jest możliwe dzięki narzędziom deweloperskim Chrome, umożliwiając interakcję i dowolne wykonywanie kodu JavaScript w treści WebView.
#### Włączanie zdalnego debugowania
- Zdalne debugowanie można włączyć dla wszystkich WebView w aplikacji poprzez:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
- Aby warunkowo włączyć debugowanie na podstawie stanu debugowalności aplikacji:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Wyciek dowolnych plików
- Przedstawia wyciek dowolnych plików za pomocą XMLHttpRequest:
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);
```
## Odwołania
* [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)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>