Nieprawidłowo ujawnione katalogi dla FileProvider

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.

Materiały