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

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

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

В одном или нескольких ваших приложениях есть компонент 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
Главное меню
1818659503809803948
true
Поиск по Справочному центру
true
true
true
true
true
5016068
false
false