Webview Attacks
Guide on WebView Configurations and Security
Overview of WebView Vulnerabilities
Критичним аспектом розробки для Android є правильне оброблення WebViews. Цей посібник підкреслює ключові конфігурації та практики безпеки для зменшення ризиків, пов'язаних з використанням WebView.
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:
Звичайно, потенційний атакуючий ніколи не повинен мати можливість контролювати URL, який завантажує додаток.
Обробка JavaScript та Intent Scheme
JavaScript: За замовчуванням вимкнений у WebViews, його можна увімкнути за допомогою
setJavaScriptEnabled()
. Рекомендується бути обережним, оскільки увімкнення JavaScript без належних запобіжних заходів може призвести до вразливостей безпеки.Intent Scheme: WebViews можуть обробляти схему
intent
, що потенційно може призвести до експлуатації, якщо не управляти нею обережно. Прикладом вразливості є відкритий параметр WebView "support_url", який можна експлуатувати для виконання атак між сайтами (XSS).
Приклад експлуатації за допомогою adb:
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 Bridge активується шляхом додавання інтерфейсу до WebView:
Потенційна експлуатація через JavaScript, наприклад, через атаку XSS, дозволяє викликати відкриті Java методи:
Щоб зменшити ризики, обмежте використання JavaScript bridge кодом, що постачається з APK, і забороніть завантаження JavaScript з віддалених джерел. Для старіших пристроїв встановіть мінімальний рівень API на 17.
Виконання віддаленого коду на основі рефлексії (RCE)
Документований метод дозволяє досягти RCE через рефлексію, виконуючи специфічний payload. Однак анотація
@JavascriptInterface
запобігає несанкціонованому доступу до методів, обмежуючи площу атаки.
Віддалене налагодження
Віддалене налагодження можливе за допомогою Chrome Developer Tools, що дозволяє взаємодіяти та виконувати довільний JavaScript у вмісті WebView.
Увімкнення віддаленого налагодження
Віддалене налагодження можна увімкнути для всіх WebView в додатку шляхом:
Щоб умовно увімкнути налагодження на основі стану налагоджуваності програми:
Екстракція довільних файлів
Демонструє екстракцію довільних файлів за допомогою XMLHttpRequest:
Посилання
Last updated