Webview Attacks
Vodič o WebView konfiguracijama i bezbednosti
Pregled WebView ranjivosti
Kritičan aspekt Android razvoja uključuje pravilno rukovanje WebView-ima. Ovaj vodič ističe ključne konfiguracije i bezbednosne prakse za smanjenje rizika povezanih sa korišćenjem WebView-a.
Pristup datotekama u WebView-ima
Po defaultu, WebView-ima je dozvoljen pristup datotekama. Ova funkcionalnost se kontroliše metodom setAllowFileAccess()
, dostupnom od Android API nivoa 3 (Cupcake 1.5). Aplikacije sa dozvolom android.permission.READ_EXTERNAL_STORAGE mogu čitati datoteke sa spoljnog skladišta koristeći shemu URL-a za datoteke (file://path/to/file
).
Zastarjele funkcije: Univerzalni i pristup datotekama sa URL-ova
Univerzalni pristup sa URL-ova datoteka: Ova zastarela funkcija je omogućavala cross-origin zahteve sa URL-ova datoteka, predstavljajući značajan bezbednosni rizik zbog potencijalnih XSS napada. Podrazumevana postavka je onemogućena (
false
) za aplikacije koje cilјaju Android Jelly Bean i novije.Da biste proverili ovu postavku, koristite
getAllowUniversalAccessFromFileURLs()
.Da biste izmenili ovu postavku, koristite
setAllowUniversalAccessFromFileURLs(boolean)
.Pristup datotekama sa URL-ova datoteka: Ova funkcija, takođe zastarela, kontrolisala je pristup sadržaju sa drugih URL-ova sheme datoteka. Kao i univerzalni pristup, njena podrazumevana postavka je onemogućena radi poboljšane bezbednosti.
Koristite
getAllowFileAccessFromFileURLs()
da proverite isetAllowFileAccessFromFileURLs(boolean)
da postavite.
Sigurno učitavanje datoteka
Za onemogućavanje pristupa sistemu datoteka dok se i dalje pristupa resursima i sredstvima, koristi se metoda setAllowFileAccess()
. Sa Android R i novijim, podrazumevana postavka je false
.
Proverite sa
getAllowFileAccess()
.Omogućite ili onemogućite sa
setAllowFileAccess(boolean)
.
WebViewAssetLoader
Klasa WebViewAssetLoader je savremeni pristup za učitavanje lokalnih datoteka. Koristi http(s) URL-ove za pristup lokalnim sredstvima i resursima, usklađujući se sa politikom iste porekla, čime se olakšava upravljanje CORS-om.
loadUrl
Ovo je uobičajena funkcija koja se koristi za učitavanje proizvoljnih URL-ova u webview:
Ofc, potencijalni napadač nikada ne bi trebao moći kontrolisati URL koji aplikacija učitava.
JavaScript i rukovanje Intent shemama
JavaScript: Onemogućen po defaultu u WebView-ima, može se omogućiti putem
setJavaScriptEnabled()
. Preporučuje se oprez jer omogućavanje JavaScript-a bez odgovarajućih zaštita može uvesti sigurnosne ranjivosti.Intent shema: WebView-ovi mogu obraditi
intent
shemu, što može dovesti do eksploatacija ako se ne upravlja pažljivo. Jedna ranjivost uključivala je izloženi WebView parametar "support_url" koji se mogao iskoristiti za izvršavanje napada skriptiranja između sajtova (XSS).
Primer eksploatacije koristeći adb:
Javascript Bridge
Funkcija koju pruža Android omogućava JavaScript-u u WebView-u da poziva nativne Android funkcije aplikacije. To se postiže korišćenjem addJavascriptInterface
metode, koja integriše JavaScript sa nativnim Android funkcionalnostima, nazvanim WebView JavaScript bridge. Potrebna je opreznost jer ova metoda omogućava svim stranicama unutar WebView-a da pristupe registrovanom JavaScript Interface objektu, što predstavlja sigurnosni rizik ako se osetljive informacije izlože putem ovih interfejsa.
Ekstremna opreznost je potrebna za aplikacije koje cilјaju Android verzije ispod 4.2 zbog ranjivosti koja omogućava dalјinsko izvršavanje koda putem zlonamernog JavaScript-a, koristeći refleksiju.
Implementacija JavaScript Bridge-a
JavaScript interfejsi mogu interagovati sa nativnim kodom, kao što je prikazano u primerima gde je metoda klase izložena JavaScript-u:
JavaScript Bridge se omogućava dodavanjem interfejsa u WebView:
Potencijalna eksploatacija putem JavaScript-a, na primer, putem XSS napada, omogućava pozivanje izloženih Java metoda:
Da biste smanjili rizike, ograničite korišćenje JavaScript mosta na kod koji je isporučen sa APK-om i sprečite učitavanje JavaScript-a iz udaljenih izvora. Za starije uređaje, postavite minimalni API nivo na 17.
Izvršenje daljinskog koda zasnovano na refleksiji (RCE)
Dokumentovana metoda omogućava postizanje RCE putem refleksije izvršavanjem specifičnog payload-a. Međutim,
@JavascriptInterface
anotacija sprečava neovlašćen pristup metodama, ograničavajući površinu napada.
Daljinsko debagovanje
Daljinsko debagovanje je moguće sa Chrome Developer Tools, omogućavajući interakciju i proizvoljno izvršavanje JavaScript-a unutar WebView sadržaja.
Omogućavanje daljinskog debagovanja
Daljinsko debagovanje može biti omogućeno za sve WebView-ove unutar aplikacije na sledeći način:
Da uslovno omogućite debagovanje na osnovu stanja debagovanja aplikacije:
Ekstrakcija proizvoljnih fajlova
Prikazuje ekstrakciju proizvoljnih fajlova koristeći XMLHttpRequest:
Reference
Last updated