Webview Attacks
Посібник з конфігурацій та безпеки WebView
Огляд вразливостей WebView
Критичним аспектом розробки для Android є правильна обробка WebView. Цей посібник висвітлює ключові конфігурації та практики безпеки для зменшення ризиків, пов'язаних з використанням WebView.
Доступ до файлів у WebView
За замовчуванням WebView дозволяє доступ до файлів. Ця функціональність контролюється методом setAllowFileAccess()
, доступним з рівня API Android 3 (Cupcake 1.5). Додатки з дозволом android.permission.READ_EXTERNAL_STORAGE можуть читати файли зовнішнього сховища за допомогою схеми URL файлу (file://шлях/до/файлу
).
Застарілі функції: Універсальний доступ та доступ до файлів з URL-адрес
Універсальний доступ з URL-адрес файлу: Ця застаріла функція дозволяла міжсайтові запити з URL-адрес файлу, що створювало значний ризик безпеки через можливі атаки XSS. За замовчуванням цей параметр вимкнено (
false
) для додатків, які спрямовані на Android Jelly Bean та новіші версії.Для перевірки цього параметра використовуйте
getAllowUniversalAccessFromFileURLs()
.Для зміни цього параметра використовуйте
setAllowUniversalAccessFromFileURLs(boolean)
.Доступ до файлів з URL-адрес файлу: Ця функція також застаріла і контролювала доступ до вмісту з інших URL-адрес схем файлів. Як і універсальний доступ, за замовчуванням він вимкнено для підвищеної безпеки.
Використовуйте
getAllowFileAccessFromFileURLs()
для перевірки таsetAllowFileAccessFromFileURLs(boolean)
для встановлення.
Безпечне завантаження файлів
Для вимкнення доступу до файлової системи при цьому забезпеченні доступу до ресурсів та активів використовується метод setAllowFileAccess()
. З Android R і вище параметр за замовчуванням встановлено на false
.
Перевірте за допомогою
getAllowFileAccess()
.Увімкніть або вимкніть за допомогою
setAllowFileAccess(boolean)
.
WebViewAssetLoader
Клас WebViewAssetLoader є сучасним підходом до завантаження локальних файлів. Він використовує http(s) URL для доступу до локальних ресурсів та активів, відповідаючи політиці однакових початків, тим самим сприяючи управлінню CORS.
loadUrl
Це загальна функція, яка використовується для завантаження довільних URL-адрес у WebView:
Звісно, потенційному зловмиснику ніколи не слід мати можливість контролювати URL, який буде завантажувати додаток.
Обробка JavaScript та схеми Intent
JavaScript: За замовчуванням вимкнено в WebViews, його можна активувати за допомогою
setJavaScriptEnabled()
. Рекомендується бути обережним, оскільки активація JavaScript без належних заходів безпеки може викликати уразливості безпеки.Схема Intent: WebViews можуть обробляти схему
intent
, що потенційно може призвести до використання уразливостей, якщо необережно керувати. Прикладом уразливості є використання відкритого параметра WebView "support_url", який може бути використаний для виконання атак міжсайтового сценарію (XSS).
Приклад використання експлуатації за допомогою adb:
Javascript міст
Android надає функцію, яка дозволяє JavaScript в WebView викликати функції нативних додатків Android. Це досягається за допомогою методу addJavascriptInterface
, який поєднує JavaScript з нативними функціями Android, які називаються міст JavaScript WebView. Рекомендується бути обережним, оскільки цей метод дозволяє всім сторінкам у WebView отримувати доступ до зареєстрованого об'єкта інтерфейсу JavaScript, що створює ризик безпеки, якщо через ці інтерфейси викриваються чутливі дані.
Для додатків, які спрямовані на версії Android нижче 4.2, потрібен надзвичайний обережність через вразливість, яка дозволяє віддалене виконання коду через шкідливий JavaScript, використовуючи відображення.
Реалізація моста JavaScript
Інтерфейси JavaScript можуть взаємодіяти з нативним кодом, як показано в прикладах, де метод класу відкритий для JavaScript:
JavaScript Bridge увімкнено шляхом додавання інтерфейсу до WebView:
Потенційна експлуатація через JavaScript, наприклад, за допомогою атаки XSS, дозволяє викликати викриті методи Java:
Для зменшення ризиків, обмежте використання моста JavaScript для коду, що постачається з APK, та запобігайте завантаженню JavaScript з віддалених джерел. Для старіших пристроїв встановіть мінімальний рівень API на 17.
Віддалене виконання коду на основі відображення (RCE)
Документований метод дозволяє досягти RCE за допомогою відображення шляхом виконання конкретного навантаження. Однак анотація
@JavascriptInterface
запобігає несанкціонованому доступу до методу, обмежуючи поверхню атаки.
Віддалене налагодження
Віддалене налагодження можливе за допомогою Інструментів розробника Chrome, що дозволяє взаємодію та виконання довільного JavaScript у вмісті WebView.
Увімкнення віддаленого налагодження
Віддалене налагодження можна увімкнути для всіх WebView у додатку, виконавши:
Для умовного ввімкнення налагодження на основі стану відладки додатка:
Витягнення довільних файлів
Демонструє витягнення довільних файлів за допомогою XMLHttpRequest:
Посилання
Last updated