Прикрепленные трансляции

Категория OWASP: MASVS-ПЛАТФОРМА: Взаимодействие платформы

Обзор

Приложения Android и система Android могут использовать широковещательные рассылки в качестве системы обмена сообщениями для уведомления других приложений о событиях, которые могут их заинтересовать. Прикрепленные широковещательные рассылки — это особый тип широковещательных сообщений, для которых отправленные объекты намерений остаются в кеше после широковещательных сообщений. завершен. Система может повторно передавать прикрепленные намерения последующим регистрациям получателей. К сожалению, API липких трансляций имеет ряд недостатков, связанных с безопасностью, поэтому он был объявлен устаревшим в Android 5.0 (уровень API 21).

Любой может получить доступ к прикрепленным трансляциям

Прикрепленные трансляции не могут быть ограничены получателями, имеющими определенные разрешения. Поэтому они не подходят для передачи конфиденциальной информации. Может возникнуть соблазн подумать, что указание имени пакета приложения в широковещательном Intent ограничивает набор BroadcastReceivers :

Котлин

val intent = Intent("com.example.NOTIFY").apply {
    setPackage("com.example.myapp")
}
applicationContext.sendBroadcast(intent)

Ява

Intent intent = new Intent("com.example.NOTIFY");
intent.setPackage("com.example.myapp");
getApplicationContext().sendBroadcast(intent);

В этом примере только получатели в пакете com.example.myapp получают намерение при отправке широковещательной рассылки. Однако фильтр имени пакета не применяется, когда намерение повторно транслируется из липкого кэша. При регистрации получателя с помощью метода registerReceiver() все намерения в липком кэше, соответствующие указанному фильтру, повторно передаются получателю независимо от имени пакета, в котором находится получатель.

Любой может отправлять прикрепленные трансляции

Для отправки прикрепленных трансляций приложению требуется только разрешение android.permission.BROADCAST_STICKY , которое предоставляется автоматически при установке приложения. Таким образом, злоумышленники могут отправить любое намерение любому получателю, потенциально получив несанкционированный доступ к другому приложению. Получатели широковещательной рассылки могут ограничить число отправителей теми, кто имеет определенное разрешение. Однако при этом получатель не сможет получать широковещательные сообщения из липкого кеша, поскольку они не отправляются в контексте удостоверения какого-либо приложения и не транслируются с какими-либо разрешениями.

Любой может изменить прикрепленные трансляции

Когда намерение является частью липкой широковещательной рассылки, оно заменяет любой предыдущий экземпляр, имеющий то же действие, данные, тип, идентификатор, класс и категории в липком кэше. Таким образом, злоумышленник может легко перезаписать дополнительные данные в липком намерении из законного приложения, которые затем могут быть повторно переданы другим получателям.

Широковещательные сообщения, отправленные с помощью метода sendStickyOrderedBroadcast() доставляются одному получателю за раз, чтобы позволить получателям с более высоким приоритетом использовать широковещательную рассылку до того, как она будет доставлена ​​получателям с более низким приоритетом. Поскольку каждый получатель выполняет свою работу по очереди, он может передать результат следующему получателю, например, вызвав setResultData() , или прервать трансляцию , предотвращая получение трансляции последующими получателями. Злоумышленник, который может получать закрепленные упорядоченные широковещательные сообщения из законного приложения, может создать высокоприоритетный приемник, чтобы подделать данные результатов широковещательной передачи или полностью прекратить широковещательную передачу.

Влияние

Влияние варьируется в зависимости от того, как используются закрепленные широковещательные сообщения и какие данные передаются получателям широковещательных сообщений. Вообще говоря, использование прикрепленных широковещательных сообщений может привести к раскрытию конфиденциальных данных, подделке данных, несанкционированному доступу для выполнения действий в другом приложении и отказу в обслуживании.

Смягчения

Не следует использовать прикрепленные трансляции. Рекомендуемый шаблон — использовать неприкрепляемые широковещательные рассылки с другим механизмом, например локальной базой данных, для получения текущего значения, когда это необходимо.

Разработчики могут контролировать, кто может получать незакрепленные широковещательные сообщения, используя разрешения или указывая имя пакета приложения в намерении. Более того, если трансляцию не нужно отправлять компонентам за пределами приложения, используйте LiveData , который реализует шаблон наблюдателя .

Более подробную информацию о защите трансляций можно найти на странице обзора трансляций .