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
).
Універсальний доступ з URL файлів: Ця застаріла функція дозволяла крос-доменні запити з URL файлів, що становило значний ризик безпеки через потенційні атаки XSS. Налаштування за замовчуванням вимкнено (false
) для додатків, що націлені на Android Jelly Bean та новіші версії.
Щоб перевірити це налаштування, використовуйте getAllowUniversalAccessFromFileURLs()
.
Щоб змінити це налаштування, використовуйте setAllowUniversalAccessFromFileURLs(boolean)
.
Доступ до файлів з URL файлів: Ця функція, також застаріла, контролювала доступ до вмісту з інших 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)