Данные из сторонних источников могут привести к RCE
Класс
| RCEViaUserInputIssue
Модуль
| Santaint (Marivanna)
Описание
В операционной системе Android приложение может получать данные из различных источников: пользовательский ввод, чтение бэкапа, Intents, данные других приложений и т.п.
В отдельных случаях эти данные могут быть использованы для запуска команд: записи файлов или другими подобными способами, приводящими к исполнению кода, как непосредственно, так и косвенно (перезапись исполняемого файла).
Если команда или часть команды, пришедшие из Intent, в ходе работы приложения попадают на исполнение с помощью команды
то, манипулируя такими данными, можно запустить команду от имени приложения.Проблема
Данные из сторонних источников могут привести к запуску произвольного кода.
Пример
Device Owner — это функция, поддерживаемая ОС Android начиная с версии 5.0. Она позволяет создать приложение, которое сможет полностью управлять устройством, например, для отслеживания и/или установки приложений.
Если на вход, из внешних источников данных, указанных выше, в команду
в качествеcommand
придёт следующая команда: "adb shell dpm set-device-owner com.example.msgshareapp/.AdminReceiver"
, то указанное com.example.msgshareapp приложение будет являться Device Owner.
Рекомендации
Необходимо санитизировать и валидировать данные, получаемые в приложении из внешних источников, учитывая, что данные может послать злоумышленник или зловредное приложение. Лучшим решением является использование белого списка, т.е. следует передавать не саму команду или ее часть, а ее индекс или название, с тем чтобы впоследствии внутри приложения принимать решение на запуск той или иной команды.