Категория OWASP: MASVS-STORAGE: Хранилище
Обзор
Неправильно настроенный FileProvider
может непреднамеренно предоставить доступ к файлам и каталогам злоумышленнику. В зависимости от конфигурации злоумышленник может читать или записывать в эти открытые файлы, что, в свою очередь, может привести к краже конфиденциальной информации или, в худшем случае, к выполнению произвольного кода. Например, приложение с установленным в конфигурации <root-path>
может позволить злоумышленнику получить доступ к конфиденциальной информации, хранящейся в базах данных, или перезаписать собственные библиотеки приложения, что приведет к выполнению произвольного кода.
Влияние
Воздействие варьируется в зависимости от конфигурации и содержимого файла, но обычно приводит к утечке данных (при чтении) или перезаписи (при записи) файлов.
Смягчения
Не используйте элемент пути <root-path> в конфигурации.
<root-path>
соответствует корневому каталогу устройства ( /
). Разрешение этого в конфигурации обеспечивает произвольный доступ к файлам и папкам, включая песочницу приложения и каталог /sdcard
, что открывает злоумышленнику очень широкую поверхность атаки.
Делитесь узкими диапазонами путей
В файле конфигурации пути избегайте совместного использования широкого диапазона путей, например .
или /
. Это может привести к ошибочному раскрытию конфиденциальных файлов. Делитесь только ограниченным/более узким диапазоном путей и убедитесь, что по этому пути находятся только файлы, которыми вы хотите поделиться. Это предотвратит случайное раскрытие конфиденциальных файлов.
Типичный файл конфигурации с более безопасными настройками может выглядеть так:
XML
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
Проверьте и подтвердите внешние URI.
Проверьте внешние URI (используя схему content
) и убедитесь, что они не указывают на локальные файлы вашего приложения. Это предотвращает любую непреднамеренную утечку информации.
Предоставьте минимальные права доступа
content URI
может иметь разрешения на чтение и запись. Убедитесь, что предоставлено только минимально необходимое разрешение доступа. Например, если требуется только разрешение на чтение, явно предоставьте только FLAG_GRANT_READ_URI_PERMISSION
.
Избегайте использования <external-path> для хранения/передачи конфиденциальной информации.
Конфиденциальные данные, такие как личная информация (PII), не должны храниться за пределами контейнера приложения или хранилища системных учетных данных. Таким образом, избегайте использования элемента <external-path>
, если только вы явно не подтвердили, что хранимая/передаваемая информация не является конфиденциальной.