Webview Attacks

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Посібник з конфігурацій та безпеки 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:

webview.loadUrl("<url here>")

Звісно, потенційному зловмиснику ніколи не слід мати можливість контролювати URL, який буде завантажувати додаток.

Обробка JavaScript та схеми Intent

  • JavaScript: За замовчуванням вимкнено в WebViews, його можна активувати за допомогою setJavaScriptEnabled(). Рекомендується бути обережним, оскільки активація JavaScript без належних заходів безпеки може викликати уразливості безпеки.

  • Схема Intent: WebViews можуть обробляти схему intent, що потенційно може призвести до використання уразливостей, якщо необережно керувати. Прикладом уразливості є використання відкритого параметра WebView "support_url", який може бути використаний для виконання атак міжсайтового сценарію (XSS).

Приклад використання експлуатації за допомогою adb:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

Javascript міст

Android надає функцію, яка дозволяє JavaScript в WebView викликати функції нативних додатків Android. Це досягається за допомогою методу addJavascriptInterface, який поєднує JavaScript з нативними функціями Android, які називаються міст JavaScript WebView. Рекомендується бути обережним, оскільки цей метод дозволяє всім сторінкам у WebView отримувати доступ до зареєстрованого об'єкта інтерфейсу JavaScript, що створює ризик безпеки, якщо через ці інтерфейси викриваються чутливі дані.

  • Для додатків, які спрямовані на версії Android нижче 4.2, потрібен надзвичайний обережність через вразливість, яка дозволяє віддалене виконання коду через шкідливий JavaScript, використовуючи відображення.

Реалізація моста JavaScript

  • Інтерфейси JavaScript можуть взаємодіяти з нативним кодом, як показано в прикладах, де метод класу відкритий для JavaScript:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge увімкнено шляхом додавання інтерфейсу до WebView:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Потенційна експлуатація через JavaScript, наприклад, за допомогою атаки XSS, дозволяє викликати викриті методи Java:

<script>alert(javascriptBridge.getSecret());</script>
  • Для зменшення ризиків, обмежте використання моста JavaScript для коду, що постачається з APK, та запобігайте завантаженню JavaScript з віддалених джерел. Для старіших пристроїв встановіть мінімальний рівень API на 17.

Віддалене виконання коду на основі відображення (RCE)

  • Документований метод дозволяє досягти RCE за допомогою відображення шляхом виконання конкретного навантаження. Однак анотація @JavascriptInterface запобігає несанкціонованому доступу до методу, обмежуючи поверхню атаки.

Віддалене налагодження

  • Віддалене налагодження можливе за допомогою Інструментів розробника Chrome, що дозволяє взаємодію та виконання довільного JavaScript у вмісті WebView.

Увімкнення віддаленого налагодження

  • Віддалене налагодження можна увімкнути для всіх WebView у додатку, виконавши:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Для умовного ввімкнення налагодження на основі стану відладки додатка:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Витягнення довільних файлів

  • Демонструє витягнення довільних файлів за допомогою XMLHttpRequest:

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);

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated