Luka dotycząca przemierzania ścieżki

Te informacje są przeznaczone dla programistów aplikacji, które zawierają lukę dotyczącą przemierzania ścieżki.

O co chodzi?

Od 16 stycznia 2018 r. Google Play blokuje publikowanie nowych aplikacji i aktualizacji zawierających lukę dotyczącą przemierzania ścieżki. Zapoznaj się z powiadomieniem w Konsoli Play. Po przekroczeniu terminów wskazanych w Konsoli Play wszystkie aplikacje z lukami w zabezpieczeniach mogą zostać usunięte z Google Play.

Wymagane działania​

  1. Zaloguj się w Konsoli Play i przejdź do sekcji Alerty, by sprawdzić, których aplikacji dotyczy problem i jaki jest termin jego rozwiązania.
  2. Zaktualizuj te aplikacje i usuń lukę w zabezpieczeniach.
  3. Prześlij zaktualizowane wersje tych aplikacji.

Po ponownym przesłaniu aplikacja zostanie jeszcze raz sprawdzona. Ten proces może potrwać kilka godzin. Jeśli aplikacja pomyślnie przejdzie weryfikację i zostanie opublikowana, nie musisz już nic robić. Jeśli wynik weryfikacji nie będzie pomyślny, nowa wersja aplikacji nie zostanie opublikowana, a Ty otrzymasz powiadomienie e-mailem.

Dodatkowe szczegóły

Implementacje funkcji openFile w wyeksportowanych komponentach ContentProvider mogą być podatne na atak, jeśli nieprawidłowo sprawdzają przychodzące parametry identyfikatorów URI. Złośliwa aplikacja może mieć własny identyfikator URI (np. zawierający fragment „/../”), by nakłonić aplikację do zwrócenia deskryptora ParcelFileDescriptor dla pliku spoza oczekiwanego katalogu. Skutkuje to przyznaniem złośliwej aplikacji dostępu do dowolnego pliku, do którego ma dostęp aplikacja.

Do wyeliminowania problemu z luką dotyczącą przemierzania ścieżki w komponencie ContentProvider służą dwie strategie:

1. Jeśli komponent ContentProvider nie musi być widoczny dla innych aplikacji:

2. Jeśli komponent ContentProvider musi być widoczny dla innych aplikacji:

Upewnij się, że dane wejściowe funkcji openFile, które zawierają znaki przemierzania ścieżki, nie mogą wymóc na aplikacji zwrócenia nieoczekiwanych plików. Możesz to zrobić, sprawdzając ścieżkę kanoniczną pliku. Na przykład:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Zastrzeżenie: użycie funkcji getLastPathSegment na parametrze identyfikatora URI nie jest bezpieczne. Złośliwa aplikacja może dostarczyć zakodowaną ścieżkę URI taką jak %2F..%2F..path%2Fto%2Fsecret.txt, co spowoduje, że wynikiem funkcji getLastPathSegment będzie /../../path/to/secret.txt. Na atak wciąż jest podatna na przykład ta implementacja:

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

Chętnie Ci pomożemy

Jeśli masz pytania techniczne związane z tą luką w zabezpieczeniach, możesz je opublikować na Stack Overflow, używając tagu „android-security”. Jeśli potrzebujesz wyjaśnienia czynności potrzebnych do rozwiązania tego problemu, skontaktuj się z naszym zespołem pomocy dla deweloperów.

Czy to było pomocne?

Jak możemy ją poprawić?
false
Menu główne
16496129503587793142
true
Wyszukaj w Centrum pomocy
true
true
true
true
true
5016068
false
false