Категория OWASP: MASVS-PLATFORM: взаимодействие с платформой.
Обзор
Риски безопасности, связанные со ссылками на контент, обусловлены их основной функцией – обеспечивать удобную навигацию и взаимодействие в мобильных приложениях. Уязвимости ссылок на контент возникают из-за недостатков в реализации или обработке таких ссылок. Злоумышленники могут использовать эти недостатки, чтобы получить доступ к привилегированным функциям или данным, что может привести к утечке данных, нарушению конфиденциальности и несанкционированным действиям. Злоумышленники могут использовать эти уязвимости, применяя различные методы, такие как перехват ссылок на контент и атаки на проверку данных.
Влияние
Отсутствие надлежащего механизма проверки ссылок на контент или их небезопасное использование может помочь вредоносным пользователям в проведении атак, таких как обход проверки хоста, скриптинг между приложениями и удаленное выполнение кода в контексте разрешений уязвимого приложения. В зависимости от характера приложения это может привести к несанкционированному доступу к конфиденциальным данным или функциям.
Предотвращение атак
Как предотвратить перехват ссылок на контент
В Android несколько приложений могут регистрировать фильтры интентов для одного и того же URI ссылки на контент. Чтобы вредоносные приложения не перехватывали ссылки на контент, предназначенные для вашего приложения, добавьте атрибут android:autoVerify в элемент intent-filter в файле AndroidManifest. Это позволяет пользователям выбирать предпочтительное приложение для обработки ссылок на контент, обеспечивая предполагаемую работу и предотвращая их автоматическую интерпретацию вредоносными приложениями.
В Android 12 была введена более строгая обработка веб-намерений для повышения безопасности. Теперь приложения должны быть подтверждены для обработки ссылок из определенных доменов. Это можно сделать с помощью ссылок на приложения для Android или выбора пользователя в системных настройках. Это не позволяет приложениям перехватывать ссылки, которые они не должны обрабатывать.
Чтобы включить проверку обработки ссылок для приложения, добавьте фильтры intent в следующем формате (пример взят из документации по проверке ссылок на приложения для Android):
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Реализуйте надежную проверку данных
Ссылки на контент могут включать дополнительные параметры, которые передаются целевому намерению, например для выполнения дальнейших действий. Основой безопасной обработки ссылок на контент является строгая проверка данных. Разработчики должны тщательно проверять и очищать все входящие данные из ссылок на контент, чтобы предотвратить внедрение вредоносного кода или значений в легитимное приложение. Для этого можно проверять значение любого параметра ссылки на контент по заранее заданному белому списку ожидаемых значений.
Прежде чем показывать конфиденциальную информацию, приложения должны проверять другие внутренние состояния, например состояние аутентификации или авторизации. Например, это может быть награда за прохождение уровня в игре. В этом случае стоит проверить, выполнено ли условие завершения уровня, и если нет, перенаправить пользователя на главный экран.
Ресурсы
- Как проверять ссылки на приложения для Android
- Работа со ссылками на приложения для Android
- Разрешение веб-намерений
- Взлом аккаунта путем перехвата ссылки для входа в приложение Arrive
- Эксплуатация уязвимостей в ссылках на контент и компонентах WebView, часть I
- Эксплуатация уязвимостей в ссылках на контент и компонентах WebView. Часть 2
- Недавнее предложение по устранению проблемы со ссылкой на контент в Jetpack Navigation