Kategoria OWASP: MASVS-STORAGE: Storage
Omówienie
Nieprawidłowo skonfigurowany FileProvider
może nieumyślnie ujawnić pliki i katalogi atakującemu. W zależności od konfiguracji osoba atakująca może odczytywać lub zapisywać te pliki, co może prowadzić do wycieku informacji poufnych lub, w najgorszym przypadku, do wykonania dowolnego kodu. Na przykład aplikacja z ustawieniem <root-path>
w konfiguracji może umożliwić atakującemu dostęp do informacji poufnych przechowywanych w bazach danych lub nadpisanie natywnych bibliotek aplikacji, co prowadzi do wykonania dowolnego kodu.
Wpływ
Wpływ zależy od konfiguracji i treści pliku, ale zwykle prowadzi do wycieku danych (podczas odczytu) lub nadpisania (podczas zapisu) plików.
Środki zaradcze
Nie używaj elementu ścieżki <root-path> w konfiguracji.
<root-path>
odpowiada katalogowi głównym urządzenia (/
). Zezwolenie na to w konfiguracji zapewnia dowolny dostęp do plików i folderów, w tym piaskownicy aplikacji i katalogu /sdcard
, co daje atakującemu bardzo szerokie pole do ataków.
Udostępnianie zakresów ścieżek wąskich
W pliku konfiguracji ścieżki unikaj udostępniania szerokiego zakresu ścieżki, np. .
lub /
. Może to spowodować przypadkowe ujawnienie poufnych plików. Udostępniaj tylko ograniczony zakres ścieżki i upewnij się, że znajdują się na niej tylko pliki, które chcesz udostępnić. Zapobiegnie to przypadkowemu ujawnieniu poufnych plików.
Typowy plik konfiguracji z bezpieczniejszymi ustawieniami może wyglądać tak:
Xml
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
Sprawdź i zweryfikuj identyfikatory URI zewnętrzne
Sprawdź zewnętrzne identyfikatory URI (za pomocą schematu content
) i upewnij się, że nie wskazują one na pliki lokalne aplikacji. Zapobiega to przypadkowemu wyciekowi informacji.
Przyznawanie minimalnych uprawnień dostępu
content URI
może mieć uprawnienia do odczytu i zapisu. Upewnij się, że przyznane są tylko minimalne wymagane uprawnienia dostępu.
Jeśli na przykład tylko uprawnienia do odczytu są wymagane, przyznaj je wyraźnie: FLAG_GRANT_READ_URI_PERMISSION
.
Unikaj używania parametru <external-path> do przechowywania lub udostępniania informacji poufnych
Dane wrażliwe, takie jak informacje umożliwiające identyfikację, nie powinny być przechowywane poza kontenerem aplikacji ani systemem przechowywania danych logowania. Dlatego unikaj używania elementu <external-path>
, chyba że wyraźnie potwierdzisz, że przechowywane lub udostępniane informacje nie są poufne.