Перейти к содержанию

Данные из сторонних источников могут привести к RCE

Класс

| RCEViaUserInputIssue

Модуль

| Santaint (Marivanna)

Описание

В операционной системе Android приложение может получать данные из различных источников: пользовательский ввод, чтение бэкапа, Intents, данные других приложений и т.п.

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

Если команда или часть команды, пришедшие из Intent, в ходе работы приложения попадают на исполнение с помощью команды

Runtime.getRuntime().exec("command")
то, манипулируя такими данными, можно запустить команду от имени приложения.

Проблема

Данные из сторонних источников могут привести к запуску произвольного кода.

Пример

Device Owner — это функция, поддерживаемая ОС Android начиная с версии 5.0. Она позволяет создать приложение, которое сможет полностью управлять устройством, например, для отслеживания и/или установки приложений.

Если на вход, из внешних источников данных, указанных выше, в команду

Runtime.getRuntime().exec("command")
в качестве command придёт следующая команда: "adb shell dpm set-device-owner com.example.msgshareapp/.AdminReceiver", то указанное com.example.msgshareapp приложение будет являться Device Owner.

Рекомендации

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

Ссылки

  1. Описание Runtime.getRuntime()
К началу