Скриптинг между приложениями

Категория OWASP: MASVS-CODE: качество кода

Обзор

WebView – это встроенный компонент браузера в приложениях для Android, который позволяет показывать веб-контент. Он обрабатывает HTML, CSS и JavaScript в пользовательском интерфейсе приложения.

Скриптинг между приложениями обычно связан с выполнением вредоносного кода в контексте приложения-жертвы. В этой статье мы рассмотрим только внедрение вредоносного кода JavaScript в уязвимый компонент WebView.

Если приложение принимает вредоносный код JavaScript в WebView без достаточной проверки или очистки, оно уязвимо для межпрограммного скриптинга.

Влияние

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

Предотвращение атак

Отключить JavaScript

Если вашему приложению не требуется JavaScript, отключите его, чтобы избежать возможных угроз.

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

Если вашему приложению требуется JavaScript, убедитесь, что вы владеете или управляете любым кодом JavaScript, передаваемым в WebView. Не разрешайте WebView выполнять произвольный код JavaScript. Подробные инструкции приведены в следующем разделе.

Убедитесь, что в WebView загружается только ожидаемый контент

При использовании таких методов, как shouldOverrideUrlLoading(), loadUrl() или evaluateJavascript(),, убедитесь, что все передаваемые им URL проверяются. Как говорилось ранее, любой код JavaScript, передаваемый в WebView, должен поступать только из ожидаемых доменов, поэтому важно проверять, что именно загружается.

Рекомендации и примеры можно найти в документации OWASP по проверке входных данных и в контрольном списке по безопасности Android для WebView.

Настройте безопасный доступ к файлам для WebView

Если файлы недоступны, произвольный код JavaScript не может выполняться в WebView.Чтобы защитить доступ к файлам, необходимо учитывать следующие WebSettings:

  • Запретить доступ к файлу. По умолчанию для атрибута setAllowFileAccess задано значение True на уровне API 29 и ниже, что разрешает доступ к локальным файлам. На уровне API 30 и выше по умолчанию используется False. Чтобы запретить доступ к файлам, явно задайте для параметра setAllowFileAccess значение False.
  • Отключите доступ к контенту. Значение по умолчанию для setAllowContentAccess – True. Доступ к URL контента позволяет WebView загружать контент от поставщика контента, установленного в системе. Если приложению не требуется доступ к контенту, задайте для setAllowContentAccess значение False, чтобы предотвратить потенциальное недопустимое использование в случае атаки с межсайтовым скриптингом.

  • kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

Включить безопасный просмотр

Включите Безопасный просмотр в AndroidManifest.xml, чтобы сканировать URL, переданные в WebView, на наличие фишинговых или вредоносных доменов.

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

Ресурсы