Как устранять уязвимости перед межпрограммным скриптингом

Эта информация предназначена для разработчиков, чьи приложения уязвимы перед межпрограммным скриптингом.

Суть проблемы

В одном или нескольких ваших приложениях есть компонент WebView, уязвимый к межпрограммному скриптингу. Вредоносные приложения могут воспользоваться этим и получить доступ к пользовательским файлам cookie или другим данным.Вам необходимо принять меры до даты, указанной в Play Console.По истечении срока, указанного в Play Console, все приложения с уязвимостями могут быть удалены из Google Play.

Необходимые действия

  1. Чтобы узнать, какие приложения уязвимы и в какой срок нужно решить проблему, войдите в Play Console и откройте раздел "Оповещения".
  2. Устраните уязвимость, внеся изменения в затронутые ей приложения.
  3. Опубликуйте обновленные версии приложений.

В этот период и до рассмотрения заявки статус нового приложения или обновления изменится на Готовится к публикации. Если приложение не было обновлено в соответствии с требованиями, предупреждение не исчезнет.

Сведения об уязвимости

Вредоносные приложения могут атаковать компоненты WebView, которые активируют JavaScript и загружают данные из ненадежных объектов Intent, и инициировать небезопасное выполнение кода JavaScript. Вы можете устранить уязвимость одним из приведенных ниже способов.

Вариант 1. Исключите экспорт уязвимых объектов Activity

Найдите объекты Activity с уязвимыми компонентами WebView. Если этим объектам Activity не нужно получать объекты Intent от других приложений, вы можете указать для них значение android:exported=false в файле манифеста. После этого вредоносные приложения не смогут отправлять команды компонентам WebView в этих объектах Activity.

Вариант 2. Защитите компоненты WebView в экспортированных объектах Activity

Если для объекта Activity с уязвимым компонентом WebView необходим экспорт, внесите следующие изменения:

  1. Обезопасьте себя при использовании метода evaluateJavascript и loadUrl

    Убедитесь, что при вызове evaluateJavascript используются только надежные параметры. Присутствие небезопасных данных от ненадежных объектов Intent при выполнении метода evaluateJavascript позволяет злоумышленникам запускать вредоносные скрипты в уязвимых компонентах WebView. Аналогично выполнение метода loadUrl с небезопасными данными, содержащими javascript: scheme URLs, позволяет злоумышленникам запускать вредоносные скрипты.

  2. Исключите небезопасную загрузку файлов

    Запретите уязвимым компонентам WebView загружать базу данных файлов cookie. Компоненты WebView, которые загружают небезопасные URL, начинающиеся с file:// (file:// URLs), от ненадежных объектов Intent, могут быть атакованы. Вот как выглядит атака: вредоносная веб-страница добавляет в базу данных файлов cookie теги <script>, после чего измененный файл базы данных может быть загружен, когда вредоносное приложение отправляет объект Intent с URL, начинающимся с file:// и указывающим на базу данных файлов cookie компонента WebView. Кроме того, сам вредоносный сайт может перенаправлять компонент WebView на URL файла. Будет запущен вредоносный тег <script>, который хранится в базе данных файлов cookie, что может привести к утечке информации о сеансе.

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

    1. Отключить доступ ко всем файлам.
    2. Разрешать компоненту WebView загружать только URL, начинающиеся с file://, которые указывают на безопасные файлы. Помните, что злоумышленники для маскировки могут использовать файлы symbolic link. Чтобы предотвратить подобную атаку, проверяйте canonical path всех ненадежных URL, начинающихся с file://, перед загрузкой (а не просто путь URL).
    3. Если вы хотите разрешить загрузку URL, начинающихся с http:// и file://, внедрите проверку URL file://, используя методы shouldOverrideUrlLoading и shouldInterceptRequest в компоненте WebViewClient. Благодаря этому все URL, которые загружаются в компонент WebView, будут проверяться, а не только те, которые предоставляются при вызове функции loadUrl().

Мы всегда рады помочь
Если у вас есть вопросы об уязвимости, задайте их на Stack Overflow, используя тег android-security. Чтобы получить более подробные разъяснения, свяжитесь с командой поддержки для разработчиков.

Эта информация оказалась полезной?

Как можно улучшить эту статью?
false
Главное меню
806231108049468613
true
Поиск по Справочному центру
true
true
true
true
true
5016068
false
false
false