Эта информация предназначена для разработчиков, чьи приложения уязвимы перед межпрограммным скриптингом.
Суть проблемы
В одном или нескольких ваших приложениях есть компонент WebView, уязвимый к межпрограммному скриптингу. Вредоносные приложения могут воспользоваться этим и получить доступ к пользовательским файлам cookie или другим данным.Вам необходимо принять меры до даты, указанной в Play Console.По истечении срока, указанного в Play Console, все приложения с уязвимостями могут быть удалены из Google Play.
Необходимые действия
- Чтобы узнать, какие приложения уязвимы и в какой срок нужно решить проблему, войдите в Play Console и откройте раздел "Оповещения".
- Устраните уязвимость, внеся изменения в затронутые ей приложения.
- Опубликуйте обновленные версии приложений.
В этот период и до рассмотрения заявки статус нового приложения или обновления изменится на Готовится к публикации. Если приложение не было обновлено в соответствии с требованиями, предупреждение не исчезнет.
Сведения об уязвимости
Вредоносные приложения могут атаковать компоненты WebView, которые активируют JavaScript и загружают данные из ненадежных объектов Intent, и инициировать небезопасное выполнение кода JavaScript. Вы можете устранить уязвимость одним из приведенных ниже способов.
Вариант 1. Исключите экспорт уязвимых объектов Activity
Найдите объекты Activity с уязвимыми компонентами WebView. Если этим объектам Activity не нужно получать объекты Intent от других приложений, вы можете указать для них значение android:exported=false в файле манифеста. После этого вредоносные приложения не смогут отправлять команды компонентам WebView в этих объектах Activity.
Вариант 2. Защитите компоненты WebView в экспортированных объектах Activity
Если для объекта Activity с уязвимым компонентом WebView необходим экспорт, внесите следующие изменения:
- Обезопасьте себя при использовании метода evaluateJavascript и loadUrl
Убедитесь, что при вызове evaluateJavascript используются только надежные параметры. Присутствие небезопасных данных от ненадежных объектов Intent при выполнении метода evaluateJavascript позволяет злоумышленникам запускать вредоносные скрипты в уязвимых компонентах WebView. Аналогично выполнение метода loadUrl с небезопасными данными, содержащими javascript: scheme URLs, позволяет злоумышленникам запускать вредоносные скрипты.
- Исключите небезопасную загрузку файлов
Запретите уязвимым компонентам WebView загружать базу данных файлов cookie. Компоненты WebView, которые загружают небезопасные URL, начинающиеся с file:// (file:// URLs), от ненадежных объектов Intent, могут быть атакованы. Вот как выглядит атака: вредоносная веб-страница добавляет в базу данных файлов cookie теги <script>, после чего измененный файл базы данных может быть загружен, когда вредоносное приложение отправляет объект Intent с URL, начинающимся с file:// и указывающим на базу данных файлов cookie компонента WebView. Кроме того, сам вредоносный сайт может перенаправлять компонент WebView на URL файла. Будет запущен вредоносный тег <script>, который хранится в базе данных файлов cookie, что может привести к утечке информации о сеансе.
Запретить уязвимым компонентам WebView загружать базы данных файлов cookie можно тремя способами.
- Отключить доступ ко всем файлам.
- Разрешать компоненту WebView загружать только URL, начинающиеся с file://, которые указывают на безопасные файлы. Помните, что злоумышленники для маскировки могут использовать файлы symbolic link. Чтобы предотвратить подобную атаку, проверяйте canonical path всех ненадежных URL, начинающихся с file://, перед загрузкой (а не просто путь URL).
- Если вы хотите разрешить загрузку URL, начинающихся с http:// и file://, внедрите проверку URL file://, используя методы shouldOverrideUrlLoading и shouldInterceptRequest в компоненте WebViewClient. Благодаря этому все URL, которые загружаются в компонент WebView, будут проверяться, а не только те, которые предоставляются при вызове функции loadUrl().
Мы всегда рады помочь
Если у вас есть вопросы об уязвимости, задайте их на Stack Overflow, используя тег android-security. Чтобы получить более подробные разъяснения, свяжитесь с командой поддержки для разработчиков.