# 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 %}