Webview Attacks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Критичним аспектом розробки для Android є правильне оброблення WebViews. Цей посібник підкреслює ключові конфігурації та практики безпеки для зменшення ризиків, пов'язаних з використанням WebView.
За замовчуванням WebViews дозволяють доступ до файлів. Ця функціональність контролюється методом setAllowFileAccess()
, доступним з рівня API Android 3 (Cupcake 1.5). Додатки з дозволом android.permission.READ_EXTERNAL_STORAGE можуть читати файли з зовнішнього сховища, використовуючи схему URL файлу (file://path/to/file
).
Universal Access From File URLs: Ця застаріла функція дозволяла крос-доменні запити з URL файлів, що становило значний ризик безпеки через потенційні XSS-атаки. Налаштування за замовчуванням вимкнено (false
) для додатків, що націлені на Android Jelly Bean та новіші версії.
Щоб перевірити це налаштування, використовуйте getAllowUniversalAccessFromFileURLs()
.
Щоб змінити це налаштування, використовуйте setAllowUniversalAccessFromFileURLs(boolean)
.
File Access From File URLs: Ця функція, також застаріла, контролювала доступ до вмісту з інших URL схем файлів. Як і універсальний доступ, її значення за замовчуванням вимкнено для підвищення безпеки.
Використовуйте getAllowFileAccessFromFileURLs()
для перевірки та setAllowFileAccessFromFileURLs(boolean)
для налаштування.
Для вимкнення доступу до файлової системи, одночасно отримуючи доступ до активів і ресурсів, використовується метод setAllowFileAccess()
. З Android R і вище, налаштування за замовчуванням - false
.
Перевірте за допомогою getAllowFileAccess()
.
Увімкніть або вимкніть за допомогою setAllowFileAccess(boolean)
.
Клас WebViewAssetLoader є сучасним підходом для завантаження локальних файлів. Він використовує http(s) URL для доступу до локальних активів і ресурсів, що відповідає політиці того ж походження, тим самим полегшуючи управління CORS.
Це загальна функція, що використовується для завантаження довільних URL в webview:
Звичайно, потенційний атакуючий ніколи не повинен мати можливість контролювати URL, який завантажує додаток.
JavaScript: За замовчуванням вимкнений у WebViews, його можна увімкнути за допомогою setJavaScriptEnabled()
. Рекомендується бути обережним, оскільки увімкнення JavaScript без належних запобіжних заходів може призвести до вразливостей безпеки.
Intent Scheme: WebViews можуть обробляти схему intent
, що потенційно може призвести до експлуатації, якщо не управляти нею обережно. Прикладом вразливості є відкритий параметр WebView "support_url", який можна експлуатувати для виконання атак між сайтами (XSS).
Приклад експлуатації за допомогою adb:
Функція, що надається Android, дозволяє JavaScript у WebView викликати функції рідного Android додатку. Це досягається за допомогою методу addJavascriptInterface
, який інтегрує JavaScript з рідними функціональностями Android, що називається WebView JavaScript bridge. Рекомендується бути обережним, оскільки цей метод дозволяє всім сторінкам у WebView отримувати доступ до зареєстрованого об'єкта JavaScript Interface, що становить ризик безпеки, якщо чутлива інформація буде розкрита через ці інтерфейси.
Вимагається крайня обережність для додатків, що націлені на версії Android нижче 4.2 через вразливість, що дозволяє віддалене виконання коду через шкідливий JavaScript, експлуатуючи рефлексію.
JavaScript інтерфейси можуть взаємодіяти з рідним кодом, як показано в прикладах, де метод класу відкритий для JavaScript:
JavaScript Bridge активується шляхом додавання інтерфейсу до WebView:
Потенційна експлуатація через JavaScript, наприклад, через атаку XSS, дозволяє викликати відкриті Java методи:
Щоб зменшити ризики, обмежте використання JavaScript bridge кодом, що постачається з APK, і забороніть завантаження JavaScript з віддалених джерел. Для старіших пристроїв встановіть мінімальний рівень API на 17.
Документований метод дозволяє досягти RCE через рефлексію, виконуючи специфічний payload. Однак анотація @JavascriptInterface
запобігає несанкціонованому доступу до методів, обмежуючи площу атаки.
Віддалене налагодження можливе за допомогою Chrome Developer Tools, що дозволяє взаємодіяти та виконувати довільний JavaScript у вмісті WebView.
Віддалене налагодження можна увімкнути для всіх WebView в додатку шляхом:
Щоб умовно увімкнути налагодження на основі стану налагоджуваності програми:
Демонструє екстракцію довільних файлів за допомогою XMLHttpRequest:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)