Возможность открытия произвольного URL в WebView
Критичность: СРЕДНИЙ | |
Способ обнаружения: IAST |
Описание
Уязвимость позволяет открывать произвольные URL в WebView приложения. В зависимости от настроек WebView эта уязвимость может использоваться в различных векторах атак.
Уязвимость присутствует в приложениях, которые используют данные из недоверенного источника для формирования URL, используемого впоследствии при вызове метода WebView.loadUrl
.
Например, уязвимое приложение может использовать такой код:
WebView webView = findViewById(R.id.webview);
setupWebView(webView);
webView.loadUrl(getIntent().getStringExtra("url"));
Или такой:
String url = uri.getQueryParameter("url");
if(url != null) {
webView.loadUrl(url);
}
Рекомендации
-
Не использовать динамически формируемые URL для WebView.
webView.loadUrl("https://url.to.your.contents/");
-
Проводить валидацию URL:
-
Разрешать доступ только к ресурсам компании, т. е. поддерживать white-list URL-адресов и сверять с ним URL, передаваемый в метод
loadUrl
. -
Разрешать доступ только к определённым origin, т. е. проверять схему и домен URL.
List<String> whiteHosts = Arrays.asList("stackoverflow.com", "stackexchange.com", "google.com"); public boolean isValid(String url) { String host = Uri.parse(url).getHost(); if(whiteHosts.contains(host) { return true; } return false; }
-
-
Отключить потенциально опасные настройки доступа к ресурсам приложения из WebView:
WebSettings.setAllowContentAccess(false)
WebSettings.setAllowFileAccess(false)
WebSettings.setAllowFileAccessFromFileURLs(false)
WebSettings.setAllowUniversalAccessFromFileURLs(false)
WebSettings.setGeolocationEnabled(false)