Перейти к содержанию

Данные из сторонних источников могут попасть в WebView JS

Класс

| ThirdpartyExecuteWebViewJSIssue

Модуль

| Santaint (Marivanna)

Описание

В операционной системе Android приложение может получать данные из различных источников: пользовательский ввод, чтение бэкапа, Intents, данные других приложений и т.п. В случае, если эти данные загружаются в WebView, в котором включено исполнение Javascript, это может привести к запуску произвольного JS-кода в контексте WebView.

myWebView.run {
    settings.javaScriptEnabled = true
    loadUrl(link)
}

Проблема

Запуск произвольного JS-кода в WebView может приводить к утечке данных приложения и пользователя:

  • Кража cookies.
  • Кража данных пользователя из контекста document.
  • Обман пользователя (фишинг и другие атаки).
  • Запуск нативных методов приложения через JavascriptInterface.

Пример запуска произвольного JS-кода в WebView через deeplink:

Uri data = getIntent().getData();
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setAllowFileAccess(true);
webView.setWebChromeClient(new WebChromeClient());

String queryParameter = data.getQueryParameter("url");
if (queryParameter != null) {
    webView.loadUrl(data.getQueryParameter("url"));
    return;
}

Рекомендации

  • При настройке WebView не следует включать Javascript без необходимости.
  • Если наличие JS требуется для некоторых страниц, можно включать и выключать JS в зависимости от того, является страница доверенной или нет.
  • Проводить санитизацию поступающих данных и не допускать проброса в контекст страницы строк, содержащих символы <, >, &, ', #, :, %, а также слов в любом регистре script, javascript.

Ссылки

  1. xxs filter bypass

  2. Cross-site scripting (XSS) cheat sheet

  3. XSS Filter Evasion and WAF Bypassing Tactics

К началу