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

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

Обзор

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

Межприложенные сценарии широко связаны с выполнением вредоносного кода в контексте приложения-жертвы. Для целей данной документации тема будет ограничена внедрением вредоносного кода JavaScript в уязвимый WebView.

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

Влияние

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

Смягчения

Отключить JavaScript

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

Котлин

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

// Disable JavaScript
webSettings.javaScriptEnabled = false

Ява

// 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 для WebViews, чтобы получить полезные советы и примеры.

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

Обеспечение доступности файлов может предотвратить выполнение произвольного JavaScript в WebViews. При обеспечении доступа к файлам следует учитывать следующие 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" />

Ресурсы