Webview Attacks

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Gids oor WebView Konfigurasies en Sekuriteit

Oorsig van WebView Swakhede

'n Kritiese aspek van Android-ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's wat verband hou met WebView-gebruik te verminder.

Lêertoegang in WebViews

Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die setAllowFileAccess() metode, beskikbaar sedert Android API-vlak 3 (Cupcake 1.5). Aansoeke met die android.permission.READ_EXTERNAL_STORAGE toestemming kan lêers vanaf eksterne stoor lees deur 'n lêer-URL-skema (file://path/to/file) te gebruik.

Verouderde Funksies: Universele en Lêertoegang vanaf URL's

  • Universele Toegang Vanaf Lêer-URL's: Hierdie verouderde funksie het kruis-oorsprongversoeke vanaf lêer-URL's toegelaat, wat 'n beduidende sekuriteitsrisiko vir moontlike XSS-aanvalle het ingehou. Die verstekinstelling is gedeaktiveer (false) vir programme wat Android Jelly Bean en nuwer teiken.

  • Om hierdie instelling te kontroleer, gebruik getAllowUniversalAccessFromFileURLs().

  • Om hierdie instelling te wysig, gebruik setAllowUniversalAccessFromFileURLs(boolean).

  • Lêertoegang vanaf Lêer-URL's: Hierdie funksie, ook verouderd, het toegang tot inhoud vanaf ander lêerskema-URL's beheer. Soos universele toegang, is die verstekinstelling gedeaktiveer vir verbeterde sekuriteit.

  • Gebruik getAllowFileAccessFromFileURLs() om te kontroleer en setAllowFileAccessFromFileURLs(boolean) om in te stel.

Veilige Lêerlaai

Vir die deaktivering van lêersisteemtoegang terwyl steeds toegang tot bates en bronne, word die setAllowFileAccess() metode gebruik. Met Android R en hoër is die verstekinstelling false.

  • Kontroleer met getAllowFileAccess().

  • Aktiveer of deaktiveer met setAllowFileAccess(boolean).

WebViewAssetLoader

Die WebViewAssetLoader klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s)-URL's vir die toegang tot plaaslike bates en bronne, in ooreenstemming met die Same-Origin-beleid, wat CORS-bestuur fasiliteer.

loadUrl

Dit is 'n algemene funksie wat gebruik word om willekeurige URL's in 'n webviwe te laai:

webview.loadUrl("<url here>")

Selfs, 'n potensiële aanvaller behoort nooit in staat te wees om die URL te beheer wat 'n aansoek gaan laai.

JavaScript en Intent Skema Hantering

  • JavaScript: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via setJavaScriptEnabled(). Voorsoorsigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwessies kan veroorsaak.

  • Intent Skema: WebViews kan die intent skema hanteer, wat moontlik kan lei tot uitbuitings indien nie sorgvuldig bestuur nie. 'n Voorbeeld van 'n kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat uitgebuit kon word om kruis-webwerf skripsing (XSS) aanvalle uit te voer.

Uitbuitingsvoorbeeld deur adb te gebruik:

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

Javascript-brug

'n Funksie word deur Android voorsien wat JavaScript in 'n WebView moontlik maak om natiewe Android-app-funksies aan te roep. Dit word bereik deur die addJavascriptInterface-metode te gebruik, wat JavaScript integreer met die natiewe Android-funksionaliteite, genoem as 'n WebView JavaScript-brug. Voorsoorsigtigheid word aanbeveel aangesien hierdie metode alle bladsye binne die WebView toelaat om toegang te verkry tot die geregistreerde JavaScript-brug-objek, wat 'n sekuriteitsrisiko inhou as sensitiewe inligting deur hierdie brûe blootgestel word.

  • Uiterste versigtigheid is nodig vir programme wat Android-weergawes onder 4.2 teiken weens 'n kwesbaarheid wat afgeleë kode-uitvoering deur skadelike JavaScript moontlik maak deur refleksie te benut.

Implementering van 'n JavaScript-brug

  • JavaScript-brûe kan met natiewe kode interaksie hê, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:

@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
  • JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView te voeg:

webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Potensiële uitbuiting deur middel van JavaScript, byvoorbeeld via 'n XSS-aanval, maak dit moontlik om blootgestelde Java-metodes aan te roep:

<script>alert(javascriptBridge.getSecret());</script>
  • Om risiko's te verminder, beperk JavaScript-bruggebruik tot kode wat saam met die APK gestuur word en voorkom dat JavaScript vanaf afgeleë bronne gelaai word. Stel vir ouer toestelle die minimum API-vlak op 17.

Refleksie-gebaseerde Afgeleë Kode-uitvoering (RCE)

  • 'n Gedokumenteerde metode maak dit moontlik om RCE deur refleksie te bereik deur 'n spesifieke lading uit te voer. Die @JavascriptInterface-annotasie voorkom egter ongemagtigde metode-toegang en beperk die aanvalsoppervlak.

Afgeleë Foutopsporing

  • Afgeleë foutopsporing is moontlik met Chrome Developer Tools, wat interaksie en willekeurige JavaScript-uitvoering binne die WebView-inhoud moontlik maak.

Afgeleë Foutopsporing Aktiveer

  • Afgeleë foutopsporing kan vir alle WebViews binne 'n toepassing geaktiveer word deur:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Om voorwaardelik die foutopsporing te aktiveer gebaseer op die toestand van die aansoek se foutopsporingsvermoë:

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

Skuif willekeurige lêers uit

  • Wys die skuif van willekeurige lêers uit deur 'n XMLHttpRequest:

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);

Verwysings

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated