mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-17 06:28:27 +00:00
153 lines
9.6 KiB
Markdown
153 lines
9.6 KiB
Markdown
# Attacchi Webview
|
||
|
||
<details>
|
||
|
||
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary>
|
||
|
||
Altri modi per supportare HackTricks:
|
||
|
||
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||
|
||
</details>
|
||
|
||
## Guida sulle Configurazioni e la Sicurezza di WebView
|
||
|
||
### Panoramica delle Vulnerabilità di WebView
|
||
|
||
Un aspetto critico dello sviluppo Android coinvolge la corretta gestione delle WebViews. Questa guida mette in evidenza le configurazioni chiave e le pratiche di sicurezza per mitigare i rischi associati all'uso di WebView.
|
||
|
||
![Esempio di WebView](<../../.gitbook/assets/image (718).png>)
|
||
|
||
### **Accesso ai File nelle WebViews**
|
||
|
||
Per impostazione predefinita, le WebViews consentono l'accesso ai file. Questa funzionalità è controllata dal metodo `setAllowFileAccess()`, disponibile da Android API livello 3 (Cupcake 1.5). Le applicazioni con il permesso **android.permission.READ\_EXTERNAL\_STORAGE** possono leggere file dalla memoria esterna utilizzando uno schema di URL file (`file://percorso/al/file`).
|
||
|
||
#### **Funzionalità Deprecate: Accesso Universale e Accesso ai File da URL**
|
||
|
||
* **Accesso Universale da URL File**: Questa funzionalità deprecata consentiva richieste cross-origin da URL file, rappresentando un rischio significativo per la sicurezza a causa dei potenziali attacchi XSS. L'impostazione predefinita è disabilitata (`false`) per le app che mirano ad Android Jelly Bean e versioni successive.
|
||
* Per verificare questa impostazione, utilizzare `getAllowUniversalAccessFromFileURLs()`.
|
||
* Per modificare questa impostazione, utilizzare `setAllowUniversalAccessFromFileURLs(boolean)`.
|
||
* **Accesso ai File da URL File**: Questa funzionalità, anch'essa deprecata, controllava l'accesso ai contenuti da altri URL con schema file. Come l'accesso universale, l'impostazione predefinita è disabilitata per una maggiore sicurezza.
|
||
* Utilizzare `getAllowFileAccessFromFileURLs()` per verificare e `setAllowFileAccessFromFileURLs(boolean)` per impostare.
|
||
|
||
#### **Caricamento Sicuro dei File**
|
||
|
||
Per disabilitare l'accesso al sistema di file pur consentendo l'accesso agli asset e alle risorse, viene utilizzato il metodo `setAllowFileAccess()`. Con Android R e versioni successive, l'impostazione predefinita è `false`.
|
||
|
||
* Verificare con `getAllowFileAccess()`.
|
||
* Abilitare o disabilitare con `setAllowFileAccess(boolean)`.
|
||
|
||
#### **WebViewAssetLoader**
|
||
|
||
La classe **WebViewAssetLoader** è l'approccio moderno per il caricamento di file locali. Utilizza URL http(s) per accedere agli asset e alle risorse locali, allineandosi alla politica Same-Origin, facilitando così la gestione di CORS.
|
||
|
||
### loadUrl
|
||
|
||
Questa è una funzione comune utilizzata per caricare URL arbitrari in una webview:
|
||
```java
|
||
webview.loadUrl("<url here>")
|
||
```
|
||
Naturalmente, un potenziale attaccante non dovrebbe mai essere in grado di **controllare l'URL** che un'applicazione sta per caricare.
|
||
|
||
### **Gestione di JavaScript e Intent Scheme**
|
||
|
||
* **JavaScript**: Disabilitato per impostazione predefinita nelle WebViews, può essere abilitato tramite `setJavaScriptEnabled()`. Si consiglia cautela poiché abilitare JavaScript senza adeguate protezioni può introdurre vulnerabilità di sicurezza.
|
||
* **Intent Scheme**: Le WebViews possono gestire lo schema `intent`, potenzialmente portando a exploit se non gestito attentamente. Un esempio di vulnerabilità coinvolgeva un parametro WebView esposto "support\_url" che poteva essere sfruttato per eseguire attacchi di scripting tra siti (XSS).
|
||
|
||
![WebView Vulnerabile](<../../.gitbook/assets/image (719).png>)
|
||
|
||
Esempio di sfruttamento utilizzando adb:
|
||
|
||
{% code overflow="wrap" %}
|
||
```bash
|
||
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
|
||
```
|
||
{% endcode %}
|
||
|
||
### Ponte JavaScript
|
||
|
||
Android fornisce una funzionalità che consente a **JavaScript** in un WebView di invocare **funzioni dell'applicazione Android nativa**. Ciò è realizzato utilizzando il metodo `addJavascriptInterface`, che integra JavaScript con le funzionalità native di Android, definito come un _ponte JavaScript di WebView_. Si consiglia cautela poiché questo metodo consente a tutte le pagine all'interno del WebView di accedere all'oggetto dell'Interfaccia JavaScript registrata, creando un rischio di sicurezza se informazioni sensibili sono esposte attraverso queste interfacce.
|
||
|
||
* **È necessaria estrema cautela** per le app che mirano a versioni di Android precedenti alla 4.2 a causa di una vulnerabilità che consente l'esecuzione di codice remoto attraverso JavaScript dannoso, sfruttando la riflessione.
|
||
|
||
#### Implementazione di un Ponte JavaScript
|
||
|
||
* Le **interfacce JavaScript** possono interagire con il codice nativo, come mostrato negli esempi in cui un metodo di classe è esposto a JavaScript:
|
||
```javascript
|
||
@JavascriptInterface
|
||
public String getSecret() {
|
||
return "SuperSecretPassword";
|
||
};
|
||
```
|
||
* Il JavaScript Bridge è abilitato aggiungendo un'interfaccia alla WebView:
|
||
```javascript
|
||
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
|
||
webView.reload();
|
||
```
|
||
* Possibile sfruttamento tramite JavaScript, ad esempio, tramite un attacco XSS, consente di chiamare metodi Java esposti:
|
||
```html
|
||
<script>alert(javascriptBridge.getSecret());</script>
|
||
```
|
||
* Per mitigare i rischi, **limitare l'uso del ponte JavaScript** al codice incluso nell'APK e impedire il caricamento di JavaScript da fonti remote. Per i dispositivi più vecchi, impostare il livello API minimo su 17.
|
||
|
||
### Esecuzione di Codice Remoto (RCE) basata su Reflection
|
||
|
||
* Un metodo documentato consente di ottenere RCE attraverso la reflection eseguendo un payload specifico. Tuttavia, l'annotazione `@JavascriptInterface` impedisce l'accesso non autorizzato ai metodi, limitando la superficie di attacco.
|
||
|
||
### Debugging Remoto
|
||
|
||
* Il **debugging remoto** è possibile con **Chrome Developer Tools**, consentendo l'interazione e l'esecuzione arbitraria di JavaScript all'interno del contenuto del WebView.
|
||
|
||
#### Abilitazione del Debugging Remoto
|
||
|
||
* Il debugging remoto può essere abilitato per tutti i WebView all'interno di un'applicazione tramite:
|
||
```java
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||
WebView.setWebContentsDebuggingEnabled(true);
|
||
}
|
||
```
|
||
* Per abilitare condizionalmente il debug in base allo stato di debug dell'applicazione:
|
||
```java
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
|
||
{ WebView.setWebContentsDebuggingEnabled(true); }
|
||
}
|
||
```
|
||
## Estrarre file arbitrari
|
||
|
||
* Dimostra l'estrazione di file arbitrari utilizzando un XMLHttpRequest:
|
||
```javascript
|
||
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);
|
||
```
|
||
## Riferimenti
|
||
|
||
* [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)
|
||
|
||
<details>
|
||
|
||
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Altri modi per supportare HackTricks:
|
||
|
||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|