# 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 %} ## Guide on WebView Configurations and Security ### Overview of WebView Vulnerabilities Критичним аспектом розробки для Android є правильне оброблення WebViews. Цей посібник підкреслює ключові конфігурації та практики безпеки для зменшення ризиків, пов'язаних з використанням WebView. ![WebView Example](<../../.gitbook/assets/image (1190).png>) ### **File Access in WebViews** За замовчуванням WebViews дозволяють доступ до файлів. Ця функціональність контролюється методом `setAllowFileAccess()`, доступним з рівня API Android 3 (Cupcake 1.5). Додатки з дозволом **android.permission.READ\_EXTERNAL\_STORAGE** можуть читати файли з зовнішнього сховища, використовуючи схему URL файлу (`file://path/to/file`). #### **Deprecated Features: Universal and File Access From URLs** * **Universal Access From File URLs**: Ця застаріла функція дозволяла крос-доменні запити з URL файлів, що становило значний ризик безпеки через потенційні XSS-атаки. Налаштування за замовчуванням вимкнено (`false`) для додатків, що націлені на Android Jelly Bean та новіші версії. * Щоб перевірити це налаштування, використовуйте `getAllowUniversalAccessFromFileURLs()`. * Щоб змінити це налаштування, використовуйте `setAllowUniversalAccessFromFileURLs(boolean)`. * **File Access From File URLs**: Ця функція, також застаріла, контролювала доступ до вмісту з інших URL схем файлів. Як і універсальний доступ, її значення за замовчуванням вимкнено для підвищення безпеки. * Використовуйте `getAllowFileAccessFromFileURLs()` для перевірки та `setAllowFileAccessFromFileURLs(boolean)` для налаштування. #### **Secure File Loading** Для вимкнення доступу до файлової системи, одночасно отримуючи доступ до активів і ресурсів, використовується метод `setAllowFileAccess()`. З Android R і вище, налаштування за замовчуванням - `false`. * Перевірте за допомогою `getAllowFileAccess()`. * Увімкніть або вимкніть за допомогою `setAllowFileAccess(boolean)`. #### **WebViewAssetLoader** Клас **WebViewAssetLoader** є сучасним підходом для завантаження локальних файлів. Він використовує http(s) URL для доступу до локальних активів і ресурсів, що відповідає політиці того ж походження, тим самим полегшуючи управління CORS. ### loadUrl Це загальна функція, що використовується для завантаження довільних URL в webview: ```java webview.loadUrl("") ``` Звичайно, потенційний атакуючий ніколи не повинен мати можливість **контролювати URL**, який завантажує додаток. ### **Обробка JavaScript та Intent Scheme** * **JavaScript**: За замовчуванням вимкнений у WebViews, його можна увімкнути за допомогою `setJavaScriptEnabled()`. Рекомендується бути обережним, оскільки увімкнення JavaScript без належних запобіжних заходів може призвести до вразливостей безпеки. * **Intent Scheme**: WebViews можуть обробляти схему `intent`, що потенційно може призвести до експлуатації, якщо не управляти нею обережно. Прикладом вразливості є відкритий параметр WebView "support\_url", який можна експлуатувати для виконання атак між сайтами (XSS). ![Vulnerable WebView](<../../.gitbook/assets/image (1191).png>) Приклад експлуатації за допомогою adb: {% code overflow="wrap" %} ```bash adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html" ``` {% endcode %} ### Javascript Bridge Функція, що надається Android, дозволяє **JavaScript** у WebView викликати **функції рідного Android додатку**. Це досягається за допомогою методу `addJavascriptInterface`, який інтегрує JavaScript з рідними функціональностями Android, що називається _WebView JavaScript bridge_. Рекомендується бути обережним, оскільки цей метод дозволяє всім сторінкам у WebView отримувати доступ до зареєстрованого об'єкта JavaScript Interface, що становить ризик безпеки, якщо чутлива інформація буде розкрита через ці інтерфейси. * **Вимагається крайня обережність** для додатків, що націлені на версії Android нижче 4.2 через вразливість, що дозволяє віддалене виконання коду через шкідливий JavaScript, експлуатуючи рефлексію. #### Implementing a JavaScript Bridge * **JavaScript інтерфейси** можуть взаємодіяти з рідним кодом, як показано в прикладах, де метод класу відкритий для JavaScript: ```javascript @JavascriptInterface public String getSecret() { return "SuperSecretPassword"; }; ``` * JavaScript Bridge активується шляхом додавання інтерфейсу до WebView: ```javascript webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge"); webView.reload(); ``` * Потенційна експлуатація через JavaScript, наприклад, через атаку XSS, дозволяє викликати відкриті Java методи: ```html ``` * Щоб зменшити ризики, **обмежте використання JavaScript bridge** кодом, що постачається з APK, і забороніть завантаження JavaScript з віддалених джерел. Для старіших пристроїв встановіть мінімальний рівень API на 17. ### Виконання віддаленого коду на основі рефлексії (RCE) * Документований метод дозволяє досягти RCE через рефлексію, виконуючи специфічний payload. Однак анотація `@JavascriptInterface` запобігає несанкціонованому доступу до методів, обмежуючи площу атаки. ### Віддалене налагодження * **Віддалене налагодження** можливе за допомогою **Chrome Developer Tools**, що дозволяє взаємодіяти та виконувати довільний JavaScript у вмісті WebView. #### Увімкнення віддаленого налагодження * Віддалене налагодження можна увімкнути для всіх WebView в додатку шляхом: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } ``` * Щоб умовно увімкнути налагодження на основі стану налагоджуваності програми: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)) { WebView.setWebContentsDebuggingEnabled(true); } } ``` ## Екстракція довільних файлів * Демонструє екстракцію довільних файлів за допомогою 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); ``` ## Посилання * [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" %} Вивчайте та практикуйте AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Вивчайте та практикуйте GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Підтримати HackTricks * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %}