Webview Attacks
Przewodnik po konfiguracjach WebView i bezpieczeństwie
Przegląd podatności WebView
Krytycznym aspektem rozwoju aplikacji na Androida jest prawidłowe zarządzanie WebView. Ten przewodnik podkreśla kluczowe konfiguracje i praktyki bezpieczeństwa, aby zminimalizować ryzyko związane z używaniem WebView.
Dostęp do plików w WebView
Domyślnie WebView zezwala na dostęp do plików. Ta funkcjonalność jest kontrolowana przez metodę setAllowFileAccess()
, dostępną od poziomu API Androida 3 (Cupcake 1.5). Aplikacje z uprawnieniem android.permission.READ_EXTERNAL_STORAGE mogą odczytywać pliki z pamięci zewnętrznej, używając schematu URL pliku (file://path/to/file
).
Wycofane funkcje: Uniwersalny dostęp i dostęp do plików z URL
Uniwersalny dostęp z URL plików: Ta wycofana funkcja pozwalała na żądania między źródłami z URL plików, co stanowiło istotne ryzyko bezpieczeństwa z powodu potencjalnych ataków XSS. Domyślne ustawienie jest wyłączone (
false
) dla aplikacji celujących w Android Jelly Bean i nowsze.Aby sprawdzić to ustawienie, użyj
getAllowUniversalAccessFromFileURLs()
.Aby zmodyfikować to ustawienie, użyj
setAllowUniversalAccessFromFileURLs(boolean)
.Dostęp do plików z URL plików: Ta funkcja, również wycofana, kontrolowała dostęp do treści z innych URL schematu pliku. Podobnie jak uniwersalny dostęp, jej domyślne ustawienie jest wyłączone dla zwiększenia bezpieczeństwa.
Użyj
getAllowFileAccessFromFileURLs()
do sprawdzenia isetAllowFileAccessFromFileURLs(boolean)
do ustawienia.
Bezpieczne ładowanie plików
Aby wyłączyć dostęp do systemu plików, jednocześnie uzyskując dostęp do zasobów i aktywów, używa się metody setAllowFileAccess()
. W przypadku Androida R i nowszych domyślne ustawienie to false
.
Sprawdź za pomocą
getAllowFileAccess()
.Włącz lub wyłącz za pomocą
setAllowFileAccess(boolean)
.
WebViewAssetLoader
Klasa WebViewAssetLoader to nowoczesne podejście do ładowania lokalnych plików. Używa URL http(s) do uzyskiwania dostępu do lokalnych zasobów i aktywów, zgodnie z zasadą tej samej lokalizacji, co ułatwia zarządzanie CORS.
loadUrl
To powszechna funkcja używana do ładowania dowolnych URL w webview:
Ofc, potencjalny atakujący nigdy nie powinien mieć możliwości kontrolowania URL, który aplikacja ma załadować.
Obsługa JavaScript i schematu Intent
JavaScript: Domyślnie wyłączony w WebView, można go włączyć za pomocą
setJavaScriptEnabled()
. Należy zachować ostrożność, ponieważ włączenie JavaScript bez odpowiednich zabezpieczeń może wprowadzić luki w zabezpieczeniach.Schemat Intent: WebView może obsługiwać schemat
intent
, co może prowadzić do exploitów, jeśli nie jest starannie zarządzane. Przykładowa luka polegała na ujawnionym parametrze WebView "support_url", który mógł być wykorzystany do przeprowadzenia ataków cross-site scripting (XSS).
Przykład eksploatacji przy użyciu adb:
Mostek JavaScript
Funkcja ta jest dostarczana przez Androida, która umożliwia JavaScript w WebView wywoływanie funkcji natywnych aplikacji Android. Osiąga się to poprzez wykorzystanie metody addJavascriptInterface
, która integruje JavaScript z natywnymi funkcjonalnościami Androida, określaną jako mostek JavaScript WebView. Należy zachować ostrożność, ponieważ ta metoda pozwala wszystkim stronom w WebView na dostęp do zarejestrowanego obiektu Interfejsu JavaScript, co stanowi ryzyko bezpieczeństwa, jeśli wrażliwe informacje są ujawniane przez te interfejsy.
Wymagana jest ekstremalna ostrożność dla aplikacji celujących w wersje Androida poniżej 4.2 z powodu luki umożliwiającej zdalne wykonanie kodu przez złośliwy JavaScript, wykorzystując refleksję.
Implementacja Mostka JavaScript
Interfejsy JavaScript mogą wchodzić w interakcje z kodem natywnym, jak pokazano w przykładach, gdzie metoda klasy jest udostępniana JavaScript:
Mostek JavaScript jest włączony poprzez dodanie interfejsu do WebView:
Potencjalne wykorzystanie przez JavaScript, na przykład, za pomocą ataku XSS, umożliwia wywoływanie wystawionych metod Java:
Aby zminimalizować ryzyko, ogranicz użycie mostka JavaScript do kodu dostarczonego z APK i zapobiec ładowaniu JavaScript z zdalnych źródeł. Dla starszych urządzeń ustaw minimalny poziom API na 17.
Wykonanie zdalnego kodu oparte na refleksji (RCE)
Udokumentowana metoda pozwala na osiągnięcie RCE poprzez refleksję, wykonując określony ładunek. Jednak adnotacja
@JavascriptInterface
zapobiega nieautoryzowanemu dostępowi do metod, ograniczając powierzchnię ataku.
Zdalne debugowanie
Zdalne debugowanie jest możliwe za pomocą Narzędzi dewelopera Chrome, co umożliwia interakcję i dowolne wykonanie JavaScript w treści WebView.
Włączanie zdalnego debugowania
Zdalne debugowanie można włączyć dla wszystkich WebView w aplikacji poprzez:
Aby warunkowo włączyć debugowanie w zależności od stanu debugowalności aplikacji:
Ekstrahowanie dowolnych plików
Demonstruje ekstrahowanie dowolnych plików za pomocą XMLHttpRequest:
Odniesienia
Last updated