Гостевая статья Уязвимости Android WebView

WebViews используются в приложениях для Android для загрузки содержимого и HTML-страниц в приложении. Благодаря этой функциональности реализация WebView должна быть безопасной, чтобы не вводить приложение с большим риском. Цель этой статьи - изучить вещи, которые сделают WebView менее безопасным, и, следовательно, само приложение. Как разработчики, так и тестеры на проникновение могут использовать эту статью в качестве справочного материала при проведении мобильного теста на проникновение.

Загрузка открытого текста
Если WebView позволяет загружать открытый текст из Интернета, то он будет открыт для различных форм атак, таких как MiTM.

Код:
myWebView.loadUrl("http://www.droidsec.org/tests/addjsif/");

Обработка ошибок SSL
Приведенный ниже код дает указание клиенту WebView продолжить работу при возникновении ошибки SSL. Это означает, что приложение уязвимо для атак MiTM, поскольку оно может позволить злоумышленнику прочитать или изменить содержимое, отображаемое для пользователя, поскольку любой сертификат будет принят приложением.

Код:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error)
{
handler.proceed();
}

JavaScript
Разрешение выполнения содержимого JavaScript в приложении через WebView может дать злоумышленнику возможность выполнить произвольный код JavaScript для выполнения вредоносных действий. Этот параметр позволяет WebView выполнять код JavaScript.

Код:
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

Функция JavascriptInterface позволяет связывать между кодом JavaScript и собственным кодом Java. Это означает, что код JavaScript может получать доступ и вводить объекты Java и код Java, вызываемый JavaScript. В зависимости от разрешений приложения это может позволить злоумышленнику взаимодействовать с функциональными возможностями устройства (чтение SMS, запись с микрофона и т. Д.), Подвергая риску безопасность приложения и самого устройства.

Код:
WebView webView = new WebView(this);
setContentView(webView);
...
class JsObject {
private String sensitiveInformation;
 
...
public String toString() { return sensitiveInformation; }
 
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("http://www.example.com");

Доступ к локальным ресурсам
Если WebView разрешает доступ к контенту из других приложений, существующих на том же устройстве, то злоумышленник может создать вредоносный html-файл, который можно внедрить в целевое приложение через схему file: use . Для того, чтобы этот вредоносный файл был загружен, он должен иметь права на чтение для всего мира.

Код:
public class MyBrowser extends Activity {
@override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 
WebView webView = (WebView) findViewById(R.id.webview);
 
// turn on javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
 
String turl = getIntent().getStringExtra("URL");
webView.loadUrl(turl);
}
}

Резюме
WebView благодаря своей функциональности может подвергать приложение и устройство большим угрозам безопасности. Мобильные тестеры проникновения должны исследовать следующие методы и их статус при проведении и оценку андроида, чтобы идентифицировать связанные риски.

  • setAllowContent Access
  • setAllowFileAccess
  • setAllowFileAccessFromFileURLs
  • setAllowUniversalAccessFromFileURLs
  • setJavaScriptEnabled

Перевод:
 
  • Нравится
Реакции: cr1pt0n
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!