Webview Attacks

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Vodič o Konfiguracijama i Bezbednosti WebView-a

Pregled Ranjivosti WebView-a

Ključni aspekt Android razvoja uključuje pravilno rukovanje WebViews-ima. Ovaj vodič ističe ključne konfiguracije i prakse bezbednosti za smanjenje rizika povezanih sa korišćenjem WebView-a.

Pristup fajlovima u WebView-ima

Podrazumevano, WebViews dozvoljavaju pristup fajlovima. 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 fajlove sa spoljnog skladišta koristeći URL šemu fajla (file://putanja/do/fajla).

Zastarele Funkcionalnosti: Univerzalni pristup i Pristup Fajlovima Putem URL-ova

  • Univerzalni pristup putem URL-ova fajlova: Ova zastarela funkcionalnost je dozvoljavala zahteve preko granica sa URL-ova fajlova, predstavljajući značajan bezbednosni rizik zbog potencijalnih XSS napada. Podrazumevana postavka je onemogućena (false) za aplikacije usmerene na Android Jelly Bean i novije verzije.

  • Za proveru ove postavke, koristite getAllowUniversalAccessFromFileURLs().

  • Za modifikaciju ove postavke, koristite setAllowUniversalAccessFromFileURLs(boolean).

  • Pristup fajlovima putem URL-ova fajlova: Ova funkcionalnost, takođe zastarela, kontrolisala je pristup sadržaju sa drugih URL-ova fajlova. Kao i univerzalni pristup, podrazumevana postavka je onemogućena radi poboljšane bezbednosti.

  • Koristite getAllowFileAccessFromFileURLs() za proveru i setAllowFileAccessFromFileURLs(boolean) za podešavanje.

Bezbedno Učitavanje Fajlova

Za onemogućavanje pristupa fajl sistemu dok se i dalje pristupa resursima i aktivama, koristi se metoda setAllowFileAccess(). Sa Android R i novijim verzijama, podrazumevana postavka je false.

  • Proverite sa getAllowFileAccess().

  • Omogućite ili onemogućite sa setAllowFileAccess(boolean).

WebViewAssetLoader

Klasa WebViewAssetLoader je moderni pristup za učitavanje lokalnih fajlova. Koristi http(s) URL-ove za pristup lokalnim aktivama i resursima, usklađujući se sa politikom istog porekla, olakšavajući time upravljanje CORS-om.

loadUrl

Ovo je česta funkcija koja se koristi za učitavanje proizvoljnih URL-ova u webview-u:

webview.loadUrl("<url here>")

JavaScript i rukovanje Intent šemom

  • JavaScript: Onemogućen je podrazumevano u WebViews-u, može se omogućiti putem setJavaScriptEnabled(). Savetuje se oprez jer omogućavanje JavaScript-a bez odgovarajućih zaštita može dovesti do bezbednosnih ranjivosti.

  • Intent Scheme: WebViews mogu rukovati intent šemom, što potencijalno može dovesti do eksploatacije ako se pažljivo ne upravlja. Primer ranjivosti uključivao je izloženi WebView parametar "support_url" koji bi mogao biti iskorišćen za izvođenje napada preko skriptova na različitim sajtovima (XSS).

Primer eksploatacije korišćenjem adb:

adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"

JavaScript Most

Android pruža funkciju koja omogućava JavaScript-u u WebView-u da poziva nativne funkcije Android aplikacije. Ovo se postiže korišćenjem metode addJavascriptInterface, koja integriše JavaScript sa nativnim Android funkcionalnostima, nazvanu WebView JavaScript most. Potrebna je opreznost jer ova metoda omogućava svim stranicama unutar WebView-a pristup registrovanom JavaScript interfejs objektu, što predstavlja sigurnosni rizik ako osetljive informacije budu izložene putem ovih interfejsa.

  • Izuzetna opreznost je potrebna za aplikacije koje ciljaju Android verzije ispod 4.2 zbog ranjivosti koja omogućava izvršavanje udaljenog koda putem zlonamernog JavaScript-a, eksploatišući refleksiju.

Implementacija JavaScript Mosta

  • JavaScript interfejsi mogu da komuniciraju sa nativnim kodom, kao što je prikazano u primerima gde je metoda klase izložena JavaScript-u:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript Bridge je omogućen dodavanjem interfejsa WebView-u:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Potencijalna eksploatacija putem JavaScript-a, na primer, putem XSS napada, omogućava pozivanje izloženih Java metoda:

<script>alert(javascriptBridge.getSecret());</script>
  • Da biste smanjili rizike, ograničite korišćenje JavaScript mosta na kod isporučen sa APK-om i sprečite učitavanje JavaScript-a sa udaljenih izvora. Za starije uređaje, postavite minimalni API nivo na 17.

Izvršavanje udaljenog koda zasnovano na refleksiji (RCE)

  • Dokumentovana metoda omogućava postizanje RCE-a putem refleksije izvršavanjem određenog payload-a. Međutim, @JavascriptInterface anotacija sprečava neovlašćen pristup metodama, ograničavajući površinu napada.

Udaljeno ispravljanje grešaka

  • Udaljeno ispravljanje grešaka je moguće pomoću Chrome Developer alata, omogućavajući interakciju i proizvoljno izvršavanje JavaScript koda unutar WebView sadržaja.

Omogućavanje udaljenog ispravljanja grešaka

  • Udaljeno ispravljanje grešaka može biti omogućeno za sve WebViews unutar aplikacije putem:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Da biste uslovno omogućili debagovanje na osnovu stanja aplikacije koja se može debagovati:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Iznesite proizvoljne datoteke

  • Demonstrira iznošenje proizvoljnih datoteka korišćenjem XMLHttpRequest-a:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated