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

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

Обзор

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

Межприкладной скриптинг (Cross-App Scripting) в широком смысле ассоциируется с выполнением вредоносного кода в контексте приложения-жертвы. В рамках данной документации мы ограничимся рассмотрением внедрения вредоносного кода JavaScript в уязвимый WebView.

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

Влияние

Уязвимости межприложенийного скриптинга могут быть использованы, когда контролируемый злоумышленником 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

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. Избегайте выполнения произвольного JavaScript-кода WebView; см. рекомендации в следующем разделе.

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

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

Для получения полезных советов и примеров ознакомьтесь с документацией OWASP по проверке входных данных и этим контрольным списком безопасности Android для WebViews.

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

Обеспечение недоступности файлов может предотвратить выполнение произвольного JavaScript-кода внутри WebView. При обеспечении безопасности доступа к файлам следует учитывать следующие WebSettings :

  • Отключите доступ к файлам. По умолчанию параметр setAllowFileAccess имеет значение True в API уровня 29 и ниже, что разрешает доступ к локальным файлам. В API уровня 30 и выше значение по умолчанию — False . Чтобы гарантировать запрет доступа к файлам, явно установите setAllowFileAccess в False
  • Отключите доступ к контенту. Значение по умолчанию для параметра setAllowContentAccessTrue . Доступ к контенту по 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" />

Ресурсы